2011-08-15 14 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. 

正常に動作します - つまり、変数がnullまたは空の文字列ではありません。私は間違って何をしていますか?これを行うには良い慣用方法がありますか? (それは明らかに逐次行うのは簡単です)

答えて

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; 
関連する問題