[英]Why does a reference to an array change to a hash reference when passed to a subroutine
我在嘗試修復的工具中遇到了這個問題,但不明白是什么導致數組引用更改為 hash 引用。 它僅在參數中的 hash ref 之后列出數組 ref 時發生,這讓我認為這是由於接收參數的方式所致。
我沒有該工具的代碼,但下面的代碼重新創建了正在發生的事情。
use strict;
use warnings;
sub PassArrRef{
my @array = [0,1,2,3,4];
my %hash = {0,'a',1,'b',2,'c'};
RecieveHashRef(\%hash, \@array)
}
sub RecieveHashRef{
my %hash = %{$_[0]};
my $arrayref = shift;
print $arrayref;
}
PassArrRef();
此代碼輸出 Hash 參考。
這是因為在ReceiveHashRef
中,您直接引用了第一個位置參數$_[0]
,然后在下一行調用shift
,它采用位置參數的第一個元素。 同樣的事情。
使用子例程 arguments 的典型方法是:
my($hashref, $arrayref) = @_;
完全修復,你的代碼應該是這樣的。 diagnostics
雜注將為您提供更廣泛的錯誤解釋。
use strict;
use warnings;
use diagnostics;
sub PassArrRef{
my @array = (0,1,2,3,4);
my %hash = (0,'a',1,'b',2,'c');
ReceiveHashRef(\%hash, \@array)
}
sub ReceiveHashRef{
my($hashref, $arrayref) = @_;
print "hash ref: $hashref, array ref: $arrayref\n";
}
PassArrRef();
並自由使用https://perldoc.perl.org/ !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.