この関数print
は引数のリストを取り、それらの引数を出力します。
リストを明示的に渡すと、print
そのリストの要素がスペースなしで出力されても驚かないことを願っています。
print 'one', 'two', 'three'; # prints "onetwothree
に配列を渡すことprint
はまったく同じです。配列の内容はリストに変換されてから に渡されprint
ます。
my @array = qw(one two three);
print @array; # prints "onetwothree"
どちらの場合も、print
は 3 つの引数を受け取り、それらの引数を区切らずに出力します。
実際、Perl は特殊変数を使用して、引数間の出力$,
を制御します。print
デフォルトでは空の文字列ですが、変更できます。
次に、あなたの他のケースを考えてみましょう。
my @array = qw(one two three);
print "@array"; # prints "one two three"
この例ではいくつの引数がprint
取得されますか? まあ、それはただ一つですよね?単一の二重引用符で囲まれた文字列です。Perl が二重引用符で囲まれた文字列を検出すると、文字列内のすべての変数を展開します。その展開の結果は に渡されprint
、出力されます。したがって、Perl が二重引用符で囲まれた配列をどのように展開するかを調べる必要があります。これは、 perldataのマニュアル ページで定義されています。
配列補間
配列とスライスは、要素を $" 変数 ("use English;" が指定されている場合は $LIST_SEPARATOR) で指定された区切り文字 (デフォルトではスペース) で結合することにより、二重引用符で囲まれた文字列に補間されます。
そのため、デフォルトでは、Perl は要素間にスペースを挿入することにより、配列を二重引用符で囲まれた文字列に補間します。の値を変更することで、その動作を変更できます$"
。
これら 2 つの例は同じように見えるかもしれませんが、実際には大きく異なります。