设为首页 收藏本站
查看: 963|回复: 0

[经验分享] perl自学笔记整理二

[复制链接]

尚未签到

发表于 2018-8-30 11:06:05 | 显示全部楼层 |阅读模式
  开篇:如果说perl世界里,标量指的是单数的话,那么复数指的就是列表和数组。
  列表指的是标量的有序集合;
  数组则指的是存储列表的变量;
  无论列表还是数组都可以包含无数多个元素。
  一)访问数组中的元素
  1) 访问数组中的元素
  例如:
  [root@localhost fuxi]# cat a1.pl
  #!/usr/bin/perl
  #a1
  $fred[0] = "yabba";        #将值yabba赋值给数组$fred的第零个元素$fred[0] ;
  $fred[1] = "dabba";
  $fred[2] = "doo";
  foreach(0..2) {
  print "$fred[$_]\n";
  }
  [root@localhost fuxi]# perl a1.pl
  yabba
  dabba
  doo
  $number = 2.7881;
  print $fred[$number - 1];     #结果和print $fred[1]相同。
  $blank = $fred[ 142_857 ];    #未使用的数组元素,会得到 undef 的结果
  $blanc = $mel;                        #未使用的标量 $mel, 也会得到 undef 的结果。
  2、特殊的数组索引值
  例如:
  $num = @fred;        #数组@fred中元素的个数为$num个,取数组中元素的总个数!!!
  $rocks[0] = 'bedrock';            #第一个元素
  $rocks[1] = 'slate';                    #第二个元素
  $rocks[2] = 'lava';                    #第三个元素
  $rocks[3] = 'crushed rock';    #第四个元素
  $rocks[99] = 'schist';                #第一百个元素,现在中间有95个 undef 元素
  $#rocks            #  表示数组中最后一个元素的索引值:99
  $rocks[-1]        # -1表示数组中的最后一个元素;
  $rocks[-2]         # -2表示中间的元素;
  $rocks[-3]        # -3表示第一个元素;
  3、列表直接量
  在圆括号中用逗号隔开的一系列值。
  例如:
  (1, 2, 3)
  (1, 2, 3,)            #相同的三个数字(末尾的逗号会被忽略)
  ("fred", 4.5)
  (1..100)        #100个整数构成的列表
  ( )            #空列表;零个元素
  (1..5)
  (1.7..5.9)
  (0, 2..6, 10, 12)        #与(0, 2, 3, 4, 5, 6, 10, 12)相等
  ("zhangsan", "lisi", "wangwu", "zhaoliu")
  4、qw简写
  qw(zhangsan lisi wangwu zhaoliu)
  qw!zhangsan lisi wangwu zhaoliu!
  qw/zhangsan lisi wangwu zhaoliu/
  qw"zhangsan lisi wangwu zhaoliu"
  qw#zhangsan lisi wangwu zhaoliu#
  qw$zhangsan lisi wangwu zhaoliu$
  qw%zhangsan lisi wangwu zhaoliu%
  注意:不管怎么说,对于qw引起来的内容,Perl都会将其当成单引号内的字符串来处理(所以,在qw构建的列表中,不能像双引号一样使用\n或$fred).其中的空白符会被抛弃。和单引号内的字符串一样,两个连续的反斜线,表示一个真实的反斜线
  5、列表的赋值
  ($fred, $barney, $dino) = ("flintstone", "rubble", undef )
  ($betty[0], $betty[1]) = ($betty[1], $betty[0]);        #互换两者的值
  ($fred, $barney) = qw;    #忽略掉末尾两个元素
  ($wilma, $dino) = qw[flintstone];    # $dino被设为undef
  @rocks = qw/ bedrock slate lava/;
  @tiny = ( );
  @giant = 1..1e5;
  @stuff = (@giant, undef, @gaint);
  $dino = "granite";
  @quarry = (@rocks, "crushed rock", @tiny, $dino);
  @copy = @quarry;     #将数组@quarry复制给@copy
  6、pop、push、shift和unshift对比总结
  [root@localhost fuxi]# cat a2.pl
  #!/usr/bin/perl
  #本程序演示pop , push, shift, unshift的功能
  print "The first, show pop function.\n";
  my @array = 1..5;
  print "The origin \@arry contains : @array\n";
  my $a=1;
  while (@array) {
  print "$a --> @array \n";
  pop @array;
  $a += 1;
  }
  print "------------------------------------- \n";
  print "The second, show push function.\n";
  my @array1 = undef;
  print "The origin \@array1 contains : @array1\n";
  my $b=1;
  while ($b  1 2 3 4 5
  2 --> 1 2 3 4
  3 --> 1 2 3
  4 --> 1 2
  5 --> 1
  -------------------------------------
  The second, show push function.
  The origin @array1 contains :
  1 -->  1
  2 -->  1 2
  3 -->  1 2 3
  4 -->  1 2 3 4
  5 -->  1 2 3 4 5
  -------------------------------------
  The third, show shift function.
  The origin @array2 contains : 1 2 3 4 5
  1 --> 1 2 3 4 5
  2 --> 2 3 4 5
  3 --> 3 4 5
  4 --> 4 5
  5 --> 5
  -------------------------------------
  The fourth, show unshift function.
  1 --> 1
  2 --> 2 1
  3 --> 3 2 1
  4 --> 4 3 2 1
  5 --> 5 4 3 2 1
  8、splice操作符
  9、字符串中的数组内插
  @rocks  = qw( bedstone redstone greenstone yellowstone whitestone);
  print "The stones are : @rocks \n";        #数组内插后,各个元素会以空格隔开,但是首尾元素前后不会加空格,需要的话                                   可以自行添加。
  @fred = qw(hello dolly);
  $y = 2;
  $x = "This is $fred[1]'s place";            #
  $x = "This is $fred[$y -1]'s place";     #打印结果同上
  @fred = qw(eating rcks is wrong);
  $fred = "right";        #接下来我想打印出"this is right[3]"
  print "this is $fred[3]\n";   # 用到了 $fred[3], 打印 "wrong"
  print "this is ${fred}[3]\n";     # 打印 "right" (用花括号避开误解)
  print "this is $fred"."[3]\n";       #还是打印 "right" (用分开的字符串避开误解)
  print "this is $fred\[3]\n";    #还是打印"right" (用反斜线避开误解)
  10、foreach控制结构
  foreach 控制变量 (数组或列表) {
  循环体执行语句;
  }
  11、perl最喜欢用的默认变量: $_
  例如:
  foreach (1..10) {
  print "I can count to $_\n";  #如果你在循环开头位置未指定控制变量,那么perl会默认使用$_
  }
  或者
  $_ = "123";
  print ;         #这里会直接打印123
  12、reverse操作符
  reverse会读取数组的值,并按相反顺序赋值。
  比如:
  @fred = (1..5);
  @fred_new = reverse @fred;
  print "@fred_new\n";        #会打印出5 4 3 2 1
  @aaa = reverse 1..5;        #同上
  注意:reverse会返回次序相反的列表, 但它并不会修改传进来的参数。假如返回值无处可去,那么这种操作也就变得毫无意义:
  reverse @fred;        #错误: 这不会修改 @fred
  @fred = reverse @fred;        #这样才好
  13、sort操作符
  sort操作符,一般对列表(也可以是数组)元素排序,默认是按ASCII码排序即:(数字-->大写字母-->小写字母,标点符号随机到各处)。
  相对@rocks数组内元素排序
  sort @rocks;    #错误
  @rocks = sort @rocks;     #这样是正确的。
  14、each操作符
  15、标量上下文与列表上下文
  16、在标量上下文中使用产生列表的表达式
  例如
  @backwards = reverse qw / yabba dabba doo /;
  #会变成 doo, dabba, yabba
  $backwards = reverse qw/ yabba dabba doo /;
  #会变成 oodabbadabbay
  17、在列表上下文中使用产生标量的表达式
  @betty = ( );    #清空一个数组的方法
  18、强制指定标量上下文
  偶尔在列表上下文的地方,你想要强制引入标量上下文,这可以使用伪函数scalar.
  例如:
  @rocks = qw( talc quartz jade obsidian );
  print "How many rocks do you have? \n";
  print "I have", @rocks, " rocks!\n";        #错误, 这会输出各种石头的名称
  print "I have", scalar @rocks, " rocks!\n";   #对了,这就可以打印除石头的种数了。
  19、列表上下文中的
  @lines = ;    # 读入所有行
  chomp(@lines);        # 去掉所有的换行符
  chomp(@lines = );    #读入所有行, 换行符去除。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-558856-1-1.html 上篇帖子: perl自学笔记整理(一) 下篇帖子: perl自学笔记整理(三)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表