为什么在Perl中使用“do {} if”块?

时间:2011-11-15 03:59:26

标签: perl syntax

在浏览CPAN时,我遇到this module中的一段代码,让我感到难过。

sub import {
  for my $mod (keys %INC) {
    do {
      delete $INC{$mod};
      $mod =~ s/\.pm$//; $mod =~ s/\//::/g;
      delete_package($mod);
    } if $mod =~ m/^SOAP/;
  }
}

为什么作者会使用do {} if块而不是常规if块?

5 个答案:

答案 0 :(得分:5)

因为他们觉得这样。没有真正的区别。 Perl有十几种方法可以做任何事情。这就是语言的方式。

答案 1 :(得分:5)

一个区别是do { ... }返回一个值而if语句没有(尽管请参阅下面的注释。)

E.g:

my $x = 3;
my $z = do { warn "in the do block"; 10 } if $x == 3;

你可以使用三元运算符完成几乎相同的操作,尽管你不能在三元运算符的分支内对语句进行排序。

答案 2 :(得分:2)

对我来说,这似乎是一种强调内部 if代码而不是if条件本身的方法。

答案 3 :(得分:2)

作者希望最后使用if,但它必须在一个语句的末尾并不多。 do {}是一个声明,因此可以使用。

就个人而言,我会使用if语句,但重点应放在行动或条件上,这是一个品味问题。在这种情况下,作者选择强调行动。

答案 4 :(得分:1)

因为在perl 中“有多种方法可以做到”