Vam*_*ond 2 perl perl-data-structures
考虑以下代码,例如:
@array=(1..10);
print @array;
print "@array";
The output is as follows:
12345678910
1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
Sob*_*que 15
这是关于字符串转换和插值的问题.在perl中,"被区别对待',因为perl被要求插入字符串中的任何变量.
这就是为什么:
my $str = "fish";
print "This is a $str\n";
Run Code Online (Sandbox Code Playgroud)
作品.(用单引号,它不会).但是对于不是字符串的东西,perl应用了一些转换规则.对于大多数情况来说非常基本 - 数值变为等效的字符串(在基数10中).所以:
my $num = 10;
print "The number is $num\n";
Run Code Online (Sandbox Code Playgroud)
"只是工作"而不是强迫您使用printf/ sprintf格式化将数值转换为适当的表示.
因此,获得第一个结果的原因是print需要一个参数列表.
所以print @array实际上是print 1,2,3,4,5,6,7,8,9,10;.
这会给你结果,因为你没有为你指定一个分隔符print.(你可以通过设置来做到这一点$,- 见下文)
然而"@array",使用@array在一个显式字符串化上下文,因此首先将其解压缩阵列和空间分离它.
此行为由特殊变量控制$".你可以在这里读到这个perlvar
$" = ":";
print "@array";
Run Code Online (Sandbox Code Playgroud)
另请参见:将数组插入字符串
您还可以"告诉"print使用它来分隔它所获得的值$,.默认情况下,它没有设置(例如是undef - 另见perlvar) - 所以你得到了你的第一个行为.
但你可以:
$, = ",";
print @array;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
574 次 |
| 最近记录: |