我有一个调用的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.
Run Code Online (Sandbox Code Playgroud)
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");
}
Run Code Online (Sandbox Code Playgroud)
预期产出:
===== foo =====
blah
Run Code Online (Sandbox Code Playgroud)
实际产量:
===== My_Util =====
blah
Run Code Online (Sandbox Code Playgroud)
编辑:修复了语法错误
mel*_*ene 10
->get_header语法是方法调用的语法.方法调用将调用者(即对象或类名)作为隐式的第一个参数传递.
所以,假设我们有
package MyUtil;
sub foo {}
Run Code Online (Sandbox Code Playgroud)
在某个地方,电话
MyUtil->foo(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
结束了MyUtil::foo("MyUtil", 1, 2, 3).
你当然可以打电话
MyUtil::foo(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
直接不传递任何隐式参数.
另一个区别是::版本执行正常的函数调用,而->版本执行方法调用,也遵循继承,即如果从提供方法的类继承,MyUtil->foo则根本不需要MyUtil::foosub .MyUtilfoo
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |