map(encode_entities,@ _)似乎不起作用

时间:2018-03-20 19:13:36

标签: perl cpan higher-order-functions

map(encode_entities, @_)似乎不起作用,其中函数来自HTML::Entities。我可以解决它(见下文),但是有一种不那么丑陋的方式吗?有人可以解释发生了什么 - 我的想法中是否存在概念错误?

use HTML::Entities;

sub foo {
    my @list = map(encode_entities, @_);
    return @list;
}

sub bar {
    my @list = @_;
    my $n = scalar @list;
    for my $k (0..$n-1) {
        $list[$k] = encode_entities($list[$k]);
    }
    return @list;
}

my @test = ('1 < 2', 'Hello world!');
print join("\n", bar(@test)); # prints the two lines, encoded as expected
print join("\n", foo(@test)); # undefined, gives "Use of uninitialized value..." error

1 个答案:

答案 0 :(得分:4)

没有理由假设除了Perl运算符之外的任何东西都会使用$_作为默认参数:必须小心写入以表现那样

您需要做的就是使用特定参数

来调用encode_entities

试试这个

sub baz {
    map encode_entities($_), @_;
}

您可能会觉得不需要单独的子程序定义