В переменной с именем $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 .