[英]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"
是同一回事。
要評估哈希(2)中的標量值:
$hash{'foo'}
要在hashref(3)中訪問標量值:
$hash->{'foo'}
你要
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.