Arrays Perl:如何通过引用将数组元素传递给sub
我是从C/C++背景开始学习Perl的,我的学习进度非常缓慢,所以请耐心听我说 我有一个散列数组,我想把数组中的一个元素传递给一个子例程(通过引用),在那里修改该元素Arrays Perl:如何通过引用将数组元素传递给sub,arrays,perl,hash,Arrays,Perl,Hash,我是从C/C++背景开始学习Perl的,我的学习进度非常缓慢,所以请耐心听我说 我有一个散列数组,我想把数组中的一个元素传递给一个子例程(通过引用),在那里修改该元素 use strict; use warnings; use Data::Dumper; my @array; my %hash; $hash{'key1'} = 1; $hash{'key2'} = 2; $hash{'key3'} = 3; $hash{'key4'} = 4; push @array, {%hash};
use strict;
use warnings;
use Data::Dumper;
my @array;
my %hash;
$hash{'key1'} = 1;
$hash{'key2'} = 2;
$hash{'key3'} = 3;
$hash{'key4'} = 4;
push @array, {%hash};
$hash{'key1'} = 10;
$hash{'key2'} = 20;
$hash{'key3'} = 30;
$hash{'key4'} = 40;
push @array, {%hash};
# Expect:
# @array[0] like 1,2,3,4
# @array[1] like 10,20,30,40
print Dumper(@array);
doChange(\@array[1]); # <<==== THIS IS THE BIT WHERE I NEED ASSISTANCE TO PASS ARRAY ELEMENT BY REFERENCE, IF POSSIBLE
# Expect:
# @array[0] like 1,2,3,4
# @array[1] like 100,200,300,400 <<== VALUES HAVE CHANGED
print Dumper(@array);
sub doChange
{
my %h = @_; # <<=== THIS IS NOT RIGHT EITHER!?
$h{'key1'} = 100;
$h{'key2'} = 200;
$h{'key3'} = 300;
$h{'key4'} = 400;
}
使用严格;
使用警告;
使用数据::转储程序;
我的@数组;
我的%hash;
$hash{'key1'}=1;
$hash{'key2'}=2;
$hash{'key3'}=3;
$hash{'key4'}=4;
push@array,{%hash};
$hash{'key1'}=10;
$hash{'key2'}=20;
$hash{'key3'}=30;
$hash{'key4'}=40;
push@array,{%hash};
#期望:
#@array[0]类似于1,2,3,4
#@array[1]像10,20,30,40
打印转储程序(@array);
doChange(\@array[1]);# 那很有趣
use strict;
use warnings;
use Data::Dumper;
my @array;
my $hash;
$hash = {}; # initialise to a blank hash.
$hash->{'key1'} = 1;
$hash->{'key2'} = 2;
$hash->{'key3'} = 3;
$hash->{'key4'} = 4;
push @array, $hash;
$hash = {}; # initialise to a blank hash.
$hash->{'key1'} = 10;
$hash->{'key2'} = 20;
$hash->{'key3'} = 30;
$hash->{'key4'} = 40;
push @array, $hash;
# Expect:
# @array[0] like 1,2,3,4
# @array[1] like 10,20,30,40
print Dumper(\@array); # Dumper takes a reference.
doChange($array[1]); # pass a pointer (reference) to the hash.
# Expect:
# @array[0] like 1,2,3,4
# @array[1] like 100,200,300,400 <<== VALUES HAVE CHANGED
print Dumper(\@array);
sub doChange
{
my $h = shift; # Get the pointer to your hash.
$h->{'key1'} = 100; # mess with it.
$h->{'key2'} = 200;
$h->{'key3'} = 300;
$h->{'key4'} = 400;
}
使用严格;
使用警告;
使用数据::转储程序;
我的@数组;
我的$hash;
$hash={};#初始化为空哈希。
$hash->{'key1'}=1;
$hash->{'key2'}=2;
$hash->{'key3'}=3;
$hash->{'key4'}=4;
push@array,$hash;
$hash={};#初始化为空哈希。
$hash->{'key1'}=10;
$hash->{'key2'}=20;
$hash->{'key3'}=30;
$hash->{'key4'}=40;
push@array,$hash;
#期望:
#@array[0]类似于1,2,3,4
#@array[1]像10,20,30,40
打印转储程序(\@数组);\转储程序获取一个引用。
doChange($array[1]);#传递一个指向散列的指针(引用)。
#期望:
#@array[0]类似于1,2,3,4
#@array[1]类似100200300400{'key2'}=200;
$h->{'key3'}=300;
$h->{'key4'}=400;
}
那很有趣
use strict;
use warnings;
use Data::Dumper;
my @array;
my $hash;
$hash = {}; # initialise to a blank hash.
$hash->{'key1'} = 1;
$hash->{'key2'} = 2;
$hash->{'key3'} = 3;
$hash->{'key4'} = 4;
push @array, $hash;
$hash = {}; # initialise to a blank hash.
$hash->{'key1'} = 10;
$hash->{'key2'} = 20;
$hash->{'key3'} = 30;
$hash->{'key4'} = 40;
push @array, $hash;
# Expect:
# @array[0] like 1,2,3,4
# @array[1] like 10,20,30,40
print Dumper(\@array); # Dumper takes a reference.
doChange($array[1]); # pass a pointer (reference) to the hash.
# Expect:
# @array[0] like 1,2,3,4
# @array[1] like 100,200,300,400 <<== VALUES HAVE CHANGED
print Dumper(\@array);
sub doChange
{
my $h = shift; # Get the pointer to your hash.
$h->{'key1'} = 100; # mess with it.
$h->{'key2'} = 200;
$h->{'key3'} = 300;
$h->{'key4'} = 400;
}
使用严格;
使用警告;
使用数据::转储程序;
我的@数组;
我的$hash;
$hash={};#初始化为空哈希。
$hash->{'key1'}=1;
$hash->{'key2'}=2;
$hash->{'key3'}=3;
$hash->{'key4'}=4;
push@array,$hash;
$hash={};#初始化为空哈希。
$hash->{'key1'}=10;
$hash->{'key2'}=20;
$hash->{'key3'}=30;
$hash->{'key4'}=40;
push@array,$hash;
#期望:
#@array[0]类似于1,2,3,4
#@array[1]像10,20,30,40
打印转储程序(\@数组);\转储程序获取一个引用。
doChange($array[1]);#传递一个指向散列的指针(引用)。
#期望:
#@array[0]类似于1,2,3,4
#@array[1]类似100200300400{'key2'}=200;
$h->{'key3'}=300;
$h->{'key4'}=400;
}
他正在将对哈希的引用推送到数组中。{%hash}
和\%hash
之间唯一的区别是前者获取%hash
的副本并返回对该副本的引用,而后者返回对原始哈希的引用。@DaveCross-hum,的确如此,我忽略了这一点,谢谢你指出。他正在把对散列的引用推到他的数组中。{%hash}
和\%hash
之间唯一的区别是前者获取%hash
的副本并返回对该副本的引用,而后者返回对原始哈希的引用。@DaveCross-hum,的确如此,我忽略了这一点,谢谢你指出。谢谢。[我在之前的评论中说了谢谢,但它似乎没有发布???]不用担心。Perl引用就像C指针,但没有内存泄漏!谢谢[我在之前的评论中说了谢谢,但它似乎没有发布???]不用担心。Perl引用就像C指针,但没有内存泄漏!