[英]Perl: How to pass array element by reference to sub
I'm coming to Perl from a C/C++ background and am progressing very slowly, so please bear with me... 我是从C / C ++背景来到Perl并且进展非常缓慢,所以请耐心等待...
I've got an array of hashes and I want to pass one element of the array to a sub-routine (by reference) where that element will be modified. 我有一个哈希数组,我想将数组的一个元素传递给子例程(通过引用),其中该元素将被修改。
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;
}
Well that was fun. 那很有趣。
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.