当其他参数也被提交时,访问对象中的“self”(perl)

时间:2013-10-15 13:09:28

标签: perl oop

我在尝试访问对象内的$self中的sub和其他变量时收到错误消息。从对象外部调用sub时一切正常。但是当我尝试在对象中访问它时,我得到一个错误(见下文)。

以下是描述我的问题的示例代码:

package input;
use warnings;
use strict;

sub new {
    my $class = shift;
    my $self = { };  
    $self->{_name} = shift;
    bless ($self, $class);
    return $self;
}

sub test1{
    my $self = shift;
    my $person = shift;
    return $self->{_name}." and ".$person;
}

sub test2{
    my $self = shift;
    my $person = shift;
    print test1($self,$person);
}

package Main;
use warnings;
use strict;

my $i = input->new("Jon");
print $i->test1("Me")."\n";
$i->test2();

打印$i->test1("Me")."\n";的调用确实可以正常工作。

我喜欢在对象内的不同函数中访问test1()。 但对于$i->test2();我收到了错误

  

在连接(。)或第22行的字符串中使用未启动的值$ person。

如果我要写

sub test2{
    my $self = shift;
    my $person = "Jim";

    print test1($self,$person);
}

它也会起作用。

但我明确地想要将sub传递给$self$self之外的其他变量。因为我想使用$self和其他变量。我认为这与将sub传递给$self有关,但我无法弄清楚如何在没有my $self = shift;命令的情况下访问{{1}}。

1 个答案:

答案 0 :(得分:2)

  

在连接(。)或第22行的字符串中使用未启动的值$ person。

调用test2方法时,您忘记了$person参数,即

$i->test2();

应该是

$i->test2("Someone");