Почему эта строка Perl содержит только переменную? - PullRequest
3 голосов
/ 05 ноября 2010

Мне нравится Perl, чем больше я вхожу в него, но у меня возник вопрос о строке, которую я увидел в подпрограмме в модуле, который я просматриваю.$var все на линии.Это просто окольный способ вернуть 1?

Большое спасибо!

Джейн

Ответы [ 2 ]

6 голосов
/ 05 ноября 2010

Процитирование последней строки perldoc -f return:

При отсутствии явного return подпрограмма, eval или do FILE автоматически возвращает значениепоследнее вычисленное выражение.

6 голосов
/ 05 ноября 2010

В perl значение блока - это значение последнего выражения в блоке. Это просто сокращение для return $var.

РЕДАКТИРОВАТЬ: пуристы указывают, что эти блоки в целом не возвращают значения (как, например, в Scala), поэтому вы не можете написать:

my $x = if (cond) { 7 } else { 8 };  # wrong!

Неявное возвращаемое значение подпрограммы, eval или do FILE - это последнее вычисленное выражение . Последнее выражение может находиться внутри блока, хотя:

sub f {
    my $cond = shift;
    if ($cond) { 7 } else { 8 }  # successfully returns 7 or 8 from f()
}

Существует поверхностный вид блоков if / else, возвращающих значение, даже если, строго говоря, они этого не делают.

...