我想获取我在函数中发送的数组,但它似乎是空的。 我用param
中的数组调用send_file();
send_file($addr, @curfile);
这就是我回到参数的方式
sub send_file($$)
{
my $addr = $_[0];
my @elem = @_;
...
}
为什么my @elem
为空?如何在不丢失所有内容的情况下取回阵列?
答案 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) = @_;
...
}