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

[经验分享] perl学习笔记二

[复制链接]

尚未签到

发表于 2015-12-26 15:31:48 | 显示全部楼层 |阅读模式
  数组:
  特殊的数组索引:加入对索引值超过数组尾端的元素进行赋值,数组将会根据需要自动扩大,只要有可用的内存分配给数组。意外增加的数组元素的值为undef.
  $a[0]="aa";
  $a[1]="bb";
  $a[900]="99";
  有时需要找出数组中最后一个元素的索引值,如对数组rocks而言。其最后一个元素的索引值为$#rocks,元素个数$#rocks+1。
  数组最后一个元素也可以用#rokcs[-1]访问。-1表示倒数第一的意思。
  
  列表直接量:
DSC0000.png
  qw(quoted word)简写
  如:qw(fred barney betty wilma dino)="fred","barney","betty","wilma","dino"
  因为qw算是一种引用的形式,所以不能将将注释写在qw中。
  有时人们喜欢每个元素单独成行,便于查看和增删:
  qw(
  fred
  barney
  betty
  wilma
  dino
  )
  前面的例子是以()作为界定符,其实perl还允许以其他的标点符号作为界定符。常用的写法为:
  qw| fred barney betty wilma dino |
  qw# fred barney betty wilma dino #
  qw/  fred barney betty wilma dino /
DSC0001.png
  链表的赋值:
  ($fred,$barney,$dino)=("flintstone","rubble",undef);
  交换两个的值:($fred,$barney)=($barney,$fred)
  赋值左边少于右边:($fred,$barney)=qw< flintstone rubble slate granite>;#忽略掉末尾两个元素
  赋值 左边多于右边:($wilma,$dino)=qw[ flintstone];#$dino的值为undef
  
  @(at)字符(近似定义数组):
DSC0002.png
DSC0003.png
  注意:@giant=1..5;==@giant=qw/ 1 2 3 4 5/;
  @copy=@quarry;是将quarrry中的数据全部拷贝到copy中,不是和C语言中指针一样,两者指向同一块空间。
  push 和 pop操作符(处理数组的尾端,即把数组当作一个栈来用):
  pop沒什么好说的,注意一下:pop @array;==pop (@array);就行
  push 有沒什么好说的,注意:push @array,1..10向array中添加10个元素。和pop一样,push也可以拿掉括号。
  shift 和unshift操作(处理数组的首端,即把数组当作一个队列来用):
  类似pop和push操作,不细数了。
  splice操作(添加或者移除数组中的某些值):
  pop-push和shift-unshift操作符都是针对数组的尾部进行的操作,splice则是对数组的中间进行操作。
  splice有四个操作符号,他最多可以接受四个参数(最后两个是可选的):
  第一个为要操作的目标数组,第二个参数为操作的数组中的元素哦开始位置;
  如果仅仅是这两个参数,Perl会把即定位置到末尾的元素全部取出来并且返回。
DSC0004.png
  第三个参数为指定要操作的元素长度,
DSC0005.png
  第四个参数是要替换的列表。之前我们看到的都是如何实现从数组中拿走元素,此时就可以补充新元素到数组中。
DSC0006.png
  将第三个参数的值设置为0即可不删除地添加新的列表。
DSC0007.png
  注意新插入元素的位置。
  字符串中数组的内插:
  简单例子:
DSC0008.png
  需要注意的:写邮箱地址时用$email=”fred@bedrock.edu”//错误,可以写成$email=”fred\@bedrock.edu”.
  另外一个需要注意的地方是:
  如果需要在某一标量变量的后面接着写左方括号,则需要先将该方括号隔开,它才不至于为数组引用的一部分。如下:
DSC0009.png
  foreach控制结构



#!D:\Perl\bin\perl
@rocks = qw / bedrocks slate Java /;
foreach $tmp(@rocks) {
print "ont rock is $tmp\n";
}
  
  注意:控制变量并非是列表元素的复制品——实际上,他就是列表元素本身。如果在循环中修改了控制变量的值时那么列表的值也将修改。如下:



#!D:\Perl\bin\perl
@rocks = qw / bedrocks slate Java /;
foreach $tmp(@rocks) {
if ($tmp eq "slate" ) {
$tmp="slate222222";
}
}
foreach $tmp (@rocks) {
print "$tmp\n";
}
  
DSC00010.png
  注意:同时控制变量再循环结束后会回到循环前面的值,如下:



#!D:\Perl\bin\perl
$tmp='tmp';
@rocks = qw / bedrocks slate Java /;
foreach $tmp(@rocks) {
print "tmp is $tmp.\n"
}
print "FINAL::tmp is $tmp.\n"
  
  执行结果:
DSC00011.png
  重要的默认变量:$_
  如果在foreach循环开头省略控制变量,Perl就会用$_(在很多情况下当未告知Perl使用那一个变量或者数值时,Perl都会使用$_)。如下:



#!/usr/bin/perl
use strict;
use warnings;
foreach  (1..10) {
print " $_ ";
}
  
  revers操作符
  reverse操作符读取列表中的值并按照相反的次序返回列表。
  如:@wilma=reverse 6..10;
  注意:如果要改变@fred的值的话需要使用:@fred=reverse @fred;
  sort操作符
  读取列表中元素的值并按照一定的顺序输出。



#!D:\Perl\bin\perl
use strict;
my @imple=qw/ bed slate rubble grantie/;
my @sor= sort (@imple);
print "@sor \n";
my @rev = reverse sort (@imple);
print "@rev \n";
my @numbers=sort 91..102;
print "@numbers \n"
  
DSC00012.png
  仔细看本例中的执行结果,注意数字的输出情况。reverse sort 方法值得掌握。
  注意:当使用use strict(强制程序员在使用变量前声明变量)时,变量定义前加一个my。
  each 操作符
  调用each可以返回数组中写一个元素所对应的两个值——元素的索引和值。



#!/usr/bin/perl
use warnings;
@rocks=qw /bed slate rubble grantie/;
while (($index,$value)=each @rocks) {
print "$index :$value\n";
}
DSC00013.png
  标量上下文和列表上下文
  这部分好像很难,主要看自己的开发经验。
  在标量上下文中是i用产生列表的表达式
DSC00014.png
  在列表上下问中使用产生标量的表达式
DSC00015.png
  强制指定标量上下文
  使用伪函数scalar。
DSC00016.png
  列表上下文中<STDIN>
  @lines=<STDIN>;
  从键盘读取数据,每次读入一行(会将换行符也读进去),然后赋值给一个元素。结束标志:linux中是CTL+D windows中CTL+Z。
  在一般的使用中,会利用chomp(@lines=<STDIN>);将读入的每一行末尾的换行符号去掉。
  

运维网声明 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-156666-1-1.html 上篇帖子: C#调用Perl脚本 下篇帖子: POSIX,Perl正则表达式区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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