use 5.016;
use Data::Dumper;
my @var = (11, 22, 33);
# I think this is the TYPICAL use
say Dumper $var[1]; # output: 22
$var[1] = 88;
say Dumper $var[1]; # output: 88
# What's the difference?
say Dumper @var[1]; # output: 88
@var[1] = 99;
say Dumper @var[1]; # output: 99
Run Code Online (Sandbox Code Playgroud)
很长一段时间,我想如果我想访问数组中的一项,我只能使用$var[i](因为每本书都是这样写的)。
但是,最近我发现我@var[i]也可以使用它来访问该项目。
经过一番研究,我发现它似乎@var[i]是一种叫做切片的东西。
$var[1]和 和有什么区别@var[1]?如果我只用作@var[i]正确的值,是@var[i]和$var[i]一样吗?
如果变量携带单个值,那么它是一个标量,并且需要一个$. 如此严格
$ary[0]
Run Code Online (Sandbox Code Playgroud)
对于前导$,如果其中有表达式,[]则在标量上下文中进行计算。
如果它是多值量,则变量以 a 开头@(或%对于关联数组),就像提到的切片一样
@ary[0,-1], @ary[2..5]
Run Code Online (Sandbox Code Playgroud)
其中[]需要一个返回整数列表的表达式。该表达式在列表上下文中进行计算。
对于单个索引,可以容忍使用@(它有效),但它会引起警告
Scalar value @ary[0] better written as $ary[0]
Run Code Online (Sandbox Code Playgroud)
不要那样做。如果运行时中的表达式[]碰巧返回单个值,则不会发出带有前导 的警告@。如果表达式旨在返回单个值,那么该数量显然是一个标量,因此请使用前导$。
现在Dumper图书馆所做的是Dumper设计决策......
一个例外是新的后缀取消引用语法,
$arrayref->@*
$hashref->%*
Run Code Online (Sandbox Code Playgroud)
其中产生列表的术语以$。请参阅文档。传统上我们将其写为
@{ $arrayref }
Run Code Online (Sandbox Code Playgroud)
其中表达式{}需要返回数组引用。在这种情况下,内部有一个简单的标量变量,也可以写
@$arrayref
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |