假设 -> 的左操作数(就是左边那个值,如 $pop3 和 Net::FTP)是 $left,右操作数(就是右边那个值,如 login 和 new)是 $right,那么 -> 的运算规则就是:
复制代码
- if ( ref $left 有效 ){ # 也就是说 $left 是个引用,而不是个裸字
- $ClassName = ref $left; # 取引用的类型,当作类名称
- }
- else{
- $ClassName = $left; # 直接把裸字当作类名称
- }
然后调用:
&{$ClassName::$right}( $left, 原参数列表 )
也就是说把类名称和右操作数拼在一起,当作子程序名称(注),并把左操作数当作第一个参数。
注:Perl 解释器要做的工作其实要比这复杂,它还要考虑到继承的问题。
原帖由 Piggest 于 2007-8-23 14:06 发表
$template=Bugzilla->template;
……
$template->process("bug/navigate.html.tmpl", $vars)
| | ThrowTemplateError($template->error());
是不是可以理解为调用Bugzilla::template::process ...
原帖由 guijia8427 于 2008-7-22 18:10 发表
怪哉 为啥
$arr_ref = \@array;
$arr_ref->[0] 访问数组 @array 的第一个元素。
$hash_ref = \%hash;
$hash_ref->{foo} 访问 %hash 的 foo 分量
$sub_ref = \&test;
$sub_ref->(1, 2, 3) 使用参数列表 (1 ...
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |