Problem: Windows XP übergibt Befehlszeilenargumente nicht an Perl-Skripts.
Symptom: einen einfachen Befehl wie:
say "Argument 1 (\$ARGV[0]) is: $ARGV[0], argument 2 (\$ARGV[1]) is: $ARGV[1].";
in Resultierte:
Use of uninitialized value $ARGV[0] in concatenation (.) or string at...
Lösung:
Das Root-Problem in Windows XP ist. Die Standardmethode zum Starten von Perl übergibt nur die erste Variable, nämlich den Skriptnamen. Das Ergebnis ist, dass $ ARGV [0] nicht initialisiert ist.
Das Update ist der Windows-Registry auf bearbeiten:
\HKEY_CLASSES_ROOT\Perl\shell\Open\command
und den Eintrag machen:
"C:\Perl\bin\perl.exe" %*
Ergebnis ist:
C:\whatever>perl argtest.pl 1 2
Argument 1 ($ARGV[0]) is: 1, argument 2 ($ARGV[1]) is: 2.
Dank besonders an David W, der darauf hinwies ich in die richtige Richtung.
Das Tutorial, das Sie verlinkt haben, ist nicht sehr hochwertig. Es hat nicht einmal "verwenden streng". – simbabque
Humor mich: Versuch 'argtest 1 2 3' und schau was passiert. –
Ich habe versucht, Ihren Code (Perl 5.16.2 unter Mac OS X 10.7.5; ziemlich weit von Ihrer Plattform entfernt), und mit 'x.pl 1 2', habe ich' Verwendung von nicht initialisierten Wert in Verkettung (.) Oder Zeichenfolge bei x.pl Zeile 5.' und der Ausgabe 'Argument 0: 1, Argument 1: 2, Argument 2: .' Ich frage mich, ob dein Perl dich irreführt (obwohl deine Ausgabe konsistent mit $ ARGV [0 ist ] nicht initialisiert sein. Denken Sie daran, '$ 0' enthält den Namen des Skripts; '$ ARGV [0]' enthält den Namen des ersten Arguments für das Skript. –