Perl中默认变量$ _的范围

ske*_*ver 2 perl default perlvar perlsyn

我有以下方法接受变量,然后显示数据库中的信息:

sub showResult {
    if (@_ == 2) {
        my @results = dbGetResults($_[0]);
        if (@results) {
            foreach (@results) {
                print "$count - $_[1] (ID: $_[0])\n";
            }
        } else {
            print "\n\nNo results found";
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

一切正常,除了foreach循环中的打印线.此$ _变量仍包含传递给方法的值.

无论如何要在$ _上"强制"新的值范围,还是它总是包含原始值?

如果有任何好的教程可以解释$ _的工作范围,那也很酷!

谢谢

Die*_*lla 9

这里的问题是你真的使用@_而不是$_.该foreach循环的变化$_,标量变量,不@_,这是你通过访问,如果你的索引是什么$_[X].另外,再次检查代码以查看其中的内容@results.如果它是数组或引用的数组,您可能需要使用间接${$_}[0]或类似的东西.

  • `$$ _ [0]`非常好.并且更容易打字.:) (3认同)
  • @tchrist - 抱歉,但我必须不同意.`$ _->`清楚地表明你乍一看是解引用的(并且是x-of-x-x嵌套解除引用的通用符号).`$$ _ [0]`很难读,例如你很容易把它误读为`$ _ [0]`; 并不能作为进一步解除指示的标记(我通常的试金石正在查看早上凌晨2点半熟睡眠的不熟悉的代码,首席执行官大吼大叫,以解决生产问题!并且让代码由初级开发人员维护).代码可读性 - 它的$$语法不像箭头那么精细. (2认同)