Perl中不带self参数的调用方法

Call method without self parameter in Perl

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

举个例子,我有一个包裹:

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 没有隐式传递 "self" 参数。

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

$objXXXXtest("str");

使用 XXXX 假设构造并得到 called(str) 作为输出?

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

myPackage::test("str");

有点不正统,但是 UNIVERSAL::can returns 一个代码引用,您可以在没有引用的情况下调用它。

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