首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >->和$在Perl中的含义是什么?

->和$在Perl中的含义是什么?
EN

Stack Overflow用户
提问于 2013-04-26 03:19:47
回答 4查看 211关注 0票数 0

->和Perl中的$有什么不同?

其中->是中缀取消引用运算符。

$也是解引用运算符。

这个运算符到底是什么意思?

EN

回答 4

Stack Overflow用户

发布于 2013-04-26 04:00:58

我强烈推荐核心文档参考教程perldoc perlreftut,它是由备受尊敬的行家Mark Jason Dominus编写的。它很简洁,教会了一些创建和使用引用的简单规则。

我不是说RTFM,我是说,在这一点上有一个很好的文档,去寻找它,它会帮助你的!

票数 7
EN

Stack Overflow用户

发布于 2013-04-26 04:05:41

是的,$->都是解引用操作符,尽管它们有很大的不同。

Perl允许您使用对其他数据的引用。它们大致类似于某些语言中的指针。要获得原始数据结构,我们必须取消对它们的引用。这通常涉及花括号(在琐碎的情况下可以省略)和我们要取消引用的类型的符号。(大多数值只能取消对一种类型的引用,否则会抛出错误)。

代码语言:javascript
运行
复制
${ $scalar_ref };
@{ $array_ref };
%{ $hash_ref };
*{ $glob_ref };
&{ $code_ref }(@args);

如果$type_ref只是一个变量,可以省略卷边,但当我们有更复杂的表达式时,它们是实用的。

现在的问题是访问散列或数组中的字段,而不分配给中间散列。这是使用->运算符的地方:

代码语言:javascript
运行
复制
# 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};

类似于对对象的数组、coderef和方法调用:

代码语言:javascript
运行
复制
$array_ref->[$index];   $$array_ref[$index];
$code_ref->(@args);     &$coderef(@args);
$object->method(@args);

实际上,->操作符在方法调用(或类似方法调用的上下文)中所做的事情要复杂一些,但这似乎不是您要问的问题。

对于arrayref和hashrefs,您可以想象$$ref[$i]-like取消引用只是将$ref替换为数组的名称,这在符号意义上是这样做的:$array[$i]。因此,第一个$符号是数组元素的符号,第二个$是持有引用的标量元素的符号。

票数 4
EN

Stack Overflow用户

发布于 2013-04-26 03:34:35

我的perl有点生疏了,但是$ always意味着下面是一个标量的名称。箭头操作符(->)是一个非常不同的东西。这意味着取消对名称和的引用,然后应用以下操作符。以下是来自perlref(1)的示例

由于能够省略$$x的简单情况下的花括号,人们经常错误地将解引用符号视为正确的运算符,并想知道它们的优先级。但是,如果它们是,您可以使用圆括号而不是大括号。事实并非如此。考虑下面的区别;case 0是case 1的速记版本,而不是case 2:

$$hashref{"KEY"} = "VALUE";# CASE 0 ${$hashref}{"KEY"} = "VALUE";# CASE 1 ${$hashref{"KEY"}} = "VALUE";# CASE 2 ${$hashref->{"KEY"}} = "VALUE";# CASE 3

第二种情况也具有欺骗性,因为您访问的是一个名为%hashref的变量,而不是通过$hashref取消对它可能引用的散列的引用。这是第三种情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16223022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档