Perl中没有自变量的调用方法

时间:2018-08-26 14:40:33

标签: perl oop method-call

我想知道是否可以在不传递自变量的情况下从对象调用方法。

例如,我有一个包裹:

package MyPackage;

sub new {
    my $class = shift;
    return bless {}, $class;
}

sub test {
    print("called(" . join(', ', @_) . ")\n");
}

我从脚本中调用构造函数,然后调用test方法:

my $obj = MyPackage->new();
$obj->test("str");

提供以下输出:

called(MyPackage=HASH(0x55b05d481f48), str)

有什么办法(即使这不是最佳做法,还是使用一些“ arcane” 语言的特性)仅使用引用来调用test方法 $obj,而不会隐式传递“自我”参数。

总而言之,是否可以做这样的事情:

$objXXXXtest("str");

使用XXXX的假设结构并获得called(str)作为输出?

2 个答案:

答案 0 :(得分:8)

有点不合常规,但是UNIVERSAL::can返回的代码引用可以在没有引用对象的情况下调用。

$obj->can("test")->("str");

答案 1 :(得分:0)

您将直接调用该函数,而不是将其作为对象的方法:

myPackage::test("str");