1

コードには 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);

オブジェクトで祝福されたハッシュリファレンスのキーを取得する方法は?

オブジェクトを unbless するための perlのモジュールを認識しAcme::Damnています。Data::Structure::Utilこれを達成する他の方法はありますか?

4

3 に答える 3

2

そのコードはそのままではコンパイルされないため、最初にuse strictandを実行する必要があります。use warnings5行目は何$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$argsFoo

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 に答える