关于子例程的返回值

关于子例程的返回值

我是一个perl新手,正在看《perl语言入门》(learning perl)的第四章 ---子例程。
书上67页说:“在子例程的执行过程中,它会不断的进行运算。其中,最后一次运算的结果不管是多少,都会被自动当成子例程的返回值。”
然后看到72的例子:
#!/usr/bin/perl -w

$maximum = &max(3,5,10,4,6);
sub max{
        my($max_so_far) = shift @_;
        foreach (@_){
                if($_ > $max_so_far){
                        $max_so_far = $_;
                }
        }
        $max_so_far;
}
print $maximum,"\n";


我想能不能把max子例程最后的"$max_so_far;"去掉,反正最后执行的表达式为:

[Copy to clipboard] [ - ]
CODE:
$max_so_far = $_;

但是去掉后,输出是空,并不是想象中的最大值10。
#!/usr/bin/perl -w

$maximum = &max(3,5,10,4,6);
sub max{
        my($max_so_far) = shift @_;
        foreach (@_){
                if($_ > $max_so_far){
                        $max_so_far = $_;
                }
        }
#       $max_so_far;

}
print $maximum,"\n";
你还能自己分析下程序看最后一次执行是不是   $max_so_far = $_;
redicaps,
你的意思是:最后由于“6” 小于“10”,没有执行 $max_so_far = $_; 。 对吗?
那我把程序改为:
#!/usr/bin/perl -w


$maximum = &max(3,5,10,4,6,17);
sub max{
        my($max_so_far) = shift @_;
        foreach (@_{
                if($_ > $max_so_far){
                        $max_so_far = $_;
                }
        }
#        $max_so_far;

}
print $maximum,"\n";



最后应该执行  $max_so_far = $_; 了吧。
但是输出依然是空值。

还是,这个sub子例程最后一次的运算为

[Copy to clipboard] [ - ]
CODE:
foreach (@_)

所以返回空。
又做了一个测试,感觉问题出在:max子例程最后执行的一次运算为
foreach (@_);
而不是我原来理解的
$max_so_far = $_;

不知道,我的理解是否正确。请大家帮看看。
你最后的理解是对的
兄弟太爱专研了,努力
佩服