使用Perl';具有自定义函数的s映射

使用Perl';具有自定义函数的s映射,perl,higher-order-functions,Perl,Higher Order Functions,我有一个Perl脚本(跳过许多不相关的行) 它运行无误。但当我尝试访问数组中的值时,会出现错误: Use of uninitialized value $encodedKeys[0] in join or string at myfile.pl line 48. 如果删除映射,代码将正常工作——也就是说,变量不是null或空字符串。我做错了什么?有没有一个好的惯用方法?(按顺序执行显然很简单。)默认情况下,encode\u entities函数不使用$\u,因此需要向其传递一个参数。将map语

我有一个Perl脚本(跳过许多不相关的行)

它运行无误。但当我尝试访问数组中的值时,会出现错误:

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

如果删除映射,代码将正常工作——也就是说,变量不是null或空字符串。我做错了什么?有没有一个好的惯用方法?(按顺序执行显然很简单。)

默认情况下,
encode\u entities
函数不使用
$\u
,因此需要向其传递一个参数。将
map
语句更改为以下内容将起作用:

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

要使代码如问题中所述正常工作,
encode\u实体
需要原型化。快速浏览一下这些数据就会发现情况并非如此

正确的称呼方式是:

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

由于
encode_entities
替换了HTML实体,您可能需要在
@keys
的副本上使用
map

 my @encodedKeys = map encode_entities($_), @{[ @keys ]};
否则,
foreach
更适合此任务:

encode_entities($_) for @keys;
encode_entities($_) for @keys;