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

Subroutine not returning correct integer

我正在将数据传递给子例程,但子例程未return输入正确的值。

test(5);

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

它应该 return 5 但 return 正在 2。我正在使用 Mojolicious,但我假设这不会有什么不同,因为它只是一个函数?

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

来自perldoc perldata

If you evaluate an array in scalar context, it returns the length of the array.

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

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

my ($t) = @_;

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

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

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