-> 有两种用法,都和解引用有关。
根据-> 后面跟的符号的不同,解不同类型的引用,
->[] 表示解数组引用,->{}表示解散列引用,->() 表示解子程序引用。
例子:
$arr_ref = /@array;
$arr_ref->[0] 访问数组@array 的第一个元素。
$hash_ref = /%hash;
$hash_ref->{foo} 访问%hash 的 foo 分量
$sub_ref = /&test;
$sub_ref->(1, 2, 3) 使用参数列表(1,2,3) 来调用 &test 这个子程序。
格式:
$obj->method();
或者
ClassName->method();
例如:
$pop3->login( $username, $password );
my $ftp =Net::FTP->new("some.host.name", Debug => 0);
这两种用法略有不同,
但是总的来说,符合以下规则:
引用:[color=red]假设 -> 的左操作数(就是左边那个值,如 $pop3 和 Net::FTP)是 $left,右操作数(就是右边那个值,如login 和 new)是 $right,那么 -> 的运算规则就是:
&{$ClassName::$right}( $left, 原参数列表 )
也就是说把类名称和右操作数拼在一起,当作子程序名称(注),并把左操作数当作第一个参数。
当给hash 赋值时,有时并不明显哪些元素是 keys,那些是values。例如,在下面的赋值中,我们需要仔细的计数,“ key,value,key,value,…” ,来判断2.5 是key还是 vlaue:
%some_hash = ( “ foo” , 35, “ bar”, 12.4 ,2.5, “ hello” , “Wilma” , 1.72e30, “betty” , “ bye/n” );
◆它们在技术上还是有一点不同:任何大箭头符号(=>)左侧的 bareword(由字母,数字,下划线,但不是由数字开头,前面有可选的加号或减号,组成的序列)都暗含着由引号括起来了的。因此可以省略掉大箭头符号(=>)左侧bareword上的引号。你也可以忽略掉hash的花括号中的引号,如果里面只有作为key的bareword.
“fred” => “flintstone”,
“dino” => undef,
“barney”=> “rubble”;
“betty”=> “rubble”,
);