Зачем использовать блок "do {} if" в Perl? - PullRequest
6 голосов
/ 15 ноября 2011

Просматривая CPAN, я наткнулся на блок кода в этом модуле , который озадачил меня.

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 ]

5 голосов
/ 15 ноября 2011

Одно отличие состоит в том, что do { ... } возвращает значение, тогда как оператор if - нет (хотя см. Комментарии ниже.)

например:.

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

Вы можете сделать почти то же самое с троичным оператором, хотя вы не можете упорядочить операторы внутри ветвей троичного оператора.

5 голосов
/ 15 ноября 2011

Потому что им это нравится.Там нет никакой разницы.У Perl есть дюжина способов сделать все.Это просто так, как язык.

2 голосов
/ 15 ноября 2011

Автор хотел использовать if в конце, но это должно быть в конце одного утверждения не много.do {} - это одно утверждение, так что оно сработает.

Лично я бы использовал утверждение if, но это вопрос вкуса, следует ли делать акцент на действии или условии.В этом случае автор решил подчеркнуть действие.

2 голосов
/ 15 ноября 2011

Мне кажется, это способ подчеркнуть код внутри на if больше, чем само условие if.

1 голос
/ 15 ноября 2011

Потому что в perl "Существует более одного способа сделать это"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...