在浏览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
块?
答案 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 中“有多种方法可以做到”