# Perl 小骆驼 3章笔记 列表和数组

print \$fred[0];
\$fred[1]="test";

\$rocks[0]="a";
\$rocks[1]="b";
\$end = \$#rocks;
\$number_of_rocks=\$end+1;
\$rocks[\$#rocks]="last one";

\$rocks[-1]="last one";

(1, 2, 3)
(1 .. 100)
(5 .. 1)空列表

qw简写：
qw(fred barney betty wilma dino)相当于
("fred", "barney", "betty", "wilma", "dino")

qw! fred barney !
qw[ fred barney ]

(\$fred,\$barney,\$dino)=("flintstone","rubble",undef);

(\$fred,\$barney)=(\$barney,\$fred);

(\$rocks[0],\$rocks[1])=qw/talc mica/;

@rocks=qw/talc mica/;
@tiny=(); #空表
@giant=1..1e5;  #包含100，000个元素
@stuff=(@giant,undef,@giant); #包含200，001个元素的表

pop将数组的最后一个元素取出并返回。
@array=5..9;
\$fred=pop(@array); #fred=9， @array现在为(5,6,7,8)
pop @array; #@array现在为（5，6，7）,8被丢弃

push将一个元素加到数组末尾
push(@array, 0);
push @array, 8;
push @array, 1..10;
@others=qw/9 0 2 1 0/;
push @array, @others;

unshift和shift对一个数组的开头进行操作。
@array=qw# dino fred barney#;
\$m=shift(@array); #\$m为"dino", @array为("fred","barney")
shift @array;
unshift(@array, 5);
unshift @array, 4;  #@array为（4，5）；
@others=1..3;
unshift @array,@others; #@array 为(1,2,3,4,5)

\$email="fred\@bedrock.edu";

\$fred="right";
print "this is \$fred[3]\n";
print "this is \${fred}[3]\n";
print "this is \$fred"."[3]\n";
print "this is \$fred\[3]\n";

this is wrong
this is right[3]
this is right[3]
this is right[3]

foreach控制结构：
foreach \$rock(qw/bedrock slate lava/) {
print "one rock is \$rock.\n";
}

@rocks=qw/a b c/;
\$rock="test";
print "\$rock\n";
print "@rocks\n";

foreach \$rock(@rocks) {
\$rock=\$rock."o";
}

print "\$rock\n";
print "@rocks\n";

test
a b c
test
ao bo co

foreach (1..10) {
print "\$_\n";
}

\$_="test";
print;

reverse将列表和数组反转
@fred=6..10;
@barney=rever(@fred);
@wilma=reverse 6 .. 10;
@fred=reverse @fred;

sort排序：大写排在小写前，数字在字符前

@people=qw/fred barney betty/;
@sorted=sort @people;    列表上下文:barney betty fred
\$number=42+@people;   标量上下文 42+3= 45

@backwards=reverse qw/yabba dabba doo/;  返回doo, dabba, yabba

@wilma=undef;一个元素(undef)
@betty=();空数组，无元素

scalar将列表转成标量
print @people, scalar @people;

。对列表，要以ctrl+z来表明结尾，回车。
@lines=;
foreach (@lines) {
print \$_."\n";
}
\$line=;
print \$line;

chomp(@lines=);

• 博文量
80
• 访问量
192324