1

「印刷」機能の動作と混同しています。以下は私のコードです:-

$var1 = "VARIBLE";
@arr = ();
push (@arr,$var1);

そして、上記のコードに印刷機能を追加すると、

print @arr;

出力として「VARIBLE」を提供します。しかし、上の行を下の行に置き換えると、

print @arr."\n";

出力として「1」を出します。誰かが実際に何が起こっているのか教えてもらえますか?

4

3 に答える 3

4

スカラー コンテキストの配列は、配列内の要素の数を示します。

print scalar @arr; #result is one for your array.

scalar例に示すように、スカラー コンテキストはキーワードで明示的に指定できます。ただし、操作が単一の値を必要とする場合は常に、スカラー コンテキストも発生します。例えば:

#A numeric comparison requires a single value, so this is scalar context.
if (@arr > 0) { print "array has elements" }

文字列の連結は、当然のことながら の両側に 1 つの値を必要とする操作であるため、.スカラー コンテキストが作成され、配列のサイズが取得されます。

あなたの場合の最も簡単な解決策は、代わりにコンマを使用することです:

print @arr,"\n";

print引数のリストを受け入れ、それらすべてを出力します。これが、print @arrそもそも機能する理由です。コンマで別の用語を追加することにより、出力される引数のリストにもう 1 つ追加するだけです。

于 2013-04-09T06:38:20.593 に答える
4

と連結 @arrしているためです\n@arrこれは基本的に、別のスカラーに連結できるようにスカラーとして扱いたいということです1。この場合、配列には 1 つの要素があるためです。コンテキストが変数の解釈に与える影響の詳細については、こちらを参照してください。

おそらくあなたが望むのは:

print @arr, "\n";
于 2013-04-09T06:34:55.520 に答える
1

前の回答が言うように、スカラーと配列のコンテキストが原因で異なります。また、あなたにとって興味深いかもしれない 3 番目の文があります。

my @array = qw(one two three);
print "@array", "\n";  #<-- observe the "" quotes;
#prints: one two three

print @array, "\n";  #<-- without quotes;
#prints: onetwothree

これは、二重引用符内の変数の文字列補間が原因です。配列補間は、特別な perl 変数の内容によってアイテムを分離します$"(デフォルトでは、この変数の内容は空白です)。補間がない場合、perl は配列の内容をセパレータなしで出力します。

$"印刷時に文字列を補間する方法を変更できます。例:

{
   local $" = '-';
   print "@array", "\n";
   #prints: one-two-three
}
于 2013-04-09T06:53:28.280 に答える