[英]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.