-> 有两种用法,都和解引用有关。
第一种用法,就是解引用。
根据 -> 后面跟的符号的不同,解不同类型的引用,
->[] 表示解数组引用,->{} 表示解散列引用,->() 表示解子程序引用。
例子:
$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);
这两种用法略有不同,
但是总的来说,符合以下规则:
QUOTE:
假设 -> 的左操作数(就是左边那个值,如 $pop3 和 Net::FTP)是 $left,右操作数(就是右边那个值,如 login 和 new)是 $right,那么 -> 的运算规则就是:
if ( ref $left 有效 ){ # 也就是说 $left 是个引用,而不是个裸字
$ClassName = ref $left; # 取引用的类型,当作类名称
}
else{
$ClassName = $left; # 直接把裸字当作类名称
}
然后调用:
&{$ClassName::$right}( $left, 原参数列表 )
也就是说把类名称和右操作数拼在一起,当作子程序名称(注),并把左操作数当作第一个参数。
注:Perl 解释器要做的工作其实要比这复杂,它还要考虑到继承的问题。
-------------------------------------------------------------
当给 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” );
如果 Perl 能提供一种方法,让我们轻易的辨别出哪一个是 key,哪一个是 value,那该有多好?Larry 也想过这个问题,因此发明了大箭头符号(=>)◆。对于 Perl 来讲,其作用和和逗号(,)类似,因此有时称作 “ 胖逗号(fat comma)” 。Perl 语法中,在需要逗号(,)的时候,都可以使用大箭头符号替换;对于 Perl来讲,它们是一样的◆。下面是给 hash 赋值的另一种方法:
◆是的,还有小箭头(->) 。它和引用一起使用,这是高级话题。如果你准备好了,可以参见perlreftut 和perlref 的帮助手册
◆它们在技术上还是有一点不同:任何大箭头符号(=>)左侧的 bareword(由字母,数字,下划线,但不是由数字开头,前面有可选的加号或减号, 组成的序列) 都暗含着由引号括起来了的。因此可以省略掉大箭头符号(=>)左侧bareword上的引号。你也可以忽略掉hash的花括号中的引号,如果里面只有作为key的bareword.
my %last_name = (
“fred” => “flintstone”,
“dino” => undef,
“barney”=> “rubble”;
“betty”=> “rubble”,
);
上面代码中,很容易辨别出哪一个是 key,哪一个是 value。注意列表中最后一个逗号。我们早期讨论过,这个逗号是没什么用的,但有时能给我们带来方便;如果我们要加入新的元素到 hash 中,我们只需知道每一行都有 key/value 对,结尾有逗号。Perl 会查看不同元素之间的逗号,以及列表结尾处的逗号(此逗号非必需的)
分享到:
相关推荐
第一章 Perl概述............................................................................................................................10 1.1 从头开始.................................................
在Windows上的SQL*Plus可以用“向上向下”箭头来调用之前使用过的命令,修改、编辑、重复之前的命令都相当方便。如何解决这个问题呢? 答案是安装一个小工具:Uniread 安装Uniread的要求 1.Linux系统上必须已经安装...
Linux上使用SQL*Plus有一个相当不方便的... 答案是安装一个小工具:Uniread <br>安装Uniread的要求 <br>1.Linux系统上必须已经安装了Perl 2.安装Uniread之前先安装 readline,Term,IO这3个工具。 <br>
Linux上使用SQL*Plus有一个相当... 答案是安装一个小工具:Uniread <br> <br> 安装Uniread的要求 <br>1.Linux系统上必须已经安装了Perl 2.安装Uniread之前先安装 readline,Term,IO这3个工具。
Linux上使用SQL*Plus有一个相当... 答案是安装一个小工具:Uniread <br> <br> 安装Uniread的要求 <br>1.Linux系统上必须已经安装了Perl 2.安装Uniread之前先安装 readline,Term,IO这3个工具。
Linux上使用SQL*Plus有一个相当... 答案是安装一个小工具:Uniread <br> <br> 安装Uniread的要求 <br>1.Linux系统上必须已经安装了Perl 2.安装Uniread之前先安装 readline,Term,IO这3个工具。
汽车项目建设者作者:格雷格·福克(Greg Folker)概述Simple Go程序设计为使用交互式提示用户输入来自动生成新软件项目的必要组件和必需组件当前... tab和箭头键可用于在编程语言菜单中自动完成报告问题在上跟踪问题
蛇 使用箭头键移动。 由制成 Rob Gietema Laurens Kling Matthijs坦Perl
每个椭圆代表一个函数,每个箭头表示一个函数调用。 在下图中,主程序由节点 MAIN 表示。 它调用 6 个函数,其中一个调用 9 个其他函数。 callGraph 静态生成调用图图像并将其显示在屏幕上。 支持的语言有:awk、...
它带有完整的源代码和许可证,允许在任何免费项目或商业产品中使用。 DLL及其来自以及此VB包装器,位于 。 这个包装器是一个好的开始,并且由于作者似乎已退出而需要做更多的工作。 在编译ocx以使箭头键起作用之前...
旋律和可动类型的热门日期 您是否计划输入,或以其他方式修改输入日期字段? 例如,您有时会忘记创建一个有效的两位小时字段的前导零吗?... 使用绿色箭头按钮刷新当前时间。 完整的文档可以在找到
箭头左侧的参数是perls替换运算符的左操作数,右侧参数是其替换的操作数。 可以多次指定该选项,并且替换将按顺序应用。 如果原始数据库在不同于客户端计算机的挂载点下索引路径,这将很有用。 Homedirectories可以...