[英]How can I update a hash value using a hash reference in Perl?
有沒有辦法使用指向散列值的散列引用來更新散列中的值?
我的哈希輸出如下所示:
'Alternate' => {
'free' => '27.52',
'primary' => 'false',
'used' => '0.01',
'name' => '/mydir/journal2',
'size' => '50.00'
},
'Primary' => {
'free' => '60.57',
'primary' => 'true',
'used' => '0.06',
'name' => '/mydir/journal',
'size' => '64.00'
}
};
我嘗試在哈希中創建對“used”屬性的哈希引用,並嘗試更新該值:
$hash_ref = \%hash->{"Primary"}->{used};
$hash_ref = "99%";
print $$hash_ref, "\n";
這會更改散列的值,但我得到“在 X 行不推薦使用散列作為參考”。 我想知道我正在嘗試做的事情是否可行以及我做錯了什么。
...
'Primary' => {
'free' => '60.57',
'primary' => 'true',
'used' => '0.06',
'name' => '/mydir/journal',
'size' => '64.00'
}
...
嘗試繞過棄用問題,這樣做:
...
my $hash_ref = $hash{'Primary'}; # if you declared `%hash = ( .. );`
# Or my $hash_ref = $hash->{'Primary'}; if you declared `$hash = { .. };`
print $hash_ref->{used}; # Prints 0.06
$hash_ref->{used} = '0.07'; # Update
print $href->{used}; # Prints 0.07
...
如果您想了解更多信息,請參閱perldsc 。
您的失敗開始是因為您嘗試創建對標量的哈希引用。 這是一種毫無意義的目標,因為它們是不同的數據類型。 正如Filippo 已經證明的那樣,您已經將散列引用作為更大散列的值,因此您可以依賴它。
但是,如果您確實想創建對標量的引用,則只需編輯該值即可。 這是你的做法:
use strict;
use warnings;
my $h = {
'Alternate' => {
'free' => '27.52',
'primary' => 'false',
'used' => '0.01',
'name' => '/mydir/journal2',
'size' => '50.00',
},
'Primary' => {
'free' => '60.57',
'primary' => 'true',
'used' => '0.06',
'name' => '/mydir/journal',
'size' => '64.00',
}
};
my $primary = $h->{Primary};
print $primary->{used}, "\n"; # Outputs 0.06
my $usedref = \$h->{Primary}{used};
$$usedref = '0.07';
print $primary->{used}, "\n"; # Outputs 0.07
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.