2010-11-20 12 views
9

में ActivePerl का उपयोग कर खाली है मेरे पास निम्न पर्ल स्क्रिप्ट है। मैं ActivePerl का उपयोग कर विंडोज 7 में इसे चलाने के लिए कोशिश कर रहा हूँ:@ARGV विंडोज 7

#!c:\Perl64\bin\perl.exe -w 

use strict; 

my $mp3splt_exe = 'c:\Program Files (x86)\mp3splt\mp3splt.exe'; 

my $mp3splt_args = '-o "@n @f" -g "r%[@o @N]" -f -t 6.0'; 

print @ARGV; 
my $filename = $ARGV[0]; 

print "$mp3splt_exe $mp3splt_args $filename\n"; 

(आप देख सकते हैं, मैं mp3splt :-) के लिए एक आवरण बनाने के लिए कोशिश कर रहा हूँ) जब मैं इसे इस तरह से चलाने के

:

C: \ Program Files (x86) \ mp3splt> run_mp3splt.pl एक

मैं इस:

Use of uninitialized value $filename in concatenation (.) or string at C:\Program Files (x86)\mp3splt\run_mp3splt.pl line 12. 
c:\Program Files (x86)\mp3splt\mp3splt.exe -o "@n @f" -g "r%[@o @N]" -f -t 6.0 
सभी की

तो, सब से पहले, जब मैं print @ARGV, कुछ भी प्रिंट हो जाती है, और दूसरा, जब मैं $filename = $ARGV[0] असाइन करते हैं, $filenameundef है, इसलिए मैं चेतावनी मिलती है।

तो ... मैं क्या गलत कर रहा हूं? स्क्रिप्ट को कमांडलाइन पैरामीटर क्यों नहीं दिया जा रहा है?

+0

यह वास्तव में अजीब है, क्योंकि मैंने अभी अपने Win7 बॉक्स पर स्निपेट चलाया और वास्तव में काम किया। आप किस संस्करण का उपयोग कर रहे हैं, और आपने विंडोज 7 के लिए उचित स्थापित किया है? इस perl -e "प्रिंट @ARGV" aaaa को चलाने का प्रयास करें और देखें कि क्या आपको कोई आउटपुट मिलता है, अगर आप नहीं करते हैं तो निश्चित रूप से आपके perl स्थापना में कुछ गड़बड़ है। यदि आप करते हैं, तो संभवतः आपको स्क्रिप्ट में कुछ संघर्ष हैं, घोषित चर के दायरे की जांच करें। –

उत्तर

-2

मुझे पूरा यकीन है कि विंडोज 7 शेबांग लाइन को समझ में नहीं आता है। यदि आप perl run_mp3splt.pl a के साथ इसे चलाते हैं तो क्या होता है?

+5

शेबांग समस्या नहीं हो सकती है। विंडोज एक्सटेंशन एसोसिएशन का उपयोग करता है। ActiveState इंस्टॉलर perl के साथ '.pl' फ़ाइलों को संबद्ध करता है। – jira

30

जैसा कि अन्य ने perl blah.pl asdf कार्यों को इंगित किया है, जबकि blah.pl asdf विफल रहता है। ऐसा इसलिए है क्योंकि जब आप सीधे पर्ल स्क्रिप्ट चलाते हैं, तो विंडोज़ को यह पता चलता है कि इसे पर्ल कॉल करना होगा, और नियम perl "%1" का उपयोग करता है, जो केवल स्क्रिप्ट नाम को perl में पास करता है, पैरामीटर में से कोई भी नहीं।

इस सुलझाने के लिए आपको नियम perl "%1" %*

का उपयोग कैसे करें कि क्या करने के लिए एक छोटे से थकाऊ हो सकता है खिड़कियों बताने के लिए है:

विकल्प 1

perlmonks के अनुसार

, आप कमांडलाइन पर assoc और ftype का उपयोग करने में सक्षम होना चाहिए। वास्तव में, यदि आप टाइप help ftype, यह आपको बताता है कि कैसे करने के लिए सेटअप पर्ल:

assoc .pl=PerlScript 
ftype PerlScript=perl.exe %1 %* 

assoc चलाने के लिए खिड़की पर व्यवस्थापक के रूप में cmd ​​चलाने की आवश्यकता 7.

बहरहाल, यह मेरे लिए काम नहीं किया । विंडोज ने एसोसिएशन को नजरअंदाज कर दिया। मुझे रजिस्ट्री को संशोधित करना पड़ा। यह Win 7 पर Default Programs उपयोगिता चलाने के लिए गुमराह सलाह के कारण हो सकता है, जो आपको दिए गए फ़ाइल एक्सटेंशन के लिए उपयोग करने के लिए प्रोग्राम निर्दिष्ट करने देता है। XP के विपरीत, यह आपको एकाधिक कमांड विकल्प निर्दिष्ट करने की अनुमति देता है (राइट-क्लिक मेनू में उपयोग करने के लिए) - यह केवल आपको उस प्रोग्राम को निर्दिष्ट करने की अनुमति देगा जिसका उपयोग आप डबल-क्लिक करते हैं एक फ़ाइल (या कमांडलाइन से foo.pl चलाएं)।perl या PerlScript के लिए HKEY_CLASSES_ROOT

प्रविष्टियों आप Assoc/ftype आदेशों का उपयोग किया है, तो आप हो सकता है:

विकल्प 2

रजिस्ट्री को संशोधित करें। जैसा कि मैंने पहले कहा था, इन्हें अनदेखा कर दिया जाएगा। pl_auto_file के लिए देखो, और command थोड़ा गहराई में जाकर:

HKCR\pl_auto_file\shell\open\command 
यहाँ

(Default) की तरह कुछ करने के लिए सेट किया जाना चाहिए: "C:\Perl\bin\perl.exe" "%1"

कि के अंत पर याद आ रही %* जोड़ें और आप जाने के लिए अच्छा होना चाहिए: "C:\Perl\bin\perl.exe" "%1" %*

कोई रीबूट आवश्यक नहीं है।

विकल्प 3

आप आलसी और विश्वास हो, तो आप एक reg फ़ाइल के रूप में इस का उपयोग कर कोशिश कर सकते हैं, और अपने रजिस्ट्री में आयात:

Windows Registry Editor Version 5.00 

[HKEY_CLASSES_ROOT\pl_auto_file\shell\open\command] 
@="\"C:\\Perl\\bin\\perl.exe\" \"%1\" %*" 

यह सुनिश्चित करने के लिए पर्याप्त होना चाहिए blah.pl asdf काम।

+0

इसके अतिरिक्त (विकल्प 2 और 3 के लिए), एक मौजूदा, प्रति-उपयोगकर्ता कुंजी हो सकती है जो इस स्थान को ओवरराइड कर देगी। जैसे: HKEY_USERS \ S-X-X-XX-XXXXXXX-XXXXXX-XXXXXXX-XXXX \ Software \ Classes \ pl_auto_file। मैं इस कुंजी को पूरी तरह से हटाने और विकल्प 2 या विकल्प 3 में से किसी एक का उपयोग करने की अनुशंसा करता हूं। हालांकि, आप इस कुंजी को भी संपादित कर सकते हैं (और फिर परिवर्तन केवल आपके उपयोगकर्ता के लिए काम करेगा)। – teeks99

6

मैं समस्या यह है कि अगर मैं Win7 पर निष्पादित किया है:

perl myprog.pl a b c 

कार्यक्रम मापदंडों मिला (@ARGV में) सही ढंग से, लेकिन अगर मैं मार डाला:

myprog.pl a b c 

कार्यक्रम पैरामीटर प्राप्त नहीं करेंगे।

मैंने एक समाधान के लिए वेब की खोज की और जल्द ही पाया कि यह कोई ActiveState perl समस्या नहीं थी, लेकिन विंडोज़ (Win7) में फ़ाइलटाइप एसोसिएशन समस्या की संभावना है, (पर्लमोंक्स वेबसाइट के लिए धन्यवाद)।

हालांकि सभी

assoc .pl=Perl 

और

बदलते समाधान
ftype Perl="C:\Perl\bin\perl.exe" "%1" %* 

मेरे लिए पहेली को हल नहीं किया। मैं नोटिस कि Assoc .pl किसी भी तरह से उपयोग नहीं किया गया था, क्योंकि अगर मैं Assoc .plx = पर्ल जोड़ा गया है और myprog.plx को

myprog.plx a b c 

पूरी तरह से काम किया है मेरे कार्यक्रम का नाम बदला!

तो फिर मैं Microsoft मंच पर इस समस्या को पढ़ा गया Win7 "सुविधा" डिफ़ॉल्ट कार्यक्रम उल्लेख किया गया था, मैं मेरी समस्या का हल मिल गया:

ओपन डिफ़ॉल्ट प्रारंभ बटन पर क्लिक करके कार्यक्रम, और फिर क्लिक करें " डिफ़ॉलट कार्यक्रम"।

"प्रोग्राम के साथ फ़ाइल प्रकार या प्रोटोकॉल संबद्ध करें" का चयन करें और ".pl" चुनें और "प्रोग्राम बदलें" पर क्लिक करें।अनुशंसित कार्यक्रमों के रूप में निर्दिष्ट एक पर्ल कमांड लाइन इंटरप्रेटर पहले से ही था लेकिन इसके बजाय मैंने ब्राउज़ पर क्लिक किया और खुद Perl.exe का चयन किया। "एक फ़ाइल प्रकार संबद्ध करें ..." स्क्रीन बंद करने के बाद,

myprog.pl a b c 

एक आकर्षण की तरह निष्पादित, सभी पैरामीटर सही ढंग से मेरे कार्यक्रम द्वारा पुनर्प्राप्त किए गए थे।

आशा है कि मदद करता है ...

+1

यहां कुंजी को ब्राउज़ करना और स्पष्ट रूप से अपने exe को चुनना है। मैंने अपने सेटअप को देखने में घंटों बिताए और सब ठीक लग रहा था। मैंने यह किया और यह पूरी तरह से काम किया! धन्यवाद! – JamesG

2

Windows 8.1 में पर्ल ARGV समस्या समाधान:

HKEY_CLASSES_ROOT \ आवेदन \ perl.exe \ खोल \ खुला \ कमान = "C: \ पर्ल \ बिन \ perl.exe ""% 1 "% *

कोई पुनः बूट आवश्यक नहीं है।