簡體   English   中英

在標量語境中展平Perl數組的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM