2016-01-14 17 views
0

我正在查看是否有perl速記,似乎有總是是一個perl速記,如果定義了值則返回。我在考慮一些常見的情況,我需要檢查一些散列以查看是否存在某些內容,如果存在則返回,否則返回值。我可以做這樣的事情:如果定義了perl是否有返回語法?

$element = %seen_elements{$key}; 

return $element if defined $element; 

#element doesn't exist so make it 
return generate_element($key, $seen_elements); 

有沒有第二行的簡寫,避免我不得不兩次引用元素?大多數語言我不會問,但是在perl中有太多的語法糖,我很好奇,如果他們已經爲這樣一個小但常見的用例做了一個。

+1

您是否意識到您通常不必顯式創建散列元素?根據散列應該包含的內容,你可能只能寫'return $ seen_elements {$ key} ++' – Borodin

+0

或者'return $ seen_elements {$ key} // = 1' – Borodin

回答

4

是的,那種。您可以使用//,logical defined or

sub foo { 
    return $seen_elements{$key} // generate_element($key, $seen_elements); 
} 

這東西就像||(這是),但試驗definedness而不是truethiness,所以它會返回一個空字符串,但不undef

+0

'//'可用於Perl 5.10.0及更高版本。 – ThisSuitIsBlackNot

+0

這應該是'\%seen_elements',但我意識到OP的代碼很奇怪 – Borodin

+0

@Borodin我要編輯告訴OP,第一行中的'%seen_elements'是錯誤的,但我甚至沒有看到'$ seen_elements'被傳遞。但無論如何,自從我寫這篇文章後,我看到了重複的投票並敲定了它,我應該刪掉這個答案。 – simbabque

相關問題