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.

如果我删除映射,代码可以正常工作——也就是说,变量不是空字符串或空字符串。我究竟做错了什么?有没有一种很好的惯用方法来做到这一点?(按顺序进行显然是微不足道的。)

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 回答