在perl中获取param函数数组

时间:2014-10-16 13:03:19

标签: arrays perl function parameters

我想获取我在函数中发送的数组,但它似乎是空的。 我用param

中的数组调用send_file();
send_file($addr, @curfile);

这就是我回到参数的方式

sub send_file($$)
{
    my $addr = $_[0];
    my @elem = @_;
    ...
}

为什么my @elem为空?如何在不丢失所有内容的情况下取回阵列?

3 个答案:

答案 0 :(得分:3)

不要使用原型。他们的目的是改变您不需要的源代码解析。

sub send_file
{
    my $addr = shift;
    my @elem = @_;
    ...
}

send_file($addr, @curfile);

答案 1 :(得分:2)

您应该通过引用传递数组:

#!/usr/bin/perl

use strict;
use warnings;

my $test_scalar = 10;
my @test_array  = qw(this is a test);

sub test($\@)
{
    my ($scalar, $array) = @_;

    print "SCALAR = $scalar\n";
    print "ARRAY  = @$array\n";
}

test($test_scalar, @test_array);

system 'pause';

输出:

SCALAR = 10
ARRAY  = this is a test
Press any key to continue . . .

编辑:

如果你想在不通过引用的情况下做同样的事情,将你的$$更改为$ @并使用shift,这样第一个参数就不会包含在你的数组中。通过引用传递数组是更好的编码实践。 。 。这只是为了向您展示如何在不通过引用的情况下完成它:

#!/usr/bin/perl

use strict;
use warnings;

my $test_scalar = 10;
my @test_array  = qw(this is a test);

sub test($@)
{
    my ($scalar, @array) = @_;

    print "SCALAR = $scalar\n";
    print "ARRAY  = @array\n";
}

test($test_scalar, @test_array);

system 'pause';

这将为您提供相同的输出。

如果你真的没有必要,你也可以完全摆脱$ @。

答案 2 :(得分:1)

  

为什么我的@elem是空的?

您的@elem不是空的,它只有两个元素。第一个是$addr的值,第二个是@curfile数组中的元素的大小/数量。这是由于$$ prototype定义需要两个标量,因此scalar @curfile作为第二个参数传递。

  

如何在不丢失所有内容的情况下取回阵列?

由于您没有使用原型优势,只需省略原型部件,

sub send_file {
    my ($addr, @elem) = @_;
    ...
}