我有一个名为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,3).
你当然可以打电话
MyUtil::foo(1,3)
直接不传递任何隐式参数.
另一个区别是:: version执行正常的函数调用,而 – > version执行方法调用,也遵循继承,即使用MyUtil-> foo,如果MyUtil继承自提供foo方法的类,则根本不需要MyUtil :: foo sub.