我最近开始学习 perl 并且有一个问题,我在 Internet 上找不到明确的答案。说我有这样的东西,
@arr = (1, 2, 3);
$scal = "@arr"
# $scal is now 123.
使用引号是展平数组以便每个元素都存储在标量值中的唯一方法吗?这似乎不太可能,但我还没有找到任何其他方法来做到这一点。提前致谢。
该join
函数通常用于“展平”列表。允许您在结果字符串中的每个元素之间指定所需的内容。
$scal = join(",", @arr);
# $scal is no "1,2,3"
在您的示例中,您在双引号字符串中插入一个数组。在这种情况下发生的事情是由 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 的任何特殊变量一样,最好将任何更改本地化在代码块中。
您也可以join
在没有任何分隔符的情况下使用
my $scalar = join( '' , @array ) ;
有不止一种方法可以做到这一点。
本着 TIMTOWDI 的精神:
my $scal;
$scal .= $_ foreach @arr;
阅读中的上下文部分perldata
。Perl 有两个主要的上下文:标量和列表。
例如:
@a = (1, 1, 1); # list context
print @a; # list context
$count = @a; # scalar context, returns the number of elements in @a
等等