Arrays 在perl中获取参数函数数组
我想得到我在函数中发送的数组,但它似乎是空的。 我调用Arrays 在perl中获取参数函数数组,arrays,perl,function,parameters,Arrays,Perl,Function,Parameters,我想得到我在函数中发送的数组,但它似乎是空的。 我调用send_file() send_file($addr, @curfile); sub send_file($$) { my $addr = $_[0]; my @elem = @_; ... } 这就是我找回情妇的方法 send_file($addr, @curfile); sub send_file($$) { my $addr = $_[0]; my @elem = @_; ...
send_file()参数中带有数组的代码>
send_file($addr, @curfile);
sub send_file($$)
{
my $addr = $_[0];
my @elem = @_;
...
}
这就是我找回情妇的方法
send_file($addr, @curfile);
sub send_file($$)
{
my $addr = $_[0];
my @elem = @_;
...
}
为什么my@elem
是空的?如何在不丢失所有内容的情况下取回阵列?不要使用原型。它们的目的是更改您不需要的源解析
sub send_file
{
my $addr = shift;
my @elem = @_;
...
}
send_file($addr, @curfile);
不要使用原型。它们的目的是更改您不需要的源解析
sub send_file
{
my $addr = shift;
my @elem = @_;
...
}
send_file($addr, @curfile);
您应该改为通过引用传递数组:
#!/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';
这将得到相同的输出
如果确实不需要$@的话,您也可以完全去掉它。您应该通过引用传递数组:
#!/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';
这将得到相同的输出
如果您愿意,也可以将$@完全去掉,因为它确实是不必要的
为什么我的@elem是空的
你的@elem
不是空的,它正好有两个元素。第一个是$addr
的值,第二个是@curfile
数组中元素的大小/数量。这是由于$
定义需要两个标量,因此scalar@curfile
作为第二个参数传递
我怎样才能在不失去一切的情况下找回阵列
由于您没有使用原型优势,所以只需省略原型部分
sub send_file {
my ($addr, @elem) = @_;
...
}
为什么我的@elem是空的
你的@elem
不是空的,它正好有两个元素。第一个是$addr
的值,第二个是@curfile
数组中元素的大小/数量。这是由于$
定义需要两个标量,因此scalar@curfile
作为第二个参数传递
我怎样才能在不失去一切的情况下找回阵列
由于您没有使用原型优势,所以只需省略原型部分
sub send_file {
my ($addr, @elem) = @_;
...
}
尝试使用数组的引用作为参数send\u file($addr,\@curfile)代码>-->my@elem=@{$\u1]
};尝试使用数组的引用作为参数send\u file($addr,\@curfile)代码>-->my@elem=@{$\u1]
}@我的例子并不准确。试一试,数组引用只是一个标量,如果在函数原型中使用“$”声明数组引用,则子例程将正确处理该数组引用。无论在原型中使用“$”还是“\@”,两者的作用都是一样的。如果对使用这两种方法传入的数组引用使用ref()
函数,则在这两种情况下都将返回“array”。无论哪种方式,它都会将输入识别为数组引用。@mpapec:如果您不相信我的话,请运行我的代码并查看其行为是否相同:)我指的是第二个示例。第一个在功能上是正确的。哦,我明白了,我的意思是说$scalar=shift
,而不是$scalar=$\u0]
,这样在填充数组之前,标量就会从“@\uu0”中取出。很好,我刚刚看到了第一个的所有格式更改,并假设它就是您所说的那个。@mpapec:我的示例并不不准确。试一试,数组引用只是一个标量,如果在函数原型中使用“$”声明数组引用,则子例程将正确处理该数组引用。无论在原型中使用“$”还是“\@”,两者的作用都是一样的。如果对使用这两种方法传入的数组引用使用ref()
函数,则在这两种情况下都将返回“array”。无论哪种方式,它都会将输入识别为数组引用。@mpapec:如果您不相信我的话,请运行我的代码并查看其行为是否相同:)我指的是第二个示例。第一个在功能上是正确的。哦,我明白了,我的意思是说$scalar=shift
,而不是$scalar=$\u0]
,这样在填充数组之前,标量就会从“@\uu0”中取出。很好,我刚刚看到了第一个的所有格式更改,并假设它就是你所说的那个。