标量上下文中的 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 的读取,但该变量仍然保存文件的名称。
给定以下 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 的读取,但该变量仍然保存文件的名称。