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

[经验分享] Perl 基本备忘录

[复制链接]

尚未签到

发表于 2015-12-25 16:05:41 | 显示全部楼层 |阅读模式
  1.Perl数组(1):
  1) 初始化数组 @array = ( "stringA" , "stringB" , "stringC" );
  2) 使用负索引循环检索 print $array[-1];  #输出索引为(-1 + 3) % 3 = 2 的 stringC
  3) 动态增长 $array[4] = "stringD"; #虽然$array[3]还没有使用,但在动态赋值$array[4]的使用,已经对$array[3]赋空置
  4) 动态增长后的负索引 print $array[-1]; #输出索引为(-1 + 5) % 5 = 4 的 stringD
  5) print @array; #输出数组中所有值的无空格串接
  6) print "@array"; #输出数组中所有值的空格分隔列表
  2.Perl数组(2):
  1) 数组中可以保存不同类型的数据(字符串、数值、数组)
  2) $size = @array; 该语句把数组@array的数组长度值给标量$size,但如果在某些函数中直接使用@array,将不一定能得到数组长度
  3) $#arrayname,该特殊变量保存着名为arrayname的数组的末尾索引值。
  例如:  @arr = ( 1,2,3,4,5 );
  则$#arr的值为4
  $#arr=2;  这样就把数组arr截断,其元素4和5都被释放,数组长度值也被改变
  4) @array[-1,4,7] 将分别输出索引值为-1,4,7的元素,这样的调用返回值不是标量,而是数组
  5) 多维数组使用多层方括号定义
  @D3array = (
  [ [1,2,3,4] , [5,6,7] , [8,9,0] ],
  [ [ 'str1' , 'str2' , 'str3' ] , [345 , 67 , 8930] ],
  [ [ 4,6,7] , [2] , [ "sud" ] ]
  );
  多维数组中每维的数组长度不需要一致,内部数据元素也不需要一致。
  获取第一维的数组长度方式是 $size = @array;
  第二维         $size = @{$array[$i]};
  第三维         $size = @{$array[$i][$j]};
  .......         ......
  关键是,只要@符号后跟一个数组变量时,就可以获取其长度,但超过一维时,获取数组变量的表达式要用{}包住
  3.命令行执行Perl语句
       1)perl -e '命令语句'   这样可以直接在命令行执行Perl语句,不过要注意引号匹配规则。
  2)perl -ne '命令语句'  filename 这样可以逐行读入filename中的数据,然后对每行都以命令语句处理。
  例如 a) perl -ne 'print;'  abc.txt
  在命令行界面逐行输出abc.txt文件的数据
  b) perl -ne 'print if /^192/ ' /etc/hosts > ~/hosts.tmp
  把UNIX like系统中主机解释文件的内容逐条写到~/hosts.tmp文件下,不过只有符合以192开头的行,才会被写入,因为语句会执行筛选
  3)'OS命令' | perl -ne '命令语句'  这样可以把之前执行的OS命令的输出作为输入流,重定向到后面执行的perl命令中。
  例如 a) ls -al | perl -ne 'print;'
  把当前目录下所有子文件、子目录列出,并作为输入数据输入到perl命令中,再逐条打印
  4.Perl引号规则
  1)双引号中的内容允许转义和变量解析,缩写是qq/内容/
  2)单引号中的任何字符都不会被转义和变量不会被解析,缩写是q/内容/
  3)反引号中的内容如果出现OS命令,该命令会被执行,并且结果数组会替换命令位置,或作为赋值的数据,缩写是qx/内容/
  4)上述缩写中,符号对/内容/可以用其他符号替代,效果相同,例如qq(内容),qx!内容!,q+内容+等等,但字母好像不可以
  5.here文档规则
  1)起始标签没有使用任何引号。对文档内容的效果等同于使用了双引号。
  2)起始标签使用了单引号。对文档内容的效果等同于使用了单引号。
  3)起始标签使用了反引号。对文档内容的效果等同于使用了反引号。
  6.变量初始化
  Perl中的变量在第一次出现时被分配内存。如果没有显式初始化,则会被赋值为0或者空字符串,具体怎样表现要视乎该变量出现的上下文。
  使用defined函数,defined $var 可以检查变量是否已经被初始化。
  使用undef函数,undef $var 可以释放变量的内容。
  7.特殊变量
  1)$_, 该变量的值经常作为默认参数值,例如这样调用 print; 不给予任何参数,则会打印出$_的值;当使用文件句柄读入数据时,若不指定使用什么变量保存读入数据,也会读        入到$_中。
  8.Hash
  1)Hash表定义语法:
  %aHash = (
  'key1'  => "value1",
  "key2" => 'value2',
  "key3" => 123,
  456 => "890"
  ) ;
  2)Hash表中的键值可以是数字、字符串、数组甚至另一个hash表,不过如果要采用非字符串键值,则最好以单个键/值对赋值的形式插入到hash表中,而不是在初始化时插入。
  3)对1)中的hash表,可以使用以下操作使用hash slice:
  a) @aValues = qw ( 123 456 789 0 );
  @aHash{'newKey1' , 'newKey2' , 'newKey3' , 'newKey4'} = @aValues;
  通过这样的方式,可以创建新的hash表,如果名字相同(除了起始的%变为@),则会在原有的hash表中插入,而非创建。
  b)对3)中修改后的aHash,可以采用以下方式获取其值集合的子集:
  @subSet = @aHash{ 'newKey1' , 'key1' , 456 };
  @subSet数组中保存元素的顺序为赋值时指定键的顺序。
  其中 @hash表名 这种使用方式,称为hash slice。
  9.数组HASH嵌套
  %aHash = (
  "key1" => "value1",
  "key2" => [
  "str1",
  [ 1,2,3,4,5 ],
  {
  "key2.1" => "value2.1";
  "key2.2" => "value2.2";
  }
  ],
  "key3" => {
  "key3.1" => "value3.1",
  "key3.2" => "value3.2",
  },
  );
  print "$aHash{'key2'}->[1][3]\n" ; 输出4
  print "$aHash{'key2'}->[2]->{'key2.1'}\n"; 输出value2.1
  print "$aHash{'key3'}->{'key3.2'}\n"; 输出value3.2
  上述调用中->符号可以省略。
  10.操作符上下文
  1)当操作符的上下文是数值时,操作数中的开头空格会被跳过,直接找到操作数中第一个数字,而随后的字符串也会被跳过。若操作数的起始字符串不是空格也不是数字,则该操       作数被解析为0。一个例外是当操作数的形式为科学记数格式时,会被作为一个整体解释。
  $str1 = "  5  594asd";
  $str2 = "10";
  $str3 = "asd 10";
  $str4 = "  4e3 asiddfi";
  $sum = $str1 + $str2 + $str3 + $str4;  # $sum的值为4015 , 5 + 10 + 0 + 4000
  2)当操作符的上下文是字符串时,所有操作数都被解析成字符串。
  11.逻辑操作符解析
  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-156322-1-1.html 上篇帖子: PERL unicode 下篇帖子: 教你用Perl 实现Base64编码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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