我认为这个问题可能有些不太重要,但我一直想知道为什么Perl中没有低优先级的定义或运算符。我认为有一个原因,因为perlop明确地提到了事实。
我认为有用的一个例子就是这样一个子程序:
sub input_many_data {
my $x = <> // return;
do_some_processing_with($x);
my $y = <> // return;
do_some_processing_with($y);
return ( $x, $y );
}
while (1) {
my ( $x, $y ) = &input_many_data or last;
do_something_with( $x, $y );
}
它与$x = (<> // return)
一起使用,但目的更加明显,代码更易读,更不容易出错,例如($x = <>) dor return
。
答案 0 :(得分:6)
我从未真正理解为什么有些搬运工 [1] 有问题。我认为对于所谓的内容(definedor
,dor
,err
)缺乏共识,但回想起来,我很想相信真正的原因是缺乏与use feature
的舒适感。请注意,use feature
和//
已添加到同一版本的Perl中。
或许不是。您可以在p5 porters mailing list上找到对话。
顺便说一句,以下内容的意图非常明显:
my $x = <>
// return;
无论如何,在行尾隐藏return
是一种不好的做法。替代方案是:
( my $x = <> )
// return;
defined( my $x = <> )
or return;
my $x = <>;
$x // return;
my $x = <>;
return if !defined($x);
那些与常用的5.8兼容。