簡體   English   中英

Perl 中的 {} 和 ->{} 有什么區別?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM