为什么在Perl中没有低优先级等同于//?

时间:2014-04-24 13:40:03

标签: perl operators operator-precedence

我认为这个问题可能有些不太重要,但我一直想知道为什么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

1 个答案:

答案 0 :(得分:6)

我从未真正理解为什么有些搬运工 [1] 有问题。我认为对于所谓的内容(definedordorerr)缺乏共识,但回想起来,我很想相信真正的原因是缺乏与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兼容。


  1. 那些从事Perl工作的人。