2014-04-24 51 views
3

我想这个问题可能会有些不那么重要,但我一直在想,为什么Perl中没有低优先级定义或运算符。我想这是有原因的,因为perlop明确提到了这个事实。在那里我会觉得它有用为什么在Perl中没有相当于//的低优先级?

一个实例就是在这样的子程序:

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

我也总是希望这样的操作存在。原因可能是p5p的个人构成。 – choroba

回答

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本身工作。
+0

您对于在行尾隐藏“return”的评论很有意义。但是你知道一种使'Perl :: Tidy'看到这个论证的有效性的方法吗? – scozy

+0

@scozy这不是特别有效。如果没有阅读整行代码,就应该得到一个人得到的东西。 –

+0

@VectorGorgoth,例如,某人可能正在扫描子程序代码,试图了解为什么它返回一个空列表。我认为让控制流量表脱颖而出是有道理的。 – scozy