为什么我的Perl max()函数总是返回数组的第一个元素?

lot*_*ths 5 arrays perl foreach max

我是Perl的新手,我不想使用List :: Util max函数来查找给定数组的最大值.

当我测试下面的代码时,它只返回数组的第一个值,而不是最大值.

sub max
{
    my @array = shift;
    my $cur = $array[0];
    foreach $i (@array)
    {
        if($i > $cur)
        {
            $cur = $i;
        }
        else
        {
            $cur = $cur;
        }
    }
    return $cur;
   }
Run Code Online (Sandbox Code Playgroud)

rjh*_*rjh 9

更换

my @array = shift;
Run Code Online (Sandbox Code Playgroud)

my @array = @_;
Run Code Online (Sandbox Code Playgroud)

@_是包含所有函数参数的数组.shift只抓取第一个函数参数并将其从@_中删除.更改该代码,它应该正常工作!

  • 子程序参数在`@ _`数组中传递.`shift`从指定数组中删除第一个值并返回它 - 调用没有参数的`shift`会导致它作用于`@ _`数组. (4认同)
  • 更新了我的帖子:)顺便说一句,你也应该做'foreach my $ i'(或'for my $ i',这意味着同样的事情 - for和foreach是可以互换的)以同样的方式显式声明$ i变量声明@array和$ cur. (2认同)