3

私は(多くの無関係な行をスキップする)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 または空の文字列ではありません。私は何を間違っていますか?これを行うための良い慣用的な方法はありますか? (順番に行うのは明らかに簡単です。)

4

3 に答える 3

4

このencode_entities関数はデフォルトでは使用しないため$_、引数を渡す必要があります。mapステートメントを次のように変更すると機能します。

my @encodedKeys = map {encode_entities $_} @keys
于 2011-08-15T21:06:36.897 に答える
3

質問に投稿されているようにコードが正しく機能するには、encode_entitiesプロトタイプを作成する必要があります。ソースコードをひと目見ると、そうではないことがわかります。

それを呼び出す正しい方法は次のとおりです。

my @encodedKeys = map { encode_entities( $_ ) } @keys;
于 2011-08-15T21:07:22.097 に答える
1

encode_entitiesは HTML エンティティをインプレースで置き換えるため、次mapのコピーで使用することをお勧めします@keys

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

それ以外の場合foreachは、次のタスクにより適しています。

encode_entities($_) for @keys;
于 2011-08-15T21:09:39.897 に答える