子例程未返回正确的整数

时间:2018-08-08 13:23:59

标签: perl subroutine

我正在将数据传递给子例程,但是该子例程未返回正确的值。

test(5);

sub test {
    my $t = @_;
    return $t;
}

它应该返回5,但正在返回2。我正在使用Mojolicious,但我认为那不应该有所作为,因为它只是一个函数?

1 个答案:

答案 0 :(得分:8)

my $t = @_在标量上下文中评估数组@_ ,因此将$t设置为@_的大小。

来自perldoc perldata

  

如果在标量上下文中评估数组,则它将返回数组的长度。

调用test(5)时,@_仅包含(5),因此长度为1。使用Mojolicious,您可能正在使用方法调用还将包名称或对象引用作为子例程的附加参数传递,因此您的数组大小将为2,而不是您所描述的1

如果您想检索数组的内容,请使用

my ($t) = @_;

如果您正在编写方法,则应该

my $self = shift;
my ($t)  = @_;

但这取决于子程序的调用方式。