Является ли переменная $ return особенным в Perl? - PullRequest
1 голос
/ 25 мая 2011

Мы наблюдали странные эффекты при использовании переменной $return в коде, подобном $return = foo($something);.Является ли переменная $return чем-то особенным из-за return name?

Ответы [ 3 ]

8 голосов
/ 25 мая 2011

Согласно документации Perl , №

5 голосов
/ 25 мая 2011

Нет, это не Perl Special . Но какой-то модуль мой экспортирует его, и это может привести к неожиданному поведению.

см. Это руководство

1 голос
/ 26 мая 2011

В переменной с именем $return нет ничего особенного.Тем не менее, написание

my $return = foo($something);
return $return;

- это не то же самое, что написание

return foo($something);

Первая форма помещает вызов foo() в скалярный контекст.Последний будет распространять контекст от вызывающей стороны.Это может привести к тому, что foo() будет вести себя по-другому.Сравните:

sub foo { return localtime }
sub bar { my $x = foo(); return $x }
sub baz { return foo() }

say join ', ', bar(); # Thu May 26 08:24:59 2011
say join ', ', baz(); # 59, 24, 8, 26, 4, 111, 4, 145, 1

Это происходит потому, что в скалярном контексте localtime возвращает время, отформатированное в виде строки, но в контексте списка возвращает список значений для секунд, минут, часов и т. Д.

Концепция контекста уникальна для Perl.Чтобы узнать больше об этом, см. perlsub .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...