0

$h以下はオブジェクトですが、通常のハッシュのみが含まれています。

my $h = YAML::Syck::LoadFile('have_seen.yaml');

通常のハッシュであれば、キーの数はkeys $h.

質問

ハッシュがオブジェクトにあるときにキーの数を取得する方法は?

アップデート

これはコードです

#!/usr/bin/perl

use strict;
use YAML::Syck;

my $h = YAML::Syck::LoadFile('h.yaml');

my $links = 100;

print $links - keys $h . "\n";

yaml ファイルには、

--- 
010711: 1
---
4

3 に答える 3

6

$hオブジェクトではなく、プレーンなハッシュリファレンスです。これは実際には演算子の優先順位の問題です。keysかっこを使用して、引数を関数にタイトにバインドします。

print $links - keys($h) . "\n";

Greg Bacon が指摘したように、古い Perl では、最初に%$horを手動で逆参照する必要%{ $h }があります (これがより良いスタイルです)。

于 2012-06-02T22:11:29.880 に答える
1

keys次のように演算子を使用します

print scalar keys %$h;

ほとんどの場合、明示的なscalarものは不要です。たとえば

my $n = keys %$h;

しかし、通常、オブジェクトの内部を突っ込むのは悪い考えです。代わりにパブリック インターフェイスを使用してください。なぜこのようにしたいのですか?

于 2012-06-02T21:44:27.970 に答える