Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl使用在';新';_Perl_Variables - Fatal编程技术网

Perl使用在';新';

Perl使用在';新';,perl,variables,Perl,Variables,如果在Perl模块中,我有一个“new”函数声明: my $self = $class->SUPER::new($pArgsProcessor, $pResponse, kStrFormatHtml); $self->{mStrRunType} = $pArgsProcessor->readQueryString('runType'); $self->{mStrStartDate} = $pArgsProcessor->readQueryString('sta

如果在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'

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

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   => ...,
    };
    

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

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   => ...,
    };
    

您的构造函数看起来是正确的。假设您的构造函数与此类似:

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方法返回定义的值。

您的构造函数看起来是正确的。假设您的构造函数与此类似:

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方法返回定义的值。

+1,尽管我认为命名方案可能只是从另一种编程语言/约定中保留了很重的重音:“m”表示成员(而不是类)变量,“Str”表示字符串变量。+1,尽管我认为命名方案可能只是从另一种编程语言/约定中保留了一个很重的重音:“m”表示成员(而不是类)变量,“Str”表示字符串变量不应该是必需的。超类应该已经正确地祝福了它。
祝福$self,$class不应该是必需的。超类应该已经正确地祝福了它。