Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何";键%h“;如果$h是一个对象?_Perl - Fatal编程技术网

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 for
YAML::Syck
没有提到如何获取密钥数的方法,我需要密钥数。我已经更新了帖子。
sub getAttributes {
  my $self = shift;
  return $self->{ATTRIBUTES};
}