我想知道是否可以在不传递自变量的情况下从对象调用方法。
例如,我有一个包裹:
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)
作为输出?
答案 0 :(得分:8)
有点不合常规,但是UNIVERSAL::can
返回的代码引用可以在没有引用对象的情况下调用。
$obj->can("test")->("str");
答案 1 :(得分:0)
您将直接调用该函数,而不是将其作为对象的方法:
myPackage::test("str");