22

私は最近 perl の学習を始めましたが、インターネット上で明確な答えが見つからないという質問があります。私はこのようなものを持っていると言う、

@arr = (1, 2, 3);
$scal = "@arr"
# $scal is now 123.

各要素がスカラー値に格納されるように配列を平坦化する唯一の方法は引用符の使用ですか? ありそうにないようですが、これを行う他の方法は見つかりませんでした。前もって感謝します。

4

5 に答える 5

44

このjoin関数は通常、リストを「フラット化」するために使用されます。結果の文字列の各要素の間に必要なものを指定できます。

$scal = join(",", @arr);
# $scal is no "1,2,3"
于 2012-04-20T10:53:04.997 に答える
18

あなたの例では、二重引用符で囲まれた文字列で配列を補間しています。そのような状況で何が起こるかは、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 の特殊変数の場合と同様に、コード ブロック内の変更をローカライズすることが常に最善です。

于 2012-04-20T12:56:01.520 に答える
6

joinセパレーターなしで使用することもできます

my $scalar = join( '' , @array ) ;

それを行う方法は複数あります。

于 2012-04-20T10:52:57.797 に答える
5

TIMTOWTDIの精神で:

my $scal;
$scal .= $_ foreach @arr;
于 2012-04-20T10:58:01.873 に答える
-2

のセクションコンテキストperldata読んでください。Perlには、スカラーとリストという2つの主要なコンテキストがあります。

例えば:

@a = (1, 1, 1);   # list context
print @a;         # list context
$count = @a;      # scalar context, returns the number of elements in @a

于 2012-04-20T10:54:36.623 に答える