Tôi gặp sự cố khi hiểu các tham chiếu băm và thay đổi giá trị băm tại chỗ thay vì trả về hàm băm. Tôi muốn viết một thói quen phụ mà sẽ trả về một giá trị từ băm và cũng sửa đổi băm. Tôi đã phải đối mặt với một số vấn đề trong khi mã hóa cho nó. Vì vậy, tôi đã viết mã cơ bản sau đây để hiểu sửa đổi băm tại chỗ.Perl sửa đổi tham chiếu băm trong chương trình con
#!/usr/local/bin/perl
#Check hash and array references
#Author: Sidartha Karna
use warnings;
use strict;
use Data::Dumper;
sub checkHashRef{
my ($hashRef, $arrVal) = @_;
my %hashDeref = %{$hashRef};
$hashDeref{'check'} = 2;
push(@{$arrVal}, 3);
print "There:" ;
print Dumper $hashRef;
print Dumper %hashDeref;
print Dumper $arrVal
}
my %hashVal = ('check', 1);
my @arrVal = (1, 2);
checkHashRef(\%hashVal, \@arrVal);
print "here\n";
print Dumper %hashVal;
print Dumper @arrVal;
Kết quả quan sát được là:
There:$VAR1 = {
'check' => 1
};
$VAR1 = 'check';
$VAR2 = 2;
$VAR1 = [
1,
2,
3
];
here
$VAR1 = 'check';
$VAR2 = 1;
$VAR1 = 1;
$VAR2 = 2;
$VAR3 = 3;
Từ đầu ra, tôi suy ra rằng, những thay đổi để hashDeref không sửa đổi dữ liệu trong các tài liệu tham khảo. Tôi hiểu có đúng không? Có cách nào để sửa đổi biến băm tại chỗ thay vì trả lại nó không.
Cảm ơn bạn "mu quá ngắn" – Sid