이전에 정의 된 해시에 요소 (값이있는 키)를 추가하는 서브 루틴을 만들려고합니다. 이 서브 루틴은 루프에서 호출되므로 해시가 커집니다. 나는 반환하는 해시가 기존 요소를 덮어 쓰는 것을 원하지 않는다.배열과 hashref를 어떻게 반환합니까?
결국, 전체 누적 된 해시를 출력하고 싶습니다.
지금은 아무 것도 인쇄하지 않습니다. 최종 해시는 비어 있지만 그렇게해서는 안됩니다. 해시 참조로 시도했지만 실제로 작동하지 않습니다.
sub main{
my %hash;
%hash=("hello"=>1); # entry for testing
my $counter=0;
while($counter>5){
my(@var, $hash)=analyse($one, $two, \%hash);
print ref($hash);
# try to dereference the returning hash reference,
# but the error msg says: its not an reference ...
# in my file this is line 82
%hash=%{$hash};
$counter++;
}
# here trying to print the final hash
print "hash:", map { "$_ => $hash{$_}\n" } keys %hash;
}
sub analyse{
my $one=shift;
my $two=shift;
my %hash=%{shift @_};
my @array; # gets filled some where here and will be returned later
# adding elements to %hash here as in
$hash{"j"} = 2; #used for testing if it works
# test here whether the key already exists or
# otherwise add it to the hash
return (@array, \%hash);
}
을하지만 전혀 작동하지 않습니다 : 서브 루틴 analyse
해시를 수신하지만 반환 해시 참조가 비어 있거나 나도 몰라 짧은 형태로 다음과 같이 내 코드 보인다. 결국 아무 것도 인쇄되지 않습니다.
Can't use an undefined value as a HASH reference at C:/Users/workspace/Perl_projekt/Extractor.pm line 82.
내 실수 어디 :
우선 지금은 말한다, 그것은 참조 아니다 말했다?모든 조언에 감사드립니다.
:-) 별도의 질문을해야합니다 서브 루틴 내부의 @array의 사용은 와우 덕분이 잘 :)를 작동 –