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

[经验分享] Learning Perl 1-debugoo

[复制链接]

尚未签到

发表于 2018-9-1 06:17:12 | 显示全部楼层 |阅读模式
  1. 数字
  (1).所有整数和浮点数都按double类型存储。例如0, -40, 0377, 0xFF,1.25, 255.0, -6.5e24 (2).可以插入下划线吧若干位数分开61_298_040_283_768(应该用逗号来分,但是逗号在perl中有其他意义)
  (3).运算:除法总是按浮点数运算.例如10/3=3.33333...
  支持整数取模计算,例如10%3=1
  乘幂操作用双星号表示,比如2**3=8
  (4).用Math::Complex模块支持复数
  (5).同样支持+=等操作
  2.字符串
  (1). 最长没有限制。可以是任意字符(无论是否为可见字符)
  (2). ''和“”规则和bash相同,比如'Don\'t do that'中‘需要用反斜线转为字面量, 'hello\n'中全部为字面量。如果没有空格等任何特殊字符,字符串也可以不用‘’和“”
  双引号中的几个反斜线转义
  \l下个字符转为小写
  \L直到\E为止所有字符为小写
  \u下个字符转为大写
  \U直到\E为止所有字符为大写
  \Q直到\E为止所有字符加上反斜线
  \E结束\L.\U,\Q
  \cC控制字符,相当与Ctrl键
  \eEsc键
  (3).  .操作符 字符串连结
  #!/usr/bin/perl -w
  $var1="Hello"."World";
  $var2="Hello".' '."World";
  $var3='hello world'."\n";
  print $var1."\n";
  print $var2.$var3;
  print $var1, $var2.”\n”
  同样有类似的.=,但是没有x=
  (4). x操作符(小写字母x)字符串重复
  5 x 4 结果是“5555” 5*4=20. 涉及字符串操作符的数字操作数将转换为字符串
  3.使用内建警告
  SHELL>perl -w my_program
  or
  #!/usr/bin/perl -w
  or
  #!/usr/bin/perl
  using warnings;
  4. 双引号字符串里的变量内插
  $meal=”steak”
  $barney=”Fred ate a $meal”
  same as
  $barney='Fred ate a '.$meal
  所以,双引号里输出$字面量需要用\来escape
  5. 运算符的优先级(和C语言相同) 由高到低
  三目运算符?:
  等号运算符=+= .=
  逻辑运算符not > and > or xor
  6.比较运算符
  数字字符串
  ==eq
  !=ne
  gt
  =ge
  例如
  35==35.0 #true
  ‘35’eq‘35.0’#false
  ‘fred’ lt 'free'#true
  if (1==2 or not 1==0 and 1==1){
  print 'true',"\n";
  } #true
  7. 获得行输入
  $line=
  chomp运算符:移除字符串末尾的换行符。
  $text=;
  $chomp($text);#或者chomp $text
  8. 所有未初始化的变量 undef值。检测是否初始化defined函数
  例如
  $line=;
  if(defined($line)){
  print “true”;
  $line=undef;#重新设为undef
  }
  9. 数组
  (1).数组从0开始,即可以为$arr[0]赋值。赋的值可以是任意类型。如果对超过数组尾端的元素进行赋值,数组将会自动增大。
  例如
  $arr[0]=0
  $arr[1]=1
  $arr[99]="the end"
  则[2]-[98]是undef
  (2).如果下标超过数组的尾端,将会是undef
  (3).最后一个元素的索引值为$#arr
  #!/usr/bin/perl -w
  $arr[0]=0;
  $arr[1]=11;
  $arr[2]=22;
  $arr[9]=99;
  print $#arr, $arr[$#arr];
  (4).负数下标,-1代表倒数第一个,-2第二个。。
  10. 列表,圆括号中的一系列值。数组的另一种表现。
  (1,2,3)
  (1,2,3,)#末尾的,将被忽略
  (“fred”,1,2)
  ()#空列表
  (1..10)#100个整数构成的列表
  (1.5..10.5)#小数部分会被模掉。内容同上
  (10..1)#结果会是空
  ($start..$end)#生成从数字$start到$end的列表
  (1).qw quoted word生成加上引号的单词列表
  qw(banana, apple, orange, grape, mango)
  则生成”banana”, “apple”, “orange”, “grape”, “mango”
  qw的定界符(delimiter):不一定圆括号,还可以是! / # () {} [] ,要使用结束定界符的字面量需要转义。
  (2).赋值
  ($fred, $barney, $dino) = (“stone”,”rubble”, undef)
  ($fred, $barney)=($barney, $fred)#实现变量的互换
  如果赋值不够列表中所有的变量,后面的变量则为undef
  (3).用列表构建数组
  (fruit[1],fruit[2],fruit[3],fruit[4],fruit[5])=qw(banana, apple, orange, grape, mango)
  引用整个数组的方法:在数组名前加上@字符
  例如
  @fruit=qw(banana, apple, orange, grape, mango)
  @num=1..1e5#100,000个数
  @morenum=(@num, 0, @num)#200,001个数
  @othernumarr=@num#将一个数组中的列表复制到另一个数组
  (4).push pop shift unshift
  push(@arr, 0)#push和pop从数组的末尾取数
  push @arr, 1..10;
  push @arr, @otherarr;
  pop @arr仅弹出最后一个
  unshift @arr, @otherarr;#unshift和shift从数组的开头取数
  (5).将数组内插到字符串中
  print “we have @fruit”;#每个元素之间用空格隔开。首位不会增添额外空格。
  注意如果双引号字符串中需要用@字面量,应用\@
  例如“someone@gmail.com”就是错误的,会内插@gmail数组
  (6).foreach控制结构
  $arr[0]=0; $arr[1]=11;
  $arr[2]=22;
  $arr[9]="the end";
  print "@arr";
  foreach $one (@arr){#对于数组中每一个变量$one
  $one.="\n";
  }#这样 每一个变量都变成一行
  print "@arr";
  或者直接使用“老地方”变量$_
  foreach (@arr){
  $_.="\n";
  }
  (7).reverse @arr#反序
  sort @arr #按ASCII编码排序
  11.标量上下文与列表上下文
  (1).上下文是表达式所在的位置。perl在解析表达式的时候,需要出现的位置希望目标是一个标量或列表。即不同上下文环境中,变量目标的值可能不同。
  例如
  @fruit=qw(banana, apple, orange, grape, mango);
  @sorted=sort @fruit;    #列表上下文,@fruit在这里代表一个列表
  $num=42+@fruit;         #标量上下文,@fruit在这里代表标量——列表的长度5
  @list=@fruit;
  $n=@fruit;
  print @sorted, "\n" ,$num, "\n",  @list, "\n", $n;
  (2).sort在标量上下文中将返回undef例如$num=sort @arr
  (3).reverse在列表上下文将是所有元素的反置,在列表上下文中将是所有元素的字符串连结在一起然后按字符串反置。
  例如
  @backwardByElem=reverse qw/first second third/;
  $backwardByChar=reverse qw/first second third/;
  (4).几个上下文例子
  ($first, $second)= something#列表上下文
  ($first) = something#列表上下文
  if/while(something)#列表上下文
  $fruit[@fruit]=@fruit; #添加一个元素到数组末尾。数组是从0开始的。添加之后最后一个元素下标$#fruit是5
  print "the \@fruit is ", @fruit, "\n", "the last one is ", $#fruit, " ", $fruit[$#fruit],"\n";
  push @fred,@fruit#列表上下文,@fruit是列表
  sort/reverse @fruit#列表上下文
  print @fruit#列表上下文
  @fred=6*7#fred得到一个仅有一个元素42的列表
  @wilma=undef#得到一个列表,其中只有一个元素是undef。正确清楚数组的方法是@betty=();
  (5).scalar函数 强制转换为标量上下文
  print “I have”, scalar @fruit, “ fruits!\n”;
  (6).@lines=列表上下文中的读取标准输入
  会返回所有的行,直到文件结束(Ctrl+D)为止
  @lines=;
  print "@lines";   #每一个元素都有一个换行符
  chomp @lines; #删除所有换行符
  print "@lines";
  或者chomp(@lines=);
  例1:写一个程序,读入一些字符串(每行一个)直到文件结尾为止。然后相反顺序输出这个列表。
  #!/usr/bin/perl
  @lines=;
  @lines=reverse @lines;
  #chomp @lines;
  print @lines;
  例2:写一个程序,读入一些数字(每行一个),直到文件末尾(EOF)。然后,根据每个数字,输出如下名单中相应的水果名。比如1,2,4,2将输出 banana apple grape
  @fruit=qw(banana, apple, orange, grape, mango)
  #!/usr/bin/perl -w
  @fruit=qw(banana, apple, orange, grape, mango);
  chomp(@lines=);
  foreach (@lines){
  print $fruit[$_ - 1];
  }
  Textbook:Learning Perl


运维网声明 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-560135-1-1.html 上篇帖子: perl mail(Mail::POP3Client+MIME::Parser) 下篇帖子: 简单统计vss和rss总值的perl脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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