我是Perl的新手.我写了一个代码片段来访问数组元素并将其打印到控制台:
use strict;
use warnings;
my @array1 = ('20020701 00000', 'Sending Mail in Perl', 'Philip Yuson');
my @array2 = ('20020601', 'Manipulating Dates in Perl', 'Philip Yuson');
my @array3 = ('20020501', 'GUI Application for CVS', 'Philip Yuson');
my @main = (\@array1, \@array2, \@array3);
my $a = $main[0];
print @$a;
print @$a . "pdf";
Run Code Online (Sandbox Code Playgroud)
第一次印刷:
20020701 00000Sending Mail in PerlPhilip Yuson
但为什么第二次打印输出呢?
3pdf
我需要输出像
20020701 00000Sending Mail in PerlPhilip Yusonpdf
我不知道为什么它3pdf
会让我被迫离开这个.任何帮助是极大的赞赏.
小智 14
3是数组中元素的数量.将.
迫使该阵列到标量上下文,那么你得到的元素,而不是数组内容的数量.你可以用
print "@$a pdf";
Run Code Online (Sandbox Code Playgroud)
要么
print @$a , "pdf";
Run Code Online (Sandbox Code Playgroud)
取决于您想要的输出类型.
zou*_*oul 12
数组是Perl的一部分,它根据"上下文"采取不同的行为,这是Perl编程中一个非常重要的概念.考虑一下:
my @fruits = qw/apples pears bananas/;
my $items = @fruits;
Run Code Online (Sandbox Code Playgroud)
在第二行你分配一个标量(⇒这里我们有一些上下文),但在右边你有一个数组.我们说这里的数组用于标量上下文,而在标量上下文中,数组的值是其项的数量.
现在你的问题是:当你只是打印数组时,没有太大的魔力.但是当您尝试使用.
运算符将字符串附加到数组时,您将在标量上下文中使用该数组.这意味着数组计算其3
附加到的项目()的数量pdf
.
明白了吗?您应该在"Perl上下文"上添加一些内容,这将使Perl编程变得更加容易.
这是一个背景问题.在Perl中,值的数据类型只是评估的一部分; 另一半是使用值的上下文.
您可能知道,有三种内置数据类型:标量,数组和散列.在这些数据类型之间也可以进行某种程度的隐式转换.
还有两个主要的上下文:列表和标量.数组和散列都可以在列表上下文中不进行转换; 标量值在标量上下文中不会发生变化.
运算符的行为可以取决于它运行的上下文.如果运算符需要特定的上下文,并且Perl能够隐式地将值转换为与该上下文匹配的内容,那么它将会.在将数组和关联数组转换为整数的情况下,得到的是数组的"基数",它包含的元素数.
在上面的示例中,@$a
计算输入为数组的数据.然而,该故事的另一半是运营商运营的环境.
.阅读perldoc perlop,它说明如下:
二进制
.
连接两个字符串.
好吧,字符串是标量值,因此我们需要将数组@$a
转换为在标量上下文中有效,并且这样做可以获得数组的基数.@$a
包含3个东西,所以这会计算标量值3
,然后将其转换为字符串,以便.
操作员可以发挥其魔力.
希望这有一定道理.