Perl签名:可以用Scalars替换列表吗?

时间:2014-01-17 12:55:12

标签: perl list scalar

看一下perl的一个打印子程序:

print FILEHANDLE LIST

http://perldoc.perl.org/functions/print.html

我试了一下,似乎你也可以传递标量而不是列表。这是perl中的一般规则,无论何处需要列表,您都可以传入标量?标量是否会自动转换为列表?

提前谢谢。

3 个答案:

答案 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,你隐式调用@_的移位,这是传入的参数的数组。