Arrays 如何在Perl中使用子例程修改数组元素
我试图修改传递给子例程的数组 我将数组引用传递给子例程并分配新的值,但它不会反映在调用方 下面是我的程序Arrays 如何在Perl中使用子例程修改数组元素,arrays,perl,reference,subroutine,Arrays,Perl,Reference,Subroutine,我试图修改传递给子例程的数组 我将数组引用传递给子例程并分配新的值,但它不会反映在调用方 下面是我的程序 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 $
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";
}
上面代码中的问题是什么?您应该开始使用
使用strict编写每个Perl文件;使用警告代码>。这将帮助您避免这样的错误
问题出在这一行:
my $arrayref = @_;
将数组分配给标量,因此在标量上下文中计算数组,从而生成数组中的元素数
你应该做的是:
my ($arrayref) = @_;
现在它使用列表赋值,将第一个函数参数放入$arrayref
(忽略其余的,如果有的话)
列表分配记录在中(以“列表可能被分配给…”开头的部分)。您应该开始使用编写的每个Perl文件,并严格使用;使用警告代码>。这将帮助您避免这样的错误
问题出在这一行:
my $arrayref = @_;
将数组分配给标量,因此在标量上下文中计算数组,从而生成数组中的元素数
你应该做的是:
my ($arrayref) = @_;
现在它使用列表赋值,将第一个函数参数放入$arrayref
(忽略其余的,如果有的话)
列表分配记录在中(以“列表可能分配给…”开头的部分)。非常感谢您的帮助。成功了。但我仍然无法理解我的$arrayref=@@和我的($arrayref)=@@之间的区别。你能告诉我区别吗?谢谢,我告诉过你区别。你能解释一下哪个部分不清楚吗?@Sunil:用括号将数组@
中的列表赋值给列表($arrayref)
中的变量,因此赋值在列表上下文中进行。(注意:不是“数组上下文”。从技术上讲,这是不存在的。数组只是一个包含列表的变量。)没有括号,您将数组@
分配给标量$arrayref
,因此它是在标量上下文中完成的,您可以得到数组中的项数,而不是它的内容。正确,my$arrayref=$\u0];
也可以工作,但是如果您想添加/删除/重新排列参数,以后就很难扩展,因为您必须自己跟踪数组索引。@Sunil,您也可以执行my$arrayref=shift代码>shift
获取标量上下文中的第一个参数元素,并将其放入$arrayref
中。非常感谢您的帮助。成功了。但我仍然无法理解我的$arrayref=@@和我的($arrayref)=@@之间的区别。你能告诉我区别吗?谢谢,我告诉过你区别。你能解释一下哪个部分不清楚吗?@Sunil:用括号将数组@
中的列表赋值给列表($arrayref)
中的变量,因此赋值在列表上下文中进行。(注意:不是“数组上下文”。从技术上讲,这是不存在的。数组只是一个包含列表的变量。)没有括号,您将数组@
分配给标量$arrayref
,因此它是在标量上下文中完成的,您可以得到数组中的项数,而不是它的内容。正确,my$arrayref=$\u0];
也可以工作,但是如果您想添加/删除/重新排列参数,以后就很难扩展,因为您必须自己跟踪数组索引。@Sunil,您也可以执行my$arrayref=shift代码>shift
获取标量上下文中的第一个参数元素,并将其放入$arrayref
中。