我想将Perl中map
函数的输出连接到字符串变量。但是,如果我试试这个:
$body .= map {"$_\n"} sort(@{$hash{$server}->{VALID}});
$ body的值等于3而不是预期的
user1 user2 user3
如果我这样做:
print map {"$_\n"} sort(@{$hash{$server}->{VALID}});它给了我想要的东西。
那么我该如何模仿打印地图功能并将其分配给body变量?
答案 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}});