标量与Perl中的列表上下文

标量与Perl中的列表上下文,第1张

概述我在O’Reilly的书中发现了一个有点奇怪的例子: @backwards = reverse qw/ yabba dabba doo /;print "list context: @backwards\n";$backward = reverse qw/ yabba dabba doo /;print "scalar1 context: $backward\n";$notbackward 我在O’Reilly的书中发现了一个有点奇怪的例子:

@backwards = reverse qw/ yabba dabba doo /;print "List context: @backwards\n";$backward = reverse qw/ yabba dabba doo /;print "scalar1 context: $backward\n";$notbackward = qw/ yabba dabba doo /;print "scalar2 context: $notbackward\n";print "print context: ",reverse qw/ yabba dabba doo /;print "\n";

输出是:

List context: doo dabba yabbascalar1 context: oodabbadabbayscalar2 context: dooprint context: doodabbayabba

我不明白的是scalar1上下文

这本书说“反向某事”给出了一个列表上下文,所以我猜qw / yabba dabba doo /被视为一个列表并反向qw / yabba dabba doo / as(‘doo’,’dabba’,’yabba’).

因此,$backward =暗示某事物是标量的东西,所以我期待结果’doo dabba yabba’,但它是不同的:’oodabbadabbay’.

我想,原因是因为无法直接将列表设置为标量.所以我做了scalar2测试:只打印列表中的最新项目.为什么?为什么不在scalar1测试?

标量测试输出如何工作?

解决方法 对于线:

$backward = reverse qw/ yabba dabba doo /;

你正在反向请求标量.反向的perldoc说:

In scalar context,concatenates the
elements of List and returns a string
value with all characters in the
opposite order.

所以它返回每个反转的字母.

对于
$notbackward = qw / yabba dabba doo /;
qw //的perldoc说:

Evaluates to a List of the words
extracted out of STRING,using
embedded whitespace as the word
delimiters. It can be understood as
being roughly equivalent to:

06001

the differences being that it generates a real List at
compile time,and in scalar context it
returns the last element in the List.

因此,请求标量只返回列表中的最后一项.

总结

以上是内存溢出为你收集整理的标量与Perl中的列表上下文全部内容,希望文章能够帮你解决标量与Perl中的列表上下文所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1226310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存