首页 > 解决方案 > 在调用模块方法时传递的模块引用

问题描述

我有一个名为 perl 脚本fetch.pl和一个名为My_Util.pm.

My_Util.pm

package My_Util;

sub get_header
{
    my $msg = shift;
    return " ===== $msg ===== ";
}

1; # Perl modules must return a true value when loaded.

获取.pl

use My_Util;

print_and_log(My_Util->get_header("foo"));
print_and_log("blah");

sub print_and_log
{
    my $message = shift;
    print("$message\n");
}

预期输出:

===== foo =====
blah

实际输出:

===== My_Util =====
blah

编辑:修正语法错误

标签: perl

解决方案


->get_header语法是用于方法调用的。方法调用将调用者(即对象或类名)作为隐式的第一个参数传递。

所以,假设我们有

package MyUtil;
sub foo {}

某处,电话

MyUtil->foo(1, 2, 3)

最终做MyUtil::foo("MyUtil", 1, 2, 3)

当然可以打电话

MyUtil::foo(1, 2, 3)

直接不传递任何隐式参数。

另请参阅perldoc perlobj

另一个区别是::版本执行普通函数调用,而->版本执行方法调用,这也遵循继承,即如果从提供方法的类继承,MyUtil->foo则根本不需要MyUtil::foo子。MyUtilfoo


推荐阅读