这个脚本我实在看不出哪里错了。。。。

这个脚本我实在看不出哪里错了。。。。



QUOTE:
#!/usr/bin/perl -w
use strict;
sub max {
        my $max_num=shift @_;
        for(@_){
                $_>$max_num && $max_num=$_;
        }
        $max_num;
}
print &max(1,3,4,2,6,4,8,10,9,11,23,24,12,54,100,23);

错误如下:
Can't modify logical or (||) in scalar assignment at max.pl line 6, near "$_;"
Execution of max.pl aborted due to compilation errors.

改成if判断就可以,难道&&不能判断吗?

QUOTE:
#!/usr/bin/perl -w
use strict;
sub max {
        my $max_num=shift @_;
        for(@_){
                if($_>$max_num){ $max_num=$_; }
        }
        $max_num;
}
print &max(1,3,4,2,6,4,8,10,9,11,23,24,12,54,100,23);



[Copy to clipboard] [ - ]
CODE:
if($_>$max_num){ $max_num=$_; }

==

[Copy to clipboard] [ - ]
CODE:
$_>$max_num && ($max_num=$_;)

!=

[Copy to clipboard] [ - ]
CODE:
(($_>$max_num) && $max_num ) = $_; (illegal)

refer to:
Operator Precedence and Associativity

改成如下,运算符优先级引起的问题

#!/usr/bin/perl -w
use strict;
sub max {
        my $max_num=shift @_;
        for(@_){
                ($_>$max_num) && ($max_num=$_);
        }
        $max_num;
}
print &max(1,3,4,2,6,4,8,10,9,11,23,24,12,54,100,23);
看来应该多注意括号的使用
呵呵,是运算符优先级的问题,而不是括号运用的问题。


QUOTE:
原帖由 不死草 于 2008-8-6 09:08 发表
呵呵,是运算符优先级的问题,而不是括号运用的问题。

我的意思是,为了避免优先级造成的问题,如果对优先级不清楚,最好用括号进行分组
在写perl的时候,尽量用单词代替符号,你将 && 写成 and 就可以通过,为了可以看的更清楚,and 前后都加上()更妙。