1

代码中有2个包。

套餐一:

package Foo;
sub new {
    my ($class, $args) = @_;
    my $hashref = {'a' => 1, 'b' => 2};
    bless ($self, $class);
    return $self;
}

套餐二:

package Fuz;
use Foo;
.
.
.
.
my $obj = Foo->new($args);

如何在对象中获取祝福 hashref 的键?

我知道perl 中的模块来取消对象Acme::DamnData::Structure::Util有没有其他方法可以实现这一目标?

4

3 回答 3

3

祝福哈希引用不会改变它仍然是哈希引用。因此,您可以像往常一样取消引用它:

my @keys = keys %$obj;
于 2013-12-30T12:10:19.887 回答
2

首先,您应该use strictand 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>
于 2013-12-30T12:14:25.740 回答
1

您仍然可以在 $obj 上使用键

my $obj = Foo->new($args);
my @k = keys %$obj;
于 2013-12-30T12:12:25.900 回答