如何在另一个文件中获取对象的当前值?

时间:2016-06-12 14:39:48

标签: perl

总结一下我的问题,我不打算复制/粘贴代码,而是写一个简单的代码。 我有3个文件,A.pm,B.pm C.pm。

在A.pm A我有一个带有构造函数的类:

package A;
use strict;
use warnings;

sub new {
  my $proto = shift;
  my $class = ref($proto) || $proto;
  my $self  = {};
  $self->{NAME} = "Bob";
  bless ($self, $class);
  return $self;
}

在我的B.pm文件中,我有:

package B;
use strict;
use warnings;
use A;
our $MyObjectA = new A();
sub myfunctionB {
 $MyObjectA->{NAME} = "Angel";
}

在文件C.pm:

package C;
use strict;
use warnings;
use B;

sub myfunctionC {
   print("There is the name of my Object".$B::MyObjectA->{NAME}."\n");
}

在主要的p.pl

use strict;
use warnings;
use B;
use C;

B::myfunctionB();
C::myfunctionC();

结果:子程序C打印Bob,但我想显示Angel。我该怎么办?

2 个答案:

答案 0 :(得分:3)

在检索对象名称之前,请致电B::myfunctionB()

答案 1 :(得分:0)

这里的主要问题似乎是有一个名为B的CPAN模块。因此,要覆盖加载该模块而不是您自己的模块,可以使用@INC编译指示将当前目录放在lib的开头:

<强> A.pm

package A;
use strict;
use warnings;

sub new {
  my $proto = shift;
  my $class = ref($proto) || $proto;
  my $self  = {};
  $self->{NAME} = "Bob";
  bless ($self, $class);
  return $self;
}

1;

<强> B.pm

package B;
use strict;
use warnings;
use A;
our $MyObjectA = A->new();

sub myfunctionB {
 $MyObjectA->{NAME} = "Angel";
}

1;

<强> C.pm

package C;
use strict;
use warnings;
use lib '.';
use B;

sub myfunctionC {
    B::myfunctionB();
    print("The name of my Object: "
          . $B::MyObjectA->{NAME}
          . "\n"
      );
}

1;

<强> p.pl

use strict;
use warnings;
use C;

C::myfunctionC();

运行p.pl的输出:

The name of my Object: Angel