Chinaunix首页 | 论坛 | 博客
  • 博客访问: 343055
  • 博文数量: 61
  • 博客积分: 2451
  • 博客等级: 上尉
  • 技术积分: 650
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-06 21:24
文章分类

全部博文(61)

文章存档

2012年(1)

2011年(44)

2010年(16)

分类: LINUX

2011-06-03 13:17:04

关于自己在学习过程中的一些杂七杂八的东西(持续更新)^_^
1.关于perl表达式($temp -= 32) *= 5/9的解释
2.perl 怎么双引号,单引号等价结构
3.内置变量$"的解释
4.perl 中的here document
5.perl正则表达式在标量context和列表context下的返回值
6.数组与hash 切片
7.计算hash中键值对的个数

==》1.对于表达式($temp-=32)*=5/9的理解:以前没有看过类似的写法 根据优先级先将()中的先计算 $temp=$temp-32 再将得到的$temp进行如下计算$temp*5/9 最后赋给$temp 
  1. code:
  2. #!/usr/bin/perl
  3. use warnings;
  4. use 5.010;
  5. my $temp=50;
  6. ($temp -= 32) *= 5/9;
  7. print $temp ,"\n";
  8. output:
  9. 10
==》2.perl中单引号双引号等 一些等价写法
qx/command/ 中的$var 为被perl替换 而qx'command'中的$var 不会被替换 完全的传给shell处理

==》3.$"内置变量的解释
$" 是数组中元素的分隔符,默认是空格。通过下面代码就可以知道其具体含义。
  1. code:
  2. #!/usr/bin/perl
  3. use warnings;
  4. use English;
  5. use 5.010;
  6. my @test = qw(one two three);
  7. print "@test\n";
  8. $"=":";
  9. print "@test","\n";
  10. $LIST_SEPARATOR="--";
  11. print "@test","\n";
  12. 运行结果:
  13. one two three
  14. one:two:three
  15. one--two--three
如果要使用$LIST_SEPARATOR 这种比较直观的变量名,必须加上use English。

==》4.perl 中的here document
下面是测试代码及注释:
here document 一般用于cgi编程中输出大量html代码
  1. code:
  2. #!/usr/bin/perl
  3. use warnings;
  4. use 5.010;
  5. my $test="just test"; # 定义一个变量后面测试用
  6. print <
  7. # 开始第一个here document aa 是结束符 这里未加引号,注意最后要加上分号
  8. $test
  9. welcome to my web site!!
  10. aa 
  11. # 两个aa之间的文本是要输出的内容,注意这里由于在终结符不加引号的情况下可以进行变量替换的 看后面允许那个结果
  12. print "-" x 30,"\n";
  13. print <<'hello'; 
  14. # 第二个here document 开始 与前面不同的是这里的终结符加上了单引号 不进行变量替换
  15. $test
  16. welcome to my web site!!
  17. hello # 这里结束第二个 here document 从运行结果中可以看出未进行变量替换。
  18. print "-" x 30 ,"\n";
  19. print <<"" x 3; 
  20. # 第三个here document 开始 注意这里的结束符是空行,""代表空行 x 3 表示文本重#复3 次
  21. Hello word!
  22. print "-" x 30 ,"\n";
  23. print <<`exc` x 3; 
  24. #第四个here document 开始 反引号表示文本内容是命令,用于执行且必须是命令 不然会报错,这里x 3 的作用和上面说的一样 表示重复三次
  25. echo -n Today is:
  26. date
  27. exc 
  28. 运行结果:
  29. just test
  30. welcome to my web site!!
  31. ------------------------------
  32. $test
  33. welcome to my web site!!
  34. ------------------------------
  35. Hello word!
  36. Hello word!
  37. Hello word!
  38. ------------------------------
  39. Today is:2011年 06月 04日 星期六 10:58:08 CST
  40. Today is:2011年 06月 04日 星期六 10:58:08 CST
  41. Today is:2011年 06月 04日 星期六 10:58:08 CST
==》5. perl正则表达式的list context 和scalar context的会返回值
在标量上下文如果匹配成功返回1,匹配失败返回0
在list 上下文返回匹配的部分作为数组的元素 看下面代码:
  1. code:
  2. #!/usr/bin/perl
  3. use warnings;
  4. use strict;
  5. use Data::Dumper;
  6. use 5.010;
  7. my $string = "password=xyzzy verbose=9 score=0";
  8. my $char="avm=efg=abc";
  9. my @test=$char=~m/[a-z]+/g;
  10. print 'list:',"@test","\n";
  11. my %hash = $string =~ /(\w+)=(\w+)/g;
  12. #这里将获得的链表构造成一个hash
  13. my @h = $string =~ /(\w+)=(\w+)/g;
  14. print Dumper(\%hash);
  15. print "@h","\n";
  16. 运行结果:
  17. list:avm efg abc
  18. $VAR1 = {
  19. 'verbose' => '9',
  20. 'password' => 'xyzzy',
  21. 'score' => '0'
  22. };
  23. password xyzzy verbose 9 score 0

==》6.数组与hash切片 
通过切片可以取出数组或hash中某个特定的元素 下面是代码:
  1. code:
  2. #!/usr/bin/perl
  3. use warnings;
  4. use strict;
  5. use 5.010;
  6. my @tl=qw(one two three);
  7. my %th=(
  8.         one=>1,
  9.         two=>2,
  10.         three=>3,
  11. );
  12. my ($tl1,$tl2)=@tl[0,1];
  13. my ($th1,$th2)=@th{"one","two"};
  14. #注意这两种写法 hash切片前面是@ 不要写成% 因为返回的是一个列表 所以左边要在列#表上下文
  15. print '$tl1:',$tl1,"\n";
  16. print '$tl2:',$tl2,"\n";
  17. print '$th1:',$th1,"\n";
  18. print '$th2:',$th2,"\n";
  19. 运行结果:
  20. $tl1:one
  21. $tl2:two
  22. $th1:1
  23. $th2:2
==》7.计算hash中键值对的个数
  1. code:
  2. #!/usr/bin/perl
  3. use strict;
  4. use warnings;
  5. my %hash=(
  6.         one=>1,
  7.         two=>2,
  8.         there=>3,
  9.         four=>4,
  10.         five=>5,
  11. );
  12. print scalar(%hash),"\n";
  13. print 'The number of key:',scalar(keys %hash),"\n";#计算键值对个数
  14. output:
  15. 4/8
  16. The number of key:5
当你在标量环境里计算散列变量的数值的时候,它只有在散列包含任意键字/数值对时才返回真。如果散列里存在键字/数值对,返回的值是一个用斜线分隔的已用空间和分配的总空间的值组成的字串。这个特点可以用于检查 Perl 的(编译好的)散列算法在你的数据集里面性能是否太差。




阅读(2265) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

cinanine2011-07-24 15:20:51

^_^