Perl使用'new'中声明的变量

时间:2013-08-14 15:29:27

标签: perl variables

如果在Perl模块中我有一个声明的'new'函数:

 my $self = $class->SUPER::new($pArgsProcessor, $pResponse, kStrFormatHtml);
 $self->{mStrRunType} = $pArgsProcessor->readQueryString('runType');
 $self->{mStrStartDate} = $pArgsProcessor->readQueryString('startdate');
 $self->{mStrEndDate} = $pArgsProcessor->readQueryString('enddate');
 bless $self, $class;
 return $self;

有没有办法在另一个函数中使用'$ self'中存储的数据?我正在尝试使用'mStrRunType'

2 个答案:

答案 0 :(得分:5)

$self可能是一个对象,并且包中的所有subs都可以作为方法调用。然后:

my $object = Your::Class->new(...);

$object->foo(42);

foo方法中,对象将是第一个参数:

sub foo {
  my ($self, $meaning_of_life) = @_;
  say "mStrEndDate = $self->{mStrEndDate}";
  ...;
}

注意:

  • 您通常不应该在构造函数中重新$self。如果编写超类以支持继承,那么$class->SUPER::new(...)可确保将引用加入正确的$class
  • 您的命名方案建议您可能需要使用更复杂的数据结构:

    $self->{mStr} = {
      RunType   => ...,
      StartDate => ...,
      EndDate   => ...,
    };
    

答案 1 :(得分:0)

您的构造函数看起来正确。假设你的构造函数类似于:

sub new {
   my $class = shift;
   my $pArgsProcessor, $pResponse, kStrFormatHtml; #shift your constructor params..

   my $self = $class->SUPER::new($pArgsProcessor, $pResponse, kStrFormatHtml);
   $self->{mStrRunType} = $pArgsProcessor->readQueryString('runType');
   $self->{mStrStartDate} = $pArgsProcessor->readQueryString('startdate');
   $self->{mStrEndDate} = $pArgsProcessor->readQueryString('enddate');

   bless $self, $class;
   return $self;
}

然后你的方法应该可以使用你的参数:

sub test {
   my $self = shift;

   if (defined $self->{mStrEndDate}) {
       print $self->{mStrEndDate};
   } else {
       print "not defined?";
   }
}

如果您的密钥仍未定义,请确保$ pArgsProcessor方法返回定义的值。