回答
我的Perl是有点生疏,但$
总是意味着以下是一个标量名称。箭头运算符(->
)是一个非常不同的野兽。这意味着解引用名称和然后适用以下运算符。以下是来自perlref(1)一个例子:
因为能够省略花括号为
$$x
简单的情况下,人们往往 使观看解引用符号正确的运营商的错误,不知道 他们的优先级。如果他们是,但是,你可以使用括号而不是 括号。事实并非如此。考虑下面的差异; 0的情况下是一种短手 版本情况1,不案例2:$$hashref{"KEY"} = "VALUE"; # CASE 0 ${$hashref}{"KEY"} = "VALUE"; # CASE 1 ${$hashref{"KEY"}} = "VALUE"; # CASE 2 ${$hashref->{"KEY"}} = "VALUE"; # CASE 3
案例2也是骗人的,你访问一个名为
%hashref
, 不取消引用变量通过$hashref
到哈希这大概是参考。 这将是案例3.
$不是标记变量名称的信号,除了sigil外还有其他用途。 – 2013-04-25 20:40:22
他们可以是不同的方式做同样的事情。
参见http://perlmonks.org/?node=References+quick+reference;规则3显示了如何将一些$
表达式改为使用->
。
我不能足够强烈地推荐核心文档参考教程,perldoc perlreftut,由备受尊敬的观众Mark Jason Dominus编写。它很简洁,并教导了一些创建和使用引用的简单规则。
我不是说RTFM,我说的是,在这一点上有一个伟大的文档,找出它,它会帮助你!
你说的是RTM :) – DVK 2013-04-25 20:50:20
我猜我是,但我笑着说:-) – 2013-04-25 22:47:22
是的,$
和->
都是解引用运算符,尽管它们有很大不同。
Perl允许您将引用转换为其他数据。这些与一些语言中的指针大致相似。要获得原始数据结构,我们必须解除引用他们。这通常涉及花括号(可以在微不足道的情况下省略)和我们正在引用的类型的印记。 (大多数值只能被取消引用到一种类型,否则会引发错误)。
${ $scalar_ref };
@{ $array_ref };
%{ $hash_ref };
*{ $glob_ref };
&{ $code_ref }(@args);
如果$type_ref
仅仅是一个变量,在花括号可以省略,但他们实际的,当我们有更复杂的表达式。
现在的问题是访问哈希或数组中的字段,而不分配给中间哈希。这就是->
运算符用于:
# instead of
my %hash = %{ $hashref };
my $field = $hash{field};
# we can do this and avoid unneccessary copying :)
my $field = ${$hashref}{field}; # curlies around $hashref optional
my $field = $hashref->{field};
类似的阵列,coderefs和方法在对象上调用:
$array_ref->[$index]; $$array_ref[$index];
$code_ref->(@args); &$coderef(@args);
$object->method(@args);
其实,->
运营商确实在方法调用的背景是什么(或者看起来像他们)有点复杂,但这似乎并不是你的问题。
对于arrayrefs和hashrefs,你可以想像,$$ref[$i]
般提领只是替换$ref
与阵列,其中它在象征意义的名字:$array[$i]
。所以第一个是数组元素的sigil,第二个是标量持有参考的$
。
- 1. {}在perl中的含义是什么?
- 2. perl中()的含义是什么?
- 3. Perl中标题的含义是什么?
- 4. perl中$#的含义是什么?
- 5. Perl中“锁定”的含义是什么?
- 6. Perl中'at'(@@)的含义是什么?
- 7. 在Perl中=〜的含义是什么?
- 8. @_ -1在Perl中的含义是什么?
- 9. <DATA>在Perl错误消息中的含义是什么?
- 10. <*>在Perl中的含义是什么?
- 11. PHP中“=>”的含义是什么?
- 12. “=>”在JavaScript中的含义是什么?
- 13. “>”在CSS中的含义是什么?
- 14. Ruby中'<==>'的含义是什么?
- 15. 什么是:?>在f#中的含义?
- 16. <?> Android中的含义是什么?
- 17. C#中“=>”的含义是什么?
- 18. LOC和ACC在perl中的含义是什么?
- 19. 什么意思 - >在Perl 6中的含义?
- 20. Puppet Exec是什么“<| |>”的含义?
- 21. 什么@ {hash {$ key}}在Perl中的含义?
- 22. Rails4 - 回形针样式中#和>的含义是什么?
- 23. Perl操作符含义::和 - >
- 24. * <Class_Name> * <variable_name>中的含义是什么?
- 25. num >> 1在C++中的含义是什么?
- 26. 什么“ - >”在Java中的含义
- 27. 这行代表perl中的含义是什么?
- 28. Perl中“grep -n”的等效含义是什么?
- 29. #!/ usr/bin/perl中-T或-w的含义是什么?
- 30. $#数组在Perl中的含义是什么?
我不确定为什么人们会这样做。这是一个有效的问题。 – 2013-04-25 19:35:27
@ D.Shawley如果这是一个有效的问题,那么为什么你不喜欢呢? (国际海事组织的人没有足够的提问) – 2013-04-25 19:41:50
一些有用的参考。 [Mini-Tutorial:Dereferencing Syntax](http://www.perlmonks.org/?node_id=977408),[参考快速参考](http://www.perlmonks.org/?node_id=69927),[perlref] (http://perldoc.perl.org/perlref.html),[perlreftut](http://perldoc.perl.org/perlreftut.html),[perldsc](http://perldoc.perl.org/perldsc .html),[perllol](http://perldoc.perl.org/perllol.html) – ikegami 2013-04-25 20:05:19