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

[经验分享] perl学习笔记(4)

[复制链接]

尚未签到

发表于 2018-8-31 11:51:05 | 显示全部楼层 |阅读模式
  这次学习一维数组(列表)。


  • 给数组变量赋值以@开头。
  • 一维数组索引从0开始。
  • 用$#来取得数组最后一个元素编号(元素个数要加1),例如#$family。
  • 赋值运算符左边的表达式类型决定右边的表达式计算时所在的上下文。例如,$size=@family;可取得数组family元素的个数。例如,if(@family){...}中的上下文是布尔值,将判断@family中元素个数,为0时false,有元素时为true,即,判断数组是否包含元素。scalar()函数可强制指定上下文为标量。
  • 数组变量和标量变量可以共用一个名字。$family和@family是不同的变量。
  • qw中用逗号会出这样的错误提示:Possible attempt to separate words with commas
  • print @family;和print "@family";的差别是后者用空格分开。
  做个练习(保存为f41.pl):
  


  • #!/usr/bin/perl -w
  • @boys=qw(Grey Peter Bobby);
  • @girls=qw(Marcia Jan Cindy);
  • @kids=(@girls,@boys);
  • @family=(@kids,('Mike','Carol'),'Alice');
  • $family=qq(test);
  • print q(@boys=); print qq(@boys); print qq(\n);
  • print q(@girls=); print qq(@girls); print qq(\n);
  • print q(@kids=); print qq(@kids); print qq(\n);
  • print q(@family=); print qq(@family); print qq(\n);
  • print q($family[0]=); print $family[0]; print qq(\n);
  • print q(@family[0,2]=); print qq(@family[0,2]); print qq(\n);
  • print q($family=); print qq($family); print qq(\n);
  • $size=@family;
  • print q($size=); print qq($size); print qq(\n);
  • print q(scalar(@family)=); print scalar(@family); print qq(\n);
  

  $ perl f41.pl
  
@boys=Grey Peter Bobby
  
@girls=Marcia Jan Cindy
  
@kids=Marcia Jan Cindy Grey Peter Bobby
  
@family=Marcia Jan Cindy Grey Peter Bobby Mike Carol Alice
  
$family[0]=Marcia
  
@family[0,2]=Marcia Cindy
  
$family=test
  
$size=9
  
scalar(@family)=9
  

  再做个练习(保存为f42.pl):
  


  • #!/usr/bin/perl -w  print qq(Input array elements:\n);
      @myarray=;
      chomp @myarray;
      print qq(Your inputs:\n);
      $i = 0;
      foreach $myelm (@myarray){
      print q(@myarray[);print qq($i); print qq(]=);
      print qq($myelm);
      print qq(\n);
      $i++;
      }
  

  Linux屏幕中录入数组元素用ctrl+d结束,用回车间隔。
  $ perl f42.pl
  
Input array elements:
  
aa
  
bb
  
cc
  
Your inputs:
  
@myarray[0]=aa
  
@myarray[1]=bb
  
@myarray[2]=cc
  

  数组可以用来赋值:
  
($a,$b,$c)=qw(apple,orange,banana);#a,b,c被分别赋值
  
($a,@b,$c)=qw(apple,orange,banana);#a=apple,@b=(orange,banana),$c=undef
  
($a,$b,$c)=qw(apple,orange,banana,peach);#a,b,c被分别赋值,peach没有用到
  
($a,$b,$c)=qw(apple,orange);#a,b被分别赋值,$c=undef
  打印数组:print "@family";
  重要函数:split、join、reverse和sort。
  

  通过本次学习,我加深了对perl的印象。目前感觉可以用“元素”和“列表”来总结perl中的一些概念。元素有数值和字符串两种,列表中的元素可能是数值也可能是字符串。指向元素的变量用$开头,指向列表的变量用@开头。继续思考下去,有个问题是perl是如何在数值和字符串之间转换的?要深入理解perl,理解这个转换细节是必要的。可以参考:http://book.51cto.com/art/201104/259065.htm 。顺便的,往后翻几页可以看到http://book.51cto.com/art/201104/259067.htm这里提到了“弄清列表和数组间的差别”,我想应该修改为“弄清变量名称和变量内容的差别”,变量名称和变量内容在内存中应是分开存储的,@mylist=('a','b','c'); 中“mylist”是变量名,('a','b','c')是变量内容的表达式,变量内容也可以表达为qw(a b c)。那么,理解$size=()=qw(a b c);语句,就应该是这样:()=qw(a b c)上下文环境要求返回列表不要求变量名引用,$size=....上下文要求返回标量,根据perl的自动转换“规矩”,就返回了3。至于为什么$size=qw(a b c);返回c而不是3,也较容易理解:qw(a b c)只是个表达式,这个表达式放到列表上下文中会被解析为列表存储在内存中,但是到了标量上下文中就是$size=('a','b','c'); 根据perl的自动转换“规矩”,返回了c。
  练习(f43.pl):
  


  • #!/usr/bin/perl -w
  • $size=qw(a b c);
  • print qq($size \n);
  • $size=()=qw(a b c);
  • print qq($size \n);
  

  $ perl f43.pl
  
Useless use of a constant in void context at f43.pl line 2.
  
Useless use of a constant in void context at f43.pl line 2.
  
c
  
3
  上面输出中报了"Useless use of a constant in void context"报警信息的意思是$size=qw(a b c); 这个语句前两个值a和b没派上用场。
  修改成下面这样就不会报警了:
  


  • #!/usr/bin/perl -w
  • $size=qw(c);
  • print qq($size \n);
  • $size=()=qw(a b c);
  • print qq($size \n);
  

  $ perl f43.pl
  
c
  
3
  

  这次就到这。



运维网声明 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-559337-1-1.html 上篇帖子: 如何看待perl和其它语言 下篇帖子: perl学习笔记(5)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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