看一下perl的一个打印子程序:
print FILEHANDLE LIST
(http://perldoc.perl.org/functions/print.html)
我试了一下,似乎你也可以传递标量而不是列表。这是perl中的一般规则,无论何处需要列表,您都可以传入标量?标量是否会自动转换为列表?
提前谢谢。
答案 0 :(得分:2)
LIST
指的是一个返回零个或多个标量列表的表达式。它与EXPR
基本相同,只是暗示它在列表上下文中被调用。
print($fh ()); # "()" is a placeholder that avoids the default to $_
print($fh $foo);
print($fh $foo, $bar);
print($fh @array);
print($fh map uc, @a);
等
没有列表数据结构。这只是一个概念和隐喻。
答案 1 :(得分:1)
您只能将标量列表传递给perl中的某个函数。
perl中的一般规则是,无论何处需要列表,您都可以传入标量?
是的,在这种情况下,您有一个元素长列表。
print()
将($one, $two, $three)
列为与@arr
相同的列表,或map $_, @arr
或$arr[0], $arr[1], $arr[2]
答案 2 :(得分:1)
在子例程中,Perl假定您使用参数列表调用子例程。
这就是为什么,如果您的子程序被调用
my_subroutine ($a, $b, $c);
在子程序中,你可以做到
sub my_subroutine
{
my $x = shift;
my $y = shift;
my $z = shift;
...
#Or, my ($x, $y, $z) = @_;
通过调用shift,你隐式调用@_的移位,这是传入的参数的数组。