我有一个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或空字符串。我究竟做错了什么?有一个很好的惯用方法吗? (按顺序执行显然是微不足道的。)
答案 0 :(得分:4)
encode_entities
函数默认不使用$_
,因此您需要将参数传递给它。将map
语句更改为以下语句将起作用:
my @encodedKeys = map {encode_entities $_} @keys
答案 1 :(得分:3)
要使代码在问题中发布正常工作,encode_entities
需要进行原型设计。快速浏览source code表明情况并非如此。
调用它的正确方法是:
my @encodedKeys = map { encode_entities( $_ ) } @keys;
答案 2 :(得分:1)
由于encode_entities
替换HTML实体就地,您可能希望在map
的副本上使用@keys
:
my @encodedKeys = map encode_entities($_), @{[ @keys ]};
否则,foreach
更适合完成任务:
encode_entities($_) for @keys;