结合 `foreach` 和 `if` 的 Perl 语法:它不应该工作,即:为什么它不工作?

U. *_*ndl 2 arrays syntax perl for-loop max

试图在不能包含负数的数组中获得最大值我试过:

my @v;
#...
my $max = 0;
$max = $_
    if ($_ > $max)
        foreach (@v);
Run Code Online (Sandbox Code Playgroud)

perl 5.18.2 出现语法错误。

但是 (1)statement($_) foreach (@v);和 (2)$max = $_ if ($_ > $max);都可以,并且它们做了它们应该做的事情。

因此,如果 (1) 和 (2) 都是有效的语句,为什么不能将它们组合在用于 (1) 的模式中?

只是没有人需要提出建议;这是我使用不同语法解决问题的方法:

foreach (@v) {
    $max = $_
        if ($_ > $max);
}
Run Code Online (Sandbox Code Playgroud)

GMB*_*GMB 9

因此,如果 (1) 和 (2) 都是有效的语句,为什么不能将它们组合在用于 (1) 的模式中?

您在这里使用的后缀语法(又名语句修饰符)不支持这种语句。

文件说(重点煤矿):

任何简单的语句都可以选择跟在 SINGLE 修饰符之后,就在终止分号(或块结尾)之前。

至于您的任务本身:从数组中获取最大值是一个非常常见的要求。一种简单而标准的方法使用核心模块中的函数max()List::Util

use List::Util qw/max/;
my @v;
my $max = max 0, @v;
Run Code Online (Sandbox Code Playgroud)