Perl 如何";键%h“;如果$h是一个对象?
下面的Perl 如何";键%h“;如果$h是一个对象?,perl,Perl,下面的$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 - ke
$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
---
使用
键
操作符,如中所示
print scalar keys %$h;
大多数情况下,不需要显式标量,例如
但是,深入研究对象的内部通常是个坏主意。改用公共接口。为什么要这样做?
$h
不是一个对象,而是一个普通的hashref。这实际上是一个运算符优先级问题。使用括号将参数绑定到键
函数
print $links - keys($h) . "\n";
正如格雷格·培根所指出的,在旧的Perls上,首先需要使用
%$h
或%{$h}
手动取消引用(哪种样式更好)
sub getAttributes {
my $self = shift;
return $self->{ATTRIBUTES};
}
我尝试了几种方法让
键
去引用$instance->getAttributes()
返回的内容,但似乎一旦得到了祝福,keys函数就不想知道了。我现在尝试了两种方法,但都失败了引用键的参数类型必须是unlessed hashref或arrayref
。perldoc forYAML::Syck
没有提到如何获取密钥数的方法,我需要密钥数。我已经更新了帖子。
sub getAttributes {
my $self = shift;
return $self->{ATTRIBUTES};
}