Там есть куча, поскольку Perl - довольно сладкий язык, но наиболее часто используемые операторы на любом языке представляют собой комбинацию операторов if и значений настроек. Я думаю, что нашел многих из них, но все еще есть несколько пробелов. В конечном счете, цель будет не писать имя переменной несколько раз:Какой синтаксический сахар доступен в Perl для уменьшения кода для операторов l/rvalue против операторов if?
Вот что я до сих пор:
$r ||= $s; # $r = $s unless ($r);
$r //= $s; # $r = $s unless (defined $r);
$r &&= $s; # $r = $s if ($r);
$r = $c ? $s : $t; # if ($c) { $r = $s } else { $r = $t }
$c ? $r : $s = $t; # if ($c) { $r = $t } else { $s = $t }
$r = $s || $t; # if ($s) { $r = $s } else { $r = $t }
$r = $s && $t; # if ($s) { $r = $t } else { $r = $s = undef, 0, untrue, etc. }
$c and return $r; # return $r if ($c);
$c or return $r; # return $r unless ($c);
$c and $r = $s; # $r = $s if ($c);
@$r{qw(a b c d)} # ($r->{a}, $r->{b}, $r->{c}, $r->{d})
Кто-то также был really interesting article на «секретный оператор», показанный здесь :
my @part = (
'http://example.net/app',
('admin' ) x!! $is_admin_link,
($subsite) x!! defined $subsite,
$mode,
($id ) x!! defined $id,
($submode) x!! defined $submode,
);
Однако то, что я нашел, чтобы отсутствовать в списке:
$r <= $s; # read as "$r = min($r, $s);" except with short-circuiting
$r = $s if (defined $s); # what's the opposite of //?
$r and return $r # can that be done without repeating $r?
Есть ли еще что-то, что стоит добавить? Какие еще условные переменные набора доступны для сокращения кода? Что еще не хватает?
'$ C && $ г = $ s' нужно немного больше сахара (вы должны сказать '($ r = $ s)') – mob
@mob, боюсь, это довольно горький вкус для OP :-) – TMS
'$ r =! $ s? $ s: $ t' - это то же самое, что '$ r = $ s && $ t' – mob