使用Perl的map函数与自定义函数

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或空字符串。我做错了什么?有没有好的惯用方式来做到这一点?(顺序执行显然很简单。)

3个回答

4

encode_entities函数默认不使用$_,所以您需要传递一个参数。将您的map语句更改为以下内容即可正常工作:

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

3

为了使问题中发布的代码能够正确运行,需要对encode_entities进行原型设计。快速查看源代码可以发现这一点。

正确的调用方法是:

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

1

由于 encode_entities 会原地替换 HTML 实体,因此您可能想在 @keys 的副本上使用 map

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

否则,foreach 更适合此任务:
encode_entities($_) for @keys;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接