Perl的"最后"做了什么?

jos*_*eir 2 perl

在下面的代码中,lastwhile循环中有什么作用?如果$matrix[$i][$j]{pointer}变量等于"none"它调用,我得到它,last但它做了什么?

另外为什么$ matrix变量包括使用花括号的得分和指针?{score},我把它看作数组中的第三维,但这是别的吗?无法在谷歌上找到任何关于此的内容.谢谢!

my @matrix;
$matrix[0][0]{score}   = 0;
$matrix[0][0]{pointer} = "none";
#populate $matrix with more stuff

while (1) {
  last if $matrix[$i][$j]{pointer} eq "none"; #<-what is this "last" doing?
  #do some more stuff here
}
Run Code Online (Sandbox Code Playgroud)

Avi*_*mka 10

last命令的可用用途:

  • 最后一个LABEL

  • 最后EXPR

  • 持续

根据Perl的文档:

last命令类似于breakC中的语句(在循环中使用); 它会立即退出有问题的循环.如果省略LABEL,则该命令引用最内层的封闭循环.从Perl 5.18.0开始提供的最后一个EXPR表单允许在运行时计算标签名称,否则与最后一个LABEL相同.如果有的话,继续块不会执行:

 LINE: while (<STDIN>) {
        last LINE if /^$/;  # exit when done with header
        #...
    }
Run Code Online (Sandbox Code Playgroud)

last不能用于退出返回值的块,例如eval {},sub {}或do {},不应该用于退出grep或map操作.请注意,块本身在语义上与执行一次的循环相同.因此,最后可以用于实现这种块的早期退出.


Gra*_*ean 6

你有一个答案,last但我想我会分享这个图像,说明如何next,lastredo影响Perl循环中的逻辑流程:

在此输入图像描述

continue可以选择将一个块添加到循环中以定义一些语句,这些语句将在循环返回到顶部之前在每次迭代时运行以重新评估循环条件.如果没有continue阻塞,next将直接返回到循环状态.