[英]Ways to Flatten A Perl Array in Scalar Context
我最近開始學習perl並且有一個問題,我在互聯網上找不到明確的答案。 說我有這樣的事情,
@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 ) ;
有不止一種方法可以做到這一點。
本着TIMTOWTDI的精神:
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
等等
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.