my $name = shift @ARGV;
does indeed assign the program’s first argument. If you get Use of uninitialised value $name in concatenation (.) or string at ...
, it’s because you didn’t provide any arguments to your program.
$ perl -we'my $name = shift(@ARGV); print "My name is $name.\n"'
Use of uninitialized value $name in concatenation (.) or string at -e line 1.
My name is .
$ perl -we'my $name = shift(@ARGV); print "My name is $name.\n"' ikegami
My name is ikegami.
There’s absolutely no problem with using <>
afterwards.
$ cat foo
foo1
foo2
$ cat bar
bar1
bar2
$ perl -we'
print "(\@ARGV is now @ARGV)\n";
my $prefix = shift(@ARGV);
print "(\@ARGV is now @ARGV)\n";
while (<>) {
print "$prefix$_";
print "(\@ARGV is now @ARGV)\n";
}
' '>>>' foo bar
(@ARGV is now >>> foo bar)
(@ARGV is now foo bar)
>>>foo1
(@ARGV is now bar)
>>>foo2
(@ARGV is now bar)
>>>bar1
(@ARGV is now )
>>>bar2
(@ARGV is now )
CLICK HERE to find out more related problems solutions.