私はこのコードを持っています
foreach my $key (keys %ad_grp) {
# Do something
}
動作します。
%ad_grp
がなく、ハッシュへの参照$ad_grp_ref
がある場合、同じようになりますか?
foreach my $key (keys %$ad_grp_ref) {
...
}
Perl::Critic
およびdaximはスタイルを推奨します
foreach my $key (keys %{ $ad_grp_ref }) {
...
}
読みやすさと保守の懸念から(したがって、%{ $ad_grp_ref }
の代わりに%{ $ad_grp_obj[3]->get_ref() }
を使用する必要がある場合、何を変更するかをよく考える必要はありません)
Perl 5.14(現在Perl 5.13で機能します)では、 ハッシュリファレンスでキーを使用
use v5.13.7;
foreach my $key (keys $ad_grp_ref) {
...
}
他の人が述べたように、参照を参照解除する必要があります。 keys
関数では、引数が%で始まる必要があります。
私の好み:
foreach my $key (keys %{$ad_grp_ref}) {
Conway によると:
foreach my $key (keys %{ $ad_grp_ref }) {
誰を聞くべきかを推測してください...
Perlリファレンスドキュメント を読み通すこともできます。
ハッシュとリストのハッシュおよびハッシュのリストへの参照で多くのことを実行していることに気付いたら、 Object Oriented Perl の使用を検討することをお勧めします。 Perlのドキュメントには Nice little tutorials があります。
したがって、Perl 5.20では、新しい答えは次のとおりです。
foreach my $key (keys $ad_grp_ref->%*) {
(これには、より複雑な式を透過的に操作するという利点があります。
foreach my $key (keys $ad_grp_obj[3]->get_ref()->%*) {
等。)
完全なドキュメントについては、 perlref を参照してください。
注:Perlバージョン5.20および5.22では、この構文は実験的と見なされているため、
use feature 'postderef';
no warnings 'experimental::postderef';
それを使用するファイルの先頭。 Perl 5.24以降では、この機能にプラグマは必要ありません。