Как я могу назвать пост-оператор условным для нескольких операторов? - PullRequest
1 голос
/ 29 июня 2010
$df{key} =10 ; return ; if $result == 10 ;

дает мне ошибку. Как мне этого добиться?

Ответы [ 3 ]

9 голосов
/ 29 июня 2010

Форма после выписки if работает только с одиночными выписками. Вам придется заключить несколько операторов в блок после условия if, которое само должно быть заключено в скобки:

if ( $result == 10 ) {

    $df{key} = 10;
    return;
}

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

Тем не менее, это не хорошая идея в целом, так как это может привести к короткому замыканию и не сможет выполнить то, что вы ожидаете, например, когда $df{key} = 0:

$df{key} = 10 and return if $result == 10;

С perlsyn :

В Perl последовательность операторов, которая определяет область действия, называется блоком

... обычно блок ограничивается фигурными скобками, также известными как фигурные скобки. Мы будем называть эту синтаксическую конструкцию БЛОКОМ.

Следующие составные операторы могут использоваться для управления потоком:

if (EXPR) BLOCK

if (EXPR) BLOCK else BLOCK

if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK

4 голосов
/ 29 июня 2010

Оператор запятой позволяет объединить несколько выражений в выражение, после чего вы можете включить условное выражение:

$df{key} = 10, return if $result == 10;

Я использую эту конструкцию довольно часто при проверке на наличие ошибокусловия:

for my $foo (something...)
{
    warn("invalid thing"), next unless $foo =~ /pattern/;
    # ...
}
4 голосов
/ 29 июня 2010

Вы можете сгруппировать операторы в do BLOCK и использовать модификатор условного оператора для этого составного оператора.

do { $df{key} = 10; return } if $result == 10;

В отличие от конструкции and, опубликованной Zaid, это не является двусмысленным.Однако вам следует дважды подумать, прежде чем использовать модификатор условного оператора.Особенно смешивание if / unless операторов с if / unless модификаторами операторов снижает читабельность вашего кода.

Основной случай, когда, по моему мнению, модификаторы операторов имеют смысл, это несложные пути ошибок, т.е.:

croak "foo not specified" unless exists $args{foo};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...