【发布时间】:2017-05-02 21:55:02
【问题描述】:
给定以下 Perl 脚本:
# USAGE: ./flurp -x -vf file1 file2 file3 file4
# e.
$a = shift;
$b = shift;
$c = shift;
@d = <>;
# ei. value of $b = -vf
# eii. value of @d = content of file2, file3, file4
print "$b\n";
print "@d\n";
print "$ARGV\n";
这是输出:
-vf
{contents of file2, file3, file4}
file4
我对@987654323@ 的输出感到困惑。如果我尝试执行print "$ARGV[-1]\n",则会将空行打印到 STDOUT。如果我直接引用$ARG[2],我也会得到一个空行。
为什么在使用$ARGV 时,脚本会打印file4?
作为反例,我尝试了print "$d\n",期望得到file4 的最后一行。我得到了一个空行,而不是预期的输出。 $ARGV 是如何工作的?
【问题讨论】:
-
$ARGV和@ARGV不是一回事! -
我认为
@LIST和$LIST指的是同一个变量,因为$LIST[0]是@LIST的第一个索引。 Perl 是一头令人困惑的野兽。 -
$ARGV[n]正在访问@ARGV。$ARGV是一个单独的变量。
标签: perl diamond-operator scalar-context