簡體   English   中英

如何在Perl中引用哈希?

[英]How to reference a hash in Perl?

如果我有這樣的事情:

%hash = {foo => 'bar', foo1=>'bar1',};

要么

%hash = (foo => 'bar', foo1=>'bar1',);

要么

$hash = {foo => 'bar', foo1=>'bar1',};

要么

$hash = (foo => 'bar', foo1=>'bar1',);

以上代碼有何不同? 以及如何訪問它們的組件?

(...)排序優先級,而{...}創建哈希引用

%hash = {foo => 'bar', foo1=>'bar1',};

%hash分配單個值。 但是,為散列分配了一個偶數大小的鍵值對列表。 您的代碼將使用hashref的字符串化作為鍵( HASH(0x123ABC) ),並將undef用作值。 當您將非偶數列表分配給哈希變量時,請use warnings來告訴您。

%hash = (foo => 'bar', foo1=>'bar1',);

是正確的。 在列表上下文中評估RHS列表,並將其分配給哈希變量。 您可以訪問$hash{foo}類的條目。

$hash = {foo => 'bar', foo1=>'bar1',};

是正確的。 哈希引用被分配給標量變量。 您可以訪問$hash->{foo}類的元素。 請注意必須使用解除引用箭頭才能將hashref訪問與哈希訪問區分開(在同一范圍內,您可以同時將變量%hash$hash命名為)。

$hash = (foo => 'bar', foo1=>'bar1',);

在標量上下文中評估RHS上的列表,並將分配最后一個值。 所以$hash = "bar1"是同一回事。

  1. 將哈希引用分配給哈希。 這沒有道理。
  2. 將列表分配給哈希。 這通常是處理哈希的方式。
  3. 將散列引用分配給標量。 這通常是處理哈希引用的方式。
  4. 將列表分配給標量。 您最終將存儲最后一個值。

要評估哈希(2)中的標量值:

$hash{'foo'}

要在hashref(3)中訪問標量值:

$hash->{'foo'}

有關參考的更多信息,請參見perldoc perlref

你要

my %hash = ( key1 => 'value1', key2 => 'value2' );  # Hash

要么

my $hash = { key1 => 'value1', key2 => 'value2' };  # Reference to hash

當將一個列表分配給哈希表時,會將其視為鍵值對列表,因此初始化哈希表的正確方法是

my %hash = ( key1 => 'value1', key2 => 'value2' );

{ ... }

類似於

do { my %anon = ( ... ); \%anon }

它創建一個匿名哈希並返回對其的引用。 單個引用不是鍵-值對的列表,因此以下內容沒有意義:

my %hash = { ... };   # XXX

如果您確實想存儲對哈希的引用,則可以將其存儲在標量中。

my $hash = { ... };   # ok

那么,接下來的工作是什么呢?

my $hash = ( a => 'b', c => 'd' );

好,

a => 'b', c => 'd'

只是一種奇特的寫作方式

'a', 'b', 'c', 'd'

而且由於我們要分配給標量,所以賦值運算符的右側是在標量上下文中求值的。 標量上下文中的列表文字(例如'a', 'b', 'c', 'd' )在其最后一項中求值,因此

my $hash = ( a => 'b', c => 'd' );

手段

my $hash = 'd';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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