第三章 lists和arrays
已有 1010 次阅读|
2008-9-27 13:40
|个人分类:PERL
SOURCE HTML: http://socvista.com/bbs/redirect.php?fid=71&tid=901&goto=nextnewset
16:07 第三章 lists和arrays
标量是单数的,而list和array就是复数的。这个概念比较好理解。list和array其实是一个事物的两种形式,list指的是数据,而array指的是相应的变量。比如$array_name = list
16:10
存取array中元素的办法:$array_name[index]。这个index从0开始。
16:13
Perl太搞了,竟然会有这样的特殊的index使用方法。列举如下
$#array_name:得到array的最后一个元素的Index,比如0-99时,得到99
$array_name[-1]:得到倒数第一个元素
$array_name[-2]:得到倒数第二个元素
$array_name[-99]:得到倒数第99个元素
16:17
list的表达方法:各个元素用逗号分隔;可以使用变量作为元素;支持连续数据用..简化表达。常用实例:
(1,2,3)
(1..100)
($m,$n)
10:03
无需双引号快速产生word的方法:qw。所谓quoted words。用法:
qw( word1 word2 word3 word4);
这个语句产生一个字符串list。("word1", "word2", "word3", "word4")
10:06
perl的一大特点就是delimitor可以自由定义,Perl会自动推断识别。比如
qw( word1 word2 )
qw! word1 word2 !
qw# word1 word2#
功能都是一样的。
17:30
赋值方法
变量的赋值方法,择要介绍几个:
($var1, $var2) = ("value1", undef);
($fred, $barney) = ($barney, $fred); # 交换变量值
list的赋值方法
@giant = 1..1e5; # 100,000 个元素
@rocks = qw/ bedrock slate lava /;
17:40
pop操作将array的最后一个元素取出
@array = 5..9;
$fred = pop(@array); # $fred 得到9,@array 变成5..8
$barney = pop(@array); # $barney 得到8,@array 变成5..7
pop @array; # @array 变成5..6
17:45
push操作将一个数据压入到array的最后位置,是和pop相反的操作。
push操作一次可以压入多个数据。
push @array, 1..10;
17:50
shift / unshift操作和 pop / push操作的不同之处在于:它们是从start of the array处开始处理数据。
shift - pop :取出数据(从start - 从end)
unshift - push:存入数据(从start - 从end)
17:55
将array插入到字符串里。
print "quartz @rocks limestone";
18:05
foreach遍历整个list。
@rocks = qw/bedrock slate lava/;
print "@rocks" . "\n";
foreach $rock (@rocks) { $rock = "\t$rock\n";}
print "@rocks\n";
观察运行结果可以发现,使用foreach获得的每个element不是一个拷贝,而是真实的list元素,也就是说处理会影响到原来的List。切记!
18:10
使用默认变量:$_
情况一:作为控制变量
foreach (1..10) { print "I can count to $_!\n" ;}
情况二:作为打印的字符串
$_ = "hello world!\n"
print;
17:30
赋值方法
变量的赋值方法,择要介绍几个:
($var1, $var2) = ("value1", undef);
($fred, $barney) = ($barney, $fred); # 交换变量值
list的赋值方法
@giant = 1..1e5; # 100,000 个元素
@rocks = qw/ bedrock slate lava /;
17:40
pop操作将array的最后一个元素取出
@array = 5..9;
$fred = pop(@array); # $fred 得到9,@array 变成5..8
$barney = pop(@array); # $barney 得到8,@array 变成5..7
pop @array; # @array 变成5..6
17:45
push操作将一个数据压入到array的最后位置,是和pop相反的操作。
push操作一次可以压入多个数据。
push @array, 1..10;
17:50
shift / unshift操作和 pop / push操作的不同之处在于:它们是从start of the array处开始处理数据。
shift - pop :取出数据(从start - 从end)
unshift - push:存入数据(从start - 从end)
17:55
将array插入到字符串里。
print "quartz @rocks limestone";
18:05
foreach遍历整个list。
@rocks = qw/bedrock slate lava/;
print "@rocks" . "\n";
foreach $rock (@rocks) { $rock = "\t$rock\n";}
print "@rocks\n";
观察运行结果可以发现,使用foreach获得的每个element不是一个拷贝,而是真实的list元素,也就是说处理会影响到原来的List。切记!
18:10
使用默认变量:$_
情况一:作为控制变量
foreach (1..10) { print "I can count to $_!\n" ;}
情况二:作为打印的字符串
$_ = "hello world!\n"
print;
18:20
Reverse操作符。该符号返回List的倒序list。
@fred = 6..10;
@fred = reverse( @fred );
注意:reverse操作不修改输入的List,而是将结果体现在返回值处。所以
reverse @fred;# 这个语句没有任何意义,不会改变@fred
@fred = reverse @fred;#这个才有意义
18:25
sort操作符。该符号返回List的排序结果,排序按照ASCII字符顺序进行,因此对于数字排序会出现混乱。
@fred = qw/ bedrock slate rubble granite /;
@fred = sort( @fred ); # 得到的结果是 b/g/r/s顺序
注意:sort操作不修改输入的List,而是将结果体现在返回值处。所以
sort @fred;# 这个语句没有任何意义,不会改变@fred
@fred = sort @fred;#这个才有意义
18:30 -- 本书最重要 --
标量与矢量环境
在Perl里面,同样的一个变量其取值可以根据环境而不同。比如
@people = qw/ fred barney betty/;
@sorted = sort @people; # @people作为list处理
$number = 42+@people; # @people作为数字3处理
19:00
强制scalar环境。
@rocks = qw/ talc quartz jade obsidian/
print "I have @rocks"; #打印出四种rock的名称。
print "I have ", scalar @rocks, "rocks!"; #打印出数字4
19:05
用list环境来接收键盘的多行输入。
方法:@lines = <STDIN>;
处理掉回车方法:chomp(@lines = <STDIN>)
关于结束符号,UNIX系列是 Ctrl-D。windows系列是Ctrl-Z。或者自己试一下看看,有否其他。
19:10
发现用list环境接收多行输入时,在windows下,正确的方法是:每行都用回车结束,然后最后一行摁下Ctrl-Z后再回车就好了。试试下面代码。
chomp(@lines = <STDIN>);
foreach (@lines){
print "$_\t";
}