Какой синтаксический сахар доступен в Perl для сокращения кода для операторов l / rvalue по сравнению с операторами if?

Их много, так как Perl - довольно слащавый язык, но наиболее часто используемые операторы на любом языке - это комбинация операторов 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})

Кто-то также имел действительно интересную статью о «секретном операторе» , показано здесь:

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?

Есть ли что-нибудь еще, что стоит добавить? Какие еще переменные условного набора доступны для сокращения кода? Чего еще не хватает?

15
задан Brendan Byrd 16 July 2013 в 19:05
поделиться