blue1025的个人空间 https://blog.eetop.cn/?6222 [收藏] [复制] [分享] [RSS]

日志

第三章 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";
}


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 14

    粉丝
  • 16

    好友
  • 20

    获赞
  • 23

    评论
  • 2840

    访问数
关闭

站长推荐 上一条 /2 下一条


手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 ) |网站地图

GMT+8, 2025-10-22 16:14 , Processed in 0.012895 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部