[英]In Perl, what is the difference between @array[1] and $array[1]?
[英]What is the difference between {} and ->{} in Perl?
因此,如果我有一些数据 object 并且我想访问该 object 元素内部的内容
有什么区别
$Data{isEnabled})
$Data->{isEnabled}
我的数据基本上是这样的
for my $characterData (@{$AllCharacters->{'characters'}}) {
$Data{isEnabled})
$Data->{isEnabled}
我想访问我的 characterData 的某些元素,但我不确定何时使用
$Data{isEnabled})
对比
$Data->{isEnabled}
例如,为什么第一次打印工作但第二次失败?
use strict;
use warnings;
my %info = (NAME => "John", HOST => "Local", PORT => 80);
print $info{PORT};
print $info->{PORT};
第一个表达式访问 hash 中的键:
my %data = (is_enabled => 1);
print $data{is_enabled}), "\n";
在第二个表达式中, data
不是 hash,而是 *hash 引用。 它通常会被声明为:
my $data = { is_enabled => 1 };
由于这是一个引用,我们需要使用解引用运算符 ( ->
) 来访问 hash 内容:
print $data->{is_enabled}, "\n";
如果您正在遍历哈希数组,如您的代码所示,那么每个元素都是 hash 引用。 您需要使用第二种语法:
my @all_data = ( { is_enabled => 1 }, { is_enabled => 0 } );
for my $data (@all_data) {
print $data->{is_enabled}, "\n";
}
您可以在perlref
文档页面中阅读有关参考的更多信息。
$Data->{isEnabled}
相当于
${ $Data }{isEnabled}
我更喜欢“箭头”表示法,但它更适合我的解释
$Data{isEnabled}
和
${ $Data }{isEnabled}
在第一种情况下( $Data{isEnabled}
),我们正在访问 hash %Data
的元素。
在第二种情况下,我们似乎也有一个 hash 查找,但我们有一个块( { $Data }
),通常需要一个名称。 它确实是一个 hash 查找,但我们访问的是引用的 hash,而不是访问命名的 hash。 该块(或->
左侧的表达式)应返回对程序应访问的 hash 的引用。
引用是一种通过变量在 memory 中的位置而不是名称来引用变量的方法。 考虑以下示例:
my $ref;
if (condition()) {
$ref = \%hash1;
} else {
$ref = \%hash2;
}
say $ref->{id};
这将根据condition()
是否返回真值来打印$hash1{id}
或$hash2{id}
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.