values HASH
values ARRAY

在清單內容中,傳回一個清單,其中包含命名雜湊的所有值。僅在 Perl 5.12 或更新版本中,也會傳回陣列的值;在該版本之前,嘗試使用陣列引數會產生語法錯誤。在純量內容中,傳回值的數量。

雜湊項目以看似隨機的順序傳回。實際的隨機順序取決於指定的雜湊;對兩個雜湊執行完全相同的操作系列可能會產生不同的順序。任何插入雜湊的動作都可能變更順序,任何刪除的動作也一樣,但 eachkeys 傳回的最新金鑰可以刪除而不變更順序。只要指定的雜湊未修改,您就可以依賴 keysvalueseach 重複傳回彼此相同的順序。有關雜湊順序為何會隨機化的詳細資訊,請參閱 perlsec 中的「演算法複雜度攻擊」。除了這裡提供的保證之外,Perl 雜湊演算法和雜湊遍歷順序的確切詳細資料可能會在任何 Perl 版本中變更。繫結雜湊在項目插入和刪除時順序變更的行為可能與 Perl 雜湊不同。

作為副作用,呼叫 values 會在傳回值之前重設雜湊或陣列的內部反覆運算器(請參閱 each)。特別是,在無效內容中呼叫 values 會重設反覆運算器,而不會產生其他負擔。

除了重設反覆運算器之外,清單內容中的 values @array 與純粹的 @array 相同。(我們建議您為此使用無效內容 keys @array,但認為移除 values @array 所需的說明文件會比保留它還多。)

請注意,值不會複製,這表示修改值會修改雜湊的內容

for (values %hash)      { s/foo/bar/g }  # modifies %hash values
for (@hash{keys %hash}) { s/foo/bar/g }  # same

從 Perl 5.14 開始,一項實驗性功能允許 values 採用純量表示式。此實驗已被視為不成功,並已從 Perl 5.24 中移除。

為避免讓執行較早版本 Perl 的程式碼潛在使用者因不明的語法錯誤而感到困惑,請將此類事項放在檔案頂端,以表示您的程式碼只能在較新版本的 Perl 中執行

use v5.12;	# so keys/values/each work on arrays

另請參閱 keyseachsort