gpt4 book ai didi

perl - 在调用模块方法时传递的模块引用

转载 作者:行者123 更新时间:2023-11-30 23:52:06 25 4
gpt4 key购买 nike

我有一个名为 fetch.pl 的 perl 脚本和一个名为 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.

fetch.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

编辑:修正语法错误

最佳答案

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

所以,假设我们有

package MyUtil;
sub foo {}

某处,电话
MyUtil->foo(1, 2, 3)

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

当然可以打电话
MyUtil::foo(1, 2, 3)

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

另见 perldoc perlobj .

另一个区别是 ::版本执行正常的函数调用,而 -> version 执行方法调用,它也遵循继承,即使用 MyUtil->foo不必有 MyUtil::foo如果 MyUtil继承自提供 foo 的类方法。

关于perl - 在调用模块方法时传递的模块引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51331859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com