7

hashref に 0 要素が含まれているかどうかをテストする必要があります。私はこのコードを使用しました:

$self = { fld => 1 };
%h = ( "a" => "b" );
$self->{href} = { %h };
print STDERR $self->{href}{ "a" };
print STDERR "\n";
print "size of hash:  " . keys( %h ) . ".\n";
print "size of hashref:  " . keys( $self->{href} ) . ".\n";

perl 5.16 では問題なく動作しますが、perl 5.10 では失敗します:

Type of arg 1 to keys must be hash (not hash element) at - line 7, near "} ) "
Execution of - aborted due to compilation errors.
4

4 に答える 4

17

使用する場合

%hash

ハッシュの場合は、次を使用します

%{ $hash }

参考までにですので、

keys %{ $self->{href} }

注: Perl の一部のバージョンでkeysは、参照を受け入れます。ただし、これは放棄された実験的な機能でした。使うべきではありません。

于 2013-04-30T18:21:25.880 に答える
3

ハッシュに要素があるかどうかを調べるには、スカラー コンテキストで使用します。

scalar %h

また

%h ? "yup" : "nope"

scalar keys %hのキーを数えることで同じ目的を達成しますが%h、実際に知りたいことを尋ねる方がよいでしょう。

ただし、いずれに%hしてもハッシュであり、ハッシュリファレンスではありません。(Perl の一部のバージョンでは、 への引数として hashref を許容しますkeys。) EXPRhashref に評価される式が与えられた場合、対応するハッシュを取得するには、%{ EXPR }. これをサンプル コードと組み合わせると、次のようになります。

print "size of hashref:  " . keys( %{ $self->{href} } ) . ".\n";
print "hash " . (%{ $self->{href} } ? "does" : "does not") . " contain elements\n";
于 2013-04-30T19:16:13.367 に答える
2

ハッシュとして逆参照する必要があります。

print "size of hashref: ", keys %{ $self->{href} }, "\n";

TIMTOWTDI の場合、キーがあるかどうかを確認するために、次の必要はありませんkeys

print "undefined" unless %{ $self->{href} };
于 2013-04-30T18:21:31.737 に答える