如果在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'
答案 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方法返回定义的值。