如何在 Perl 中使用子程序修改数组元素
How to modify array elements using subroutine in Perl
我正在尝试修改传递给子例程的数组。
我正在将数组引用传递给子例程并分配新值,但它没有反映在调用方。
下面是我的程序。
sub receiveArray {
my $arrayref = @_;
@{$arrayref} = ( 4, 5, 6 );
}
@ar = ( 1, 2, 3 );
print "Values of the function before calling the function\n";
foreach my $var ( @ar ) {
print $var;
print "\n";
}
receiveArray(\@ar);
print "Values of the function after calling the function\n";
foreach my $var ( @ar ) {
print $var;
print "\n";
}
上面的代码有什么问题?
您编写的每个 Perl 文件都应该以 use strict; use warnings;
开头。这将帮助您避免这样的错误。
问题出在这一行:
my $arrayref = @_;
您正在将一个数组分配给一个标量,因此该数组是在标量上下文中计算的,它会产生数组中的元素数。
你应该做的是:
my ($arrayref) = @_;
现在它使用列表赋值,将第一个函数参数放入 $arrayref
(并忽略其余部分,如果有的话)。
列表分配记录在perldoc perldata
中(以“列表可以分配给 ...”开头的部分)。
我正在尝试修改传递给子例程的数组。
我正在将数组引用传递给子例程并分配新值,但它没有反映在调用方。
下面是我的程序。
sub receiveArray {
my $arrayref = @_;
@{$arrayref} = ( 4, 5, 6 );
}
@ar = ( 1, 2, 3 );
print "Values of the function before calling the function\n";
foreach my $var ( @ar ) {
print $var;
print "\n";
}
receiveArray(\@ar);
print "Values of the function after calling the function\n";
foreach my $var ( @ar ) {
print $var;
print "\n";
}
上面的代码有什么问题?
您编写的每个 Perl 文件都应该以 use strict; use warnings;
开头。这将帮助您避免这样的错误。
问题出在这一行:
my $arrayref = @_;
您正在将一个数组分配给一个标量,因此该数组是在标量上下文中计算的,它会产生数组中的元素数。
你应该做的是:
my ($arrayref) = @_;
现在它使用列表赋值,将第一个函数参数放入 $arrayref
(并忽略其余部分,如果有的话)。
列表分配记录在perldoc perldata
中(以“列表可以分配给 ...”开头的部分)。