Perl map函数输出分配给变量

时间:2013-01-04 17:31:03

标签: perl map

我想将Perl中map函数的输出连接到字符串变量。但是,如果我试试这个:

$body .= map {"$_\n"} sort(@{$hash{$server}->{VALID}});

$ body的值等于3而不是预期的

user1
user2
user3

如果我这样做:

print map {"$_\n"} sort(@{$hash{$server}->{VALID}});
它给了我想要的东西。

那么我该如何模仿打印地图功能并将其分配给body变量?

2 个答案:

答案 0 :(得分:5)

map用于将列表转换为另一个列表,这就是它返回的内容。这与print一起使用,因为print函数采用一个列表,并以$,(输出字段分隔符)的值分隔输出它们。

如果要将列表一起加入字符串,则必须使用join

$body .= join "\n", sort(@{$hash{$server}->{VALID}});

答案 1 :(得分:4)

print连接map返回的数组,将项目与值$,交错。 因此,您需要此模拟print行为:

$body .= join $,, map {"$_\n"} sort(@{$hash{$server}->{VALID}});

只要您关注print,另一个有效的可能性是:

print "$_\n" for sort(@{$hash{$server}->{VALID}});

或者,启用Perl v5.10功能say,只需:

say for sort(@{$hash{$server}->{VALID}});

推断连接:

$body .= "$_\n" for sort(@{$hash{$server}->{VALID}});