問題: Windows XP未將命令行參數傳遞給perl腳本。
症狀:一個簡單的命令,如:
say "Argument 1 (\$ARGV[0]) is: $ARGV[0], argument 2 (\$ARGV[1]) is: $ARGV[1].";
了:
Use of uninitialized value $ARGV[0] in concatenation (.) or string at...
解決方案:
問題的根源是Windows XP。啓動perl的默認方法只傳遞第一個變量,即腳本名稱。結果是$ ARGV [0]未初始化。
解決方法是編輯Windows註冊表:
\HKEY_CLASSES_ROOT\Perl\shell\Open\command
而且使該條目:
"C:\Perl\bin\perl.exe" %*
結果是:
C:\whatever>perl argtest.pl 1 2
Argument 1 ($ARGV[0]) is: 1, argument 2 ($ARGV[1]) is: 2.
特別是由於大衛W¯¯誰指出我在正確的方向。
你鏈接的教程不是很高的質量。它甚至沒有「嚴格使用」。 – simbabque 2013-04-04 20:51:47
幽默我:試試'argtest 1 2 3',看看會發生什麼。 – 2013-04-04 20:52:30
我嘗試了你的代碼(Mac OS X 10.7.5上的Perl 5.16.2;離你的平臺很遠),並且用'x.pl 1 2',我得到了'在串聯(。)或字符串中使用未初始化的值'和輸出 '參數0:1,參數1:2,參數2:.'我想知道你的Perl是否會誤導你(儘管你的輸出與'$ ARGV [0 ]未被初始化)。請記住,'$ 0'包含腳本的名稱; '$ ARGV [0]'包含腳本的第一個參數的名稱。 – 2013-04-04 20:54:41