我搜索的SO問這個問題之前,我完全新的這一點,不知道如何處理這些錯誤。我的意思是Perl語言。哈希作爲參考被棄用
當我把這個
%name->{@id[$#id]} = $temp;
我得到的錯誤Using a hash as a reference is deprecated
我試圖
$name{@id[$#id]} = $temp
,但不能得到任何結果回來。
有什麼建議嗎?
我搜索的SO問這個問題之前,我完全新的這一點,不知道如何處理這些錯誤。我的意思是Perl語言。哈希作爲參考被棄用
當我把這個
%name->{@id[$#id]} = $temp;
我得到的錯誤Using a hash as a reference is deprecated
我試圖
$name{@id[$#id]} = $temp
,但不能得到任何結果回來。
有什麼建議嗎?
訪問散列%name
的元件正確的方法是$name{'key'}
。語法%name->{'key'}
在Perl v5.6中有效,但此後不推薦使用。
同樣,要訪問數組@id
的最後一個元素,您應該編寫$id[$#id]
或更簡單地說,$id[-1]
。
您的第二個版本應該可以正常工作,而您無法檢索該值具有不相關的原因。
寫
$name{$id[-1]} = 'test';
和
print $name{$id[-1]};
將顯示test
正確
如果你想從一個數組或哈希使用$一個項目。有關項目列表,請分別使用@和%。你使用@作爲引用返回一個列表,而不是perl可能被解釋爲散列的項目。
此代碼演示了您對數組散列的引用。
#!/usr/bin perl -w
my %these = ('first'=>101,
'second'=>102,
);
my @those = qw(first second);
print $these{$those[$#those]};
打印 '102'
%name->{...}
一向車。它沒有做它應該做的事情。因此,它現在會在您嘗試使用它時發出警告。正確的方法來索引哈希
$name{...}
因爲你已經相信了。
現在,你說
$name{@id[$#id]}
不起作用,但即便如此,這是因爲一個錯誤的代碼別的地方的。該代碼最肯定的作品
>perl -wE"@id = qw(a b c); %name = (a=>3, b=>4, c=>5); say $name{@id[$#id]};"
Scalar value @id[$#id] better written as $id[$#id] at -e line 1.
5
正如警告說,雖然適當的方式來索引數組不
@id[...]
它實際上
$id[...]
最後,獲取數組的最後一個元素的最簡單方法是使用索引-1
。這意味着你的代碼應該是
$name{ $id[-1] }
最流行的答案是隻是不取消引用,但這是不正確的。換言之,%$hash_ref->{$key}
和%$hash_ref{$key}
不可互換。前者需要訪問嵌套爲另一個散列引用中元素的散列引用。
對於很多衛星來說,它已經是嵌套哈希引用的常見位置。事實上,有幾個模塊解析數據並將其存儲在這種數據結構中。立即貶低沒有模塊更新的行爲並不是一件好事。有時我的數據被困在一個嵌套的散列中,唯一的辦法就是做類似的事情。
$new_hash_ref = $target_hash_ref->{$key1}
$new_hash_ref2 = $target_hash_ref->{$key2}
$new_hash_ref3 = $target_hash_ref->{$key3}
,因爲我不能
foreach my $i(keys(%$target_hash_ref)) {
foreach(%$target_hash_ref->{$i} {
#do stuff with $_
}
}
了。
是的,上面有點奇怪,但爲了避免以某種方式訪問數據結構而創建新的變量更糟糕。我錯過了什麼嗎?
什麼樣的變量是「名稱」?它在哪裏首先被初始化,它包含什麼樣的數據?如果不知道,不能幫助你。雖然,我會說 - >是解引用操作符,它只適用於包含引用的$標量,而不是%哈希,因此也是錯誤。 –
我通過執行'my%name;'初始化它在代碼的頂部# – Grigor
@Grigor嘗試'$ name {$ id [$#id]} = $ temp' – starbolin