Есть ли более короткий способ использования троичного условного оператора в Perl? - PullRequest
2 голосов
/ 04 июня 2019

Я хочу сделать следующее присваивание, если это возможно, в одну строку и без очень длинных строк:

my $variable = defined($self->{_some_thing_stored_here}) ? $self->{_some_thing_stored_here} : new some_function(@with_some_parameters);

Возможно ли как-то аналогично получению переменных в цикле с "$ _"чтобы получить параметр условия if, чтобы он выглядел примерно так:

my $variable = defined($self->{_some_thing_stored_here}) ? $_ : new some_function(@with_some_parameters);

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

1 Ответ

8 голосов
/ 04 июня 2019

Оператор определен или :

my $variable = $self->{_some_thing_stored_here} // some_function(@with_some_parameters);

Требуется Perl 5.10 +.

Вы также можете (ab) использовать postfix foreach использовать $_, когда определенная проверка не совсем то, что вам нужно, хотя это и не самая распространенная идиома, и вы должны позаботиться о том, чтобы не объявлять переменные с модификаторами операторов postfix, и что вы не вызываете ничего, чтоизменит теперь псевдоним глобальный $_.

my $variable;
$variable = check($_) ? $_ : something_else() for $self->{_some_thing_stored_here};
# make sure something_else does not clobber $_
# that would also clobber $self->{_some_thing_stored_here} !
...