Problema: Windows XP non sta passando gli argomenti della riga di comando agli script perl.
Sintomo: un semplice comando come:
say "Argument 1 (\$ARGV[0]) is: $ARGV[0], argument 2 (\$ARGV[1]) is: $ARGV[1].";
stata:
Use of uninitialized value $ARGV[0] in concatenation (.) or string at...
Soluzione:
Il problema principale è in Windows XP. Il metodo predefinito per l'avvio di perl passa solo la prima variabile, che è il nome dello script. Il risultato è che $ ARGV [0] non è inizializzato.
La correzione è quello di modificare il registro di Windows in:
\HKEY_CLASSES_ROOT\Perl\shell\Open\command
E fare la voce:
"C:\Perl\bin\perl.exe" %*
risultato è:
C:\whatever>perl argtest.pl 1 2
Argument 1 ($ARGV[0]) is: 1, argument 2 ($ARGV[1]) is: 2.
Grazie soprattutto a David W che ha sottolineato io nella giusta direzione.
Il tutorial collegato non è di alta qualità. Non ha nemmeno "usare rigorosamente". – simbabque
Humor me: prova 'argtest 1 2 3' e guarda cosa succede. –
Ho provato il tuo codice (Perl 5.16.2 su Mac OS X 10.7.5, abbastanza lontano dalla tua piattaforma), e con 'x.pl 1 2', ho ottenuto l'uso del valore non inizializzato in concatenazione (.) O stringa alla riga x.pl 5.' e all'output 'Argomento 0: 1, argomento 1: 2, argomento 2: .' Mi chiedo se il tuo Perl ti sta fuorviando (anche se il tuo output è coerente con' $ ARGV [0 ] 'non inizializzato). Ricorda, '$ 0' contiene il nome dello script; '$ ARGV [0]' contiene il nome del primo argomento dello script. –