check if a hash is empty에 대한 많은 참고 자료가 있습니다. 다음 스크립트에서 모두 시도해 보았습니다.해시가 비어 있는지 확인하는 것이 실패하는 이유는 무엇입니까?
use strict;
use warnings;
use Data::Dumper;
$Data::Dumper::Sortkeys = 1;
# Signals come...
my %items = (
item_1 => {signal_1 => 'up',
signal_2 => 'down',
signal_3 => 'up',
},
item_2 => {signal_1 => 'down',
},
item_3 => {signal_1 => 'up',
signal_3 => 'down',
signal_4 => 'down',
signal_5 => 'down',
},
);
# ... and signals go:
delete $items{'item_2'}->{'signal_1'};
# and sometimes all signals are gone from an item:
print Dumper(\%items);
# in that case we would like the signal count to show 0 (zero).
my %signals;
foreach my $item (sort keys %items){
#$signals{$item} = 0;
foreach my $signal (sort keys %{$items{$item}}){
if (not %{$items{$item}}) {print "HERE\n"; $signals{$item} = 0}
elsif($items{$item}->{$signal} eq 'up') {$signals{$item}++}
elsif($items{$item}->{$signal} eq 'down'){$signals{$item}--}
}
}
# unfortunately the item disappears completely!
print Dumper(\%signals);
반복자가 빈 해시를 완전히 건너 뛴 것으로 보입니다. 정확한 결과를 내기위한 나의 유일한 방법은 각 카운트를 0으로 초기화 (주석 처리)하고 비어 있지 않은 해시에 의해 증가/감소되도록하는 것이 었습니다.
왜 그런가요? ???
@ 토토 나는 왜 'item_2 => 0'이 없냐고 묻는다. – simbabque
@simbabque : 알겠습니다, 오해했습니다. ( – Toto
반복 할 X 키가있는 경우 루프의 X 반복이 있습니다. 예, X가 0 일 때도 적용됩니다. "해결 방법"은 실제로 적절한 방법입니다. 상황을 처리. – ikegami