子程序没有返回正确的整数

use*_*290 2 perl subroutine

我将数据传递给子例程,但子例程没有返回正确的值.

test(5);

sub test {
    my $t = @_;
    return $t;
}
Run Code Online (Sandbox Code Playgroud)

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

Dad*_*ada 8

my $t = @_@_标量上下文中计算数组,因此设置$t为大小@_.

perldoc perldata

如果在标量上下文中计算数组,则返回数组的长度.

当你打电话test(5),@_只包含了(5),所以它的长度为1.使用Mojolicious,你可能会使用一个方法调用它也通过包名或对象引用的子程序的一个额外的参数,所以你的数组的大小的2,而不是的1你描述.

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

my ($t) = @_;
Run Code Online (Sandbox Code Playgroud)

如果你正在写一个方法,它应该是

my $self = shift;
my ($t)  = @_;
Run Code Online (Sandbox Code Playgroud)

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