标量上下文中的 Perl ARGV 值

Perl ARGV value in scalar context

给定以下 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

我对print "$ARGV\n"的输出感到困惑。如果我尝试执行 print "$ARGV[-1]\n",则会向 STDOUT 打印一个空行。如果我直接引用 $ARG[2],我也会得到一个空行。

为什么脚本在使用 $ARGV 时打印 file4

作为反例,我尝试了print "$d\n",期望得到file4的最后一行。我得到的不是预期的输出,而是空行。 $ARGV 是如何工作的?

回答您的具体问题:"How does $ARGV work?"

$ARGV Contains the name of the current file when reading from <> .

来自 Perl 文档中的 Variables related to filehandles

虽然在您打印 $ARGV 时您已经完成从 file4 的读取,但该变量仍然保存文件的名称。