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;
例如考虑以下代码:
@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;