代码中有2个包。
套餐1:
package Foo;
sub new {
my ($class, $args) = @_;
my $hashref = {'a' => 1, 'b' => 2};
bless ($self, $class);
return $self;
}
套餐2:
package Fuz;
use Foo;
.
.
.
.
my $obj = Foo->new($args);
如何在对象中获取祝福的hashref的键?
了解perl中的Acme::Damn
和Data::Structure::Util
模块以取消对象的禁用。还有其他方法可以达到这个目的吗?
答案 0 :(得分:3)
祝福哈希引用不会改变它仍然是哈希引用。因此,您可以像往常一样取消引用它:
my @keys = keys %$obj;
答案 1 :(得分:2)
首先,您应该use strict
和use warnings
,因为该代码不会按原样编译。第5行的$self
是什么?你永远不会定义它。将包代码修改为:
package Foo;
use strict;
use warnings;
sub new {
my ($class, $args) = @_;
my $hashref = {'a' => 1, 'b' => 2};
bless ($args, $class);
return $args;
}
1;
现在这将编译,但你想用$hashref
做什么?您是期望通过$args
传递参数还是$hashref
替换$args
?假设确实不需要$args
,我们将其用于Foo
:
package Foo;
use strict;
use warnings;
sub new {
my ($class) = @_;
my $hashref = {'a' => 1, 'b' => 2};
bless ($hashref, $class);
return $hashref;
}
1;
现在,当您调用new时,您将返回一个祝福的hashref,您可以从中获取密钥:
> perl -d -Ilib -e '1'
Loading DB routines from perl5db.pl version 1.33
Editor support available.
Enter h or `h h' for help, or `perldoc perldebug' for more help.
main::(-e:1): 1
DB<1> use Foo
DB<2> $obj = Foo->new()
DB<3> x $obj
0 Foo=HASH(0x2a16374)
'a' => 1
'b' => 2
DB<4> x keys(%{$obj})
0 'a'
1 'b'
DB<5>
答案 2 :(得分:1)
您仍然可以使用$ obj
上的键my $obj = Foo->new($args);
my @k = keys %$obj;