perl 中的 print @array 和 print "@array" 有什么区别?

what is the difference between print @array and print "@array" in perl?

例如考虑以下代码:

@array=(1..10);
print @array;
print "@array";

The output is as follows:
12345678910
1 2 3 4 5 6 7 8 9 10

这是一道关于字符串转换和插值的题。在 perl 中,"' 的处理方式不同,因为要求 perl 插入字符串中的任何变量。

这就是为什么:

my $str = "fish";
print "This is a $str\n";

有效。 (用单引号,它不会)。但是对于不是字符串的东西,perl 应用一些转换规则。对于大多数情况来说非常基本——一个数值被转换成等效的字符串(以 10 为基数)。所以:

my $num = 10;
print "The number is $num\n"; 

"just works" 而不是强迫您使用 printf/sprintf 将数值格式转换为适当的表示形式。

所以你得到第一个结果的原因是 print 接受了一个参数列表。

所以 print @array 实际上是 print 1,2,3,4,5,6,7,8,9,10;

这给了你结果,因为你没有为你的 print 指定分隔符。 (您可以通过设置 $, - 见下文)

然而 "@array" 在明确字​​符串化的上下文中使用 @array,因此首先它解包数组,然后 space 将其分开。

此行为由特殊变量 $" 控制。您可以在 perlvar

中阅读相关内容
$" = ":";
print "@array";

另请参阅:Interpolating Arrays into Strings

您还可以使用 'tell' 打印来分隔它得到的值,使用 $,。默认情况下,它没有设置(例如 undef - 另见 perlvar) - 所以你得到你的第一个行为。

但你可以:

$, = ",";
print @array;