【问题标题】:what does print for mean in Perl?在 Perl 中 print 是什么意思?
【发布时间】:2014-10-14 18:53:27
【问题描述】:

我需要编辑一些 Perl 脚本,而且我是这种语言的新手。 遇到如下说法:

print for (@$result);

我知道 $result 是对数组的引用,而 @$result 返回整个数组。 但是print for是什么意思呢?

提前谢谢你。

【问题讨论】:

标签: perl syntax


【解决方案1】:

在 Perl 中,有一个隐式变量。您可能已经将其视为$_。 perl 中有很多内置函数默认在$_ 上工作。

$_ 设置在多个地方,例如循环。所以你可以这样做:

while ( <$filehandle> ) {
    chomp;
    tr/A-Z/a-z/;
    s/oldword/newword/;
    print;
}

每一行都使用$_ 并随时修改它。您的 for 循环也在做同样的事情 - 循环的每次迭代都将 $_ 设置为当前值,然后默认情况下 print 会这样做。

不过,我要指出 - 虽然有用且聪明,但它也是制作令人困惑和难以理解的代码的好方法。例如,在嵌套循环中,可能很不清楚$_ 的实际情况。

所以我通常会:

  • 避免显式编写它 - 如果您需要这样做,您应该考虑正确命名您的变量。

  • 仅在可以更清楚地了解正在发生的事情的地方使用它。根据经验 - 如果您使用它超过两次,您应该可能改用命名变量。

如果在文件句柄上进行迭代,我发现它特别有用。例如:

while ( <$filehandle> ) {
   next unless m/keyword/; #skips any line without 'keyword' in it. 
   my ( $wiggle, $wobble, $fronk ) = split ( /:/ ); #split $_ into 3 variables on ':'
   print $wobble, "\n";
}

分配一个变量名来从&lt;$filehandle&gt;捕获一行是多余的,只是立即丢弃它-因此我们使用split,默认情况下使用$_来提取3个值。

如果很难弄清楚发生了什么,那么更有用的方法之一是使用perl -MO=Deparse,它将重新打印脚本的“解析”版本。所以在你给出的例子中:

foreach $_ (@$result) {
    print $_;
}

【讨论】:

    【解决方案2】:

    相当于for (@$result) { print; },相当于for (@$result) { print $_; }$_ 指的是当前元素。

    【讨论】:

    • 谢谢!!好吧,那就再做一件小事。那么以下是否等同于它? for $row(@$result) { 打印 $row;}
    • 仅当$row 不在范围内时(在这种情况下您应该使用my $row)。如果$row 在范围内,除非您使用my 遮蔽它,否则它将被覆盖。
    • @Ameen,换句话说,如果你做for $var (...) { ... },你肯定是打算做for my $var (...) { ... }
    猜你喜欢
    • 2018-03-05
    • 2010-12-28
    • 2023-03-25
    • 2014-04-02
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2019-09-18
    • 2011-09-15
    相关资源
    最近更新 更多