访问引用数组的数组元素

ven*_*ich 3 perl

我是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编程变得更加容易.


Ed *_*rel 6

这是一个背景问题.在Perl中,值的数据类型只是评估的一部分; 另一半是使用值的上下文.

您可能知道,有三种内置数据类型:标量,数组和散列.在这些数据类型之间也可以进行某种程度的隐式转换.

还有两个主要的上下文:列表和标量.数组和散列都可以在列表上下文中不进行转换; 标量值在标量上下文中不会发生变化.

运算符的行为可以取决于它运行的上下文.如果运算符需要特定的上下文,并且Perl能够隐式地将值转换为与该上下文匹配的内容,那么它将会.在将数组和关联数组转换为整数的情况下,得到的是数组的"基数",它包含的元素数.

在上面的示例中,@$a计算输入为数组的数据.然而,该故事的另一半是运营商运营的环境..阅读perldoc perlop,它说明如下:

二进制.连接两个字符串.

好吧,字符串是标量值,因此我们需要将数组@$a转换为在标量上下文中有效,并且这样做可以获得数组的基数.@$a包含3个东西,所以这会计算标量值3,然后将其转换为字符串,以便.操作员可以发挥其魔力.

希望这有一定道理.

  • 没有"哈希上下文"这样的东西 - 或者那个问题的数组上下文(尽管有错误的`wantarray`函数).有标量上下文和列表上下文,以及一些像布尔上下文(标量的子集)的小摆动 (2认同)