5
純學術問題,我看不到在這裏禁止它們的指令(,雖然沒有'學術'標籤,我可以找到)。來自函數hash的Perl散列片返回
如果我有一個現有的哈希像下面這樣,我可以分得一杯羹它如圖所示(?):
my %hash = (one=>1, two=>2, three=>3, four=>4);
my ($two, $four) = @hash{'two','four'};
有沒有辦法做到這一點,如果哈希是從一個實例函數返回喜歡這個?該工程
sub get_number_text
{
my %hash = (one=>1, two=>2, three=>3, four=>4);
return %hash;
}
一種方法是:
my ($two, $four) = @{ { get_number_text() } }{'two', 'four'};
據我瞭解,函數返回哈希鍵/值的列表,內{}創建一個匿名散列/ REF,並且@ {}因爲Perl知道ref是一個散列,所以使用引用將它「轉換」爲一個哈希切片的列表。 (我有點驚訝,最後一點工作,但更強大的Perl等)
但是,這是最明確的方式來寫在一個表達式中承認奇怪的訪問?
這不是因爲它知道ref是一個散列;這是一個句法的東西。 '@ {foo} {bar}'總是一個散列片段,並且總是希望foo是生成散列引用的代碼。 – ysth
@ysth在這裏發佈一個答案,問題將被關閉:) – gaussblurinc
沒有鑄造。 '@ {EXPR} {EXRP}'*是一個散列片。也許你的意思是解除引用? – ikegami