我最近开始学习perl并且有一个问题,我在互联网上找不到明确的答案。说我有类似的东西,
@arr = (1, 2, 3);
$scal = "@arr"
# $scal is now 123.
是否使用引号来展平数组,以便每个元素都存储在标量值中?这似乎不太可能,但我还没有找到任何其他方法来做到这一点。提前谢谢。
答案 0 :(得分:38)
join
函数通常用于“展平”列表。允许您在结果字符串中指定每个元素之间的内容。
$scal = join(",", @arr);
# $scal is no "1,2,3"
答案 1 :(得分:17)
在您的示例中,您将在双引号字符串中插入数组。在这些情况下发生的事情是由Perl的$"
变量控制的。来自perldoc perlvar:
$ LIST_SEPARATOR
$“
当数组或数组切片内插到双引号字符串或类似的上下文(如/.../)时,其元素由此值分隔。默认是一个空格。例如,这个:
print "The array is: @array\n";
相当于:
print "The array is: " . join($", @array) . "\n";
助记符:在双引号上下文中工作。
$"
的默认值是空格。您显然可以更改$"
。
{
local $" = ':',
my @arr = (1, 2, 3);
my $scalar = "@arr"; # $scalar contains '1:2:3'
}
与Perl的任何特殊变量一样,最好定位代码块中的任何更改。
答案 2 :(得分:5)
你也可以在没有任何分隔符的情况下使用join
my $scalar = join( '' , @array ) ;
有多种方法可以做到。
答案 3 :(得分:5)
本着TIMTOWTDI的精神:
my $scal;
$scal .= $_ foreach @arr;
答案 4 :(得分:-2)
阅读section Context in perldata
。 Perl有两个主要的上下文:标量和列表。
例如:
@a = (1, 1, 1); # list context
print @a; # list context
$count = @a; # scalar context, returns the number of elements in @a
等