【问题标题】:Perl ARGV value in scalar context标量上下文中的 Perl ARGV 值
【发布时间】: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

我对@9​​87654323@ 的输出感到困惑。如果我尝试执行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


【解决方案1】:

回答您的具体问题:“$ARGV 是如何工作的?”

$ARGV 包含从 读取时当前文件的名称。

来自 Perl 文档中的 Variables related to filehandles

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2010-09-27
    • 2012-05-01
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    相关资源
    最近更新 更多