perl - 在调用模块方法时传递的模块引用
问题描述
我有一个名为 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
编辑:修正语法错误
解决方案
->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
子。MyUtil
foo
推荐阅读
- javascript - Bootstrap 5 多级下拉菜单
- reactjs - Power BI 使用 ServicePrincipal 嵌入 React
- python - 重新安装了Python,但是突然不行了
- python - 一个类增加了基础数据,但它不应该
- r - 使用 logger R 包对 appender_file 和 appender_console 进行日志自定义
- javascript - 浏览器中的 Javascript - 使用自定义 x509 证书发出 HTTPS 请求?
- postgresql - Postgres 是否只允许一个同名索引?
- java - Scrypt vs BCrypt(内存使用)
- javascript - React:如何在数组中渲染子组件?
- linux - 使用 Linux 终端在 eclipse 中的项目下创建文件