2011-08-15 61 views
3

地圖我有它運行無差錯的Perl腳本,已(跳過許多不相關的線)使用Perl的自定義功能

use HTML::Entities; 
my @keys = ('ID', 'first', 'last'); # data is not actually constant 
my @encodedKeys = map(encode_entities, @keys); 

。但是,當我嘗試訪問數組中的值,我得到的錯誤:

Use of uninitialized value $encodedKeys[0] in join or string at myfile.pl line 48. 

如果我刪除的映射代碼工作正常 - 也就是說,該變量不爲空或空字符串。我究竟做錯了什麼?有沒有一個很好的慣用方式來做到這一點? (這顯然是微不足道的順序做。)

回答

3

的代碼,張貼在這個問題才能正常工作,encode_entities需要進行原型。快速瀏覽source code表明情況並非如此。

正確的方法來調用它是:

my @encodedKeys = map { encode_entities($_) } @keys; 
4

encode_entities功能默認不使用$_,所以你需要通過它的參數。改變你的map語句下面的工作:

my @encodedKeys = map {encode_entities $_} @keys 
1

由於encode_entities取代HTML實體就地,你可能要對@keys副本使用map

my @encodedKeys = map encode_entities($_), @{[ @keys ]}; 

否則,foreach更適合該任務:

encode_entities($_) for @keys;