加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl笔记

发布时间:2020-12-16 00:01:03 所属栏目:大数据 来源:网络整理
导读:/* 所有笔记都是根据个人对某知识点了解程度而做适当记录,以备复习。不是针对某知识点系统记录、讲解。 */ 1、last相当于break?? ??? ?next相当于continue 2、“真”的定义 ?? ?A、未定义的变量为false ?? ?B、空字符创为false ?? ?C、值为0为false ?? ?D、

/*

所有笔记都是根据个人对某知识点了解程度而做适当记录,以备复习。不是针对某知识点系统记录、讲解。

*/


1、last相当于break?? ??? ?next相当于continue


2、“真”的定义
?? ?A、未定义的变量为false
?? ?B、空字符创为false
?? ?C、值为0为false
?? ?D、其他情况为真
?? ?
3、defined函数测试变量是否有某个值。

4、简单关系运算符
?? ?==?? ??? ?eq
?? ?!=?? ??? ?ne
?? ?<?? ??? ?lt
?? ?<=?? ??? ?le
?? ?>?? ??? ?gt
?? ?>=?? ??? ?ge
?? ?

5、十六进制表时必须用0x,而不能用0X。(x的大小写区别)

6、perl允许在数字中使用下划线 eg:1_333_258

7、在双引号中分离变量,可使用{}

8、perl运算符:
?? ?.?? ?字符串串联?? ?eg: $full_name = $first." ".$last
?? ?**?? ?幂?? ??? ?eg: $div = 12**2
?? ?x?? ?重复?? ??? ?eg: $no = "no" x 3
?? ?
9、open如果打开成功,返回true,否则返回undef

10、从文件读入空行时,读入的是n,而不是“”

11、在线文档
?? ?perldoc -f chomp
?? ?perldoc -f defined
?? ?perldoc perlsyn?? ?#基本语法信息
?? ?perldoc perllop #关于perl运算符的信息
?? ?
12、决定数组中的元素个数:$#array
?? ?注意注意:表达式$#array返回的是数组的最后元素的索引。对于单元素数组,$#array 返回0. 对于空数组,$#array返回-1.
?? ?
?? ?eg:for(my $index = 0; $index <= $#array; $index++); 使用 <= 而不是 <
?? ?
13、带有“黑洞”的数组
?? ?my @array = (1); $array[3] = 100;?? ?
?? ?@array元素为(1,undef,100);

14、引用词常犯错误
?? ?my @name = qw(xin lang shen zhen); #qw列表中不能有逗号
?? ?
15、操纵数组结尾
?? ?push(@array,1);?? ??? ??? ?#数组结尾插入1
?? ?$last_element = pop(@array);?? ?#pop数组最后一元素
?? ?
?? ?$first_element = shit(@array);?? ?#pop数组第一个元素
?? ?unshit(@array,1);?? ??? ?#数组开头插入1元素

16、处理数组的一部分:
?? ?A、使用一套索引:
?? ??? ?@array[0,$#array] = (-1,-1); #将数组的第一个元素和最后一个元素赋值为-1
?? ??? ?@array = qw(1 2 3 4); @new_array = @array[0,3];#@new_array 元素为1、4
?? ?
?? ?B、范围运算符:
?? ??? ?@array[0..9] = ((0) x 10); #@array头10个元素被赋值为0
?? ??? ?
17、splice函数
?? ?A、splice @array,$offset;?? ?#删除数组中元素,从offset开始一直到数组结尾,如果 $offset 为负数,则从数组末尾开始数元素
?? ?B、splice @array,$offset,$length;?? ?#length 为删除的数组个数
?? ?C、splice @array,$length,REPLACEMENTS; #REPLACEMENTS可以是标量列表或者是数组表达式

18、split函数
?? ?my $record = "xin:lang:love:shen:zhen";
?? ?my @split = split /:/,$record;?? ?#以 : 分割 $record?? ?采用//是因为它是一个正则表达式
?? ?结果为:@split = qw(xin lang love shen zhen);

19、join 函数:作用与 split 相反:

?? ?$result = join("***",@array);#将@array元素用***联合起来

20、正则表达式元素 ?? ?^?? ?匹配行的起始 ?? ?s?? ?匹配空白字符 ?? ?d?? ?匹配一个数字 ?? ?*??? ?重复0或多次,但尽少量的匹配 ?? ? 21、?? ?perldoc perlre?? ??? ?perl关于正则表达式的在线文档 ?? ?perldoc perlop?? ??? ?perl的运算符(如s///运算)的文档 ?? ?perldoc perldebguts?? ?关于perl内部的调试信息 ?? ? 22、?? ?foreach $element (@array){} ?? ?注意:$element实际上是一个对数组元素的引用,对$element的改变就是对@array的改变 ?? ? 23、文件测试运算符 ?? ?-f?? ?是否为一个普通文件 ?? ?-r?? ?文件可读 ?? ?-w?? ?文件可写 ?? ?-x?? ?文件可执行 ?? ?-d?? ?文件为一个目录 ?? ? ?? ?可用 perldoc -f -r 查询,即把文件测试运算符当函数 24、redo运算符 ?? ?读入一个名字列表,并将它们保存在一个数组中,如果用户输入空行,则重新输入。 ?? ?for(my $index = 1; $index < 10; $index++){ ?? ??? ?print "Enter name number $index:"; ?? ??? ?my $result = <STDIN>; ?? ??? ?chomp($result); ?? ??? ? ?? ??? ?#如果用户输入一个空行,则再给一次机会 ?? ??? ?if($result eq ""){ ?? ??? ??? ?redo; ?? ??? ?} ?? ??? ? ?? ??? ?$name_list[$index-1] = $result; ?? ?} 25、翻译运算符 tr ?? ?$hex =~ tr/!@#/123/; ?? ?如果 $hex 为Q!W@E#,则其结果为Q1W2E3. 26、unless 等价于 if not 27、__DATA__文件 ?? ?这个指令告诉perl后面的内容不是脚本的一部分,而是在脚本中用于数据的一个特殊位置,它可以使用<DATA>文件句柄按一个普通文件来读。 ?? ?eg: ?? ?use strict; ?? ?use warnings; ?? ?while(<DATA>){ ?? ??? ?print; ?? ?} ?? ? ?? ?__DATA__ ?? ?Hello,I am doing a test. ?? ? ?? ?结果输出:Hello,I am doing a test. ?? ? 28、<>文件定义: ?? ?* 如果在 @ARGV 中有一个参数,则<>将每个参数当做一个文件名,并按顺序读入; ?? ?* 如果 @ARGV 为空,则<>读取标准输入。 ?? ? ?? ?eg: ?? ?程序清单 Ques28.pl ?? ?---------------------------------- ?? ?use strict; ?? ?use warnings; ?? ? ?? ?my $line; ?? ?while($line = <>){ ?? ??? ?print $line; ?? ?} ?? ?---------------------------------- ?? ?然后按下面指令来运行:perl Quse28.pl test1.txt test2.txt ?? ?结果:将test1.txt test2.txt两个脚本的内容输出 =====================散列、引用和复杂数据结构================== 29、散列初始化之一: ?? ?my %fix_words = ( ?? ??? ?beleive => "believe",?? ??? ?admimstration => "administration",?? ??? ?skool => "school" ?? ?); 30、遍历散列 ?? ?foreach my $cur_key(sort keys %fix_words){ ?? ??? ?print "$cur_key:$fix_words{$cur_key}n"; ?? ?} 31、 ?? ?================code start================ ?? ?use strict; ?? ?use warnings; ?? ? ?? ?my @array = qw!xin ling ye wu!; ?? ?my %my_hash; ?? ?%my_hash = map +($_ => 1),@array; ?? ?foreach (sort keys %my_hash){ ?? ??? ?print "$_ => $my_hash{$_}n"; ?? ?} ?? ?================code end================== ?? ?解析:?? ?map函数一般形式: ?? ??? ?map expression,array;#对array中的每个元素进行expression操作 ?? ??? ?为什么 map后面出现 +(加号)?,这是告诉 map,其有两个参数,分别为$_ => 1 和 @array,否则map将误认为自己只有一个参数,即 $_ => 1.其他的自己琢磨 ?? ? 32、散列元素删除 ?? ?delete $hash{$key}; 33、散列和数组可以相互赋值 ?? ?my %hash =( ?? ??? ?sam => 45,?? ??? ?joe => 57,?? ??? ?mac => 68 ?? ?); ?? ? ?? ?my @array = %hash; ?? ?@array 元素为sam 45 joe 57 mac 68.注意:顺序可能不一样,因为在散列中没有定义键顺序。 ?? ? 34、引用(用反斜杠表示 ) ?? ?my $var = 1; ?? ?my $ref = $var; ?? ?$$ref = 2; ?? ?print $var;#值为2 ?? ?#注意:应用被引用的实际标量,需要再添加一个$,即$$ref。 ?? ? ?? ?#数组引用: ?? ?my @array = qw(red white blue); ?? ?my $ref = @array; ?? ?$$ref[$#$ref];#最后一个元素 35、散列的引用 ?? ?================= code start=============== ?? ?use strict; ?? ?use warnings; ?? ?my $ref = {xin=>23,ling=>24,ye=>28}; ?? ?print $$ref{xin};#注意两个$$ ?? ?================= code end================= 36、数组的引用 ?? ?my @array = qw(xin lang shen zhen); ?? ?$ref = [@array];#方括号用于创建一个数组的拷贝,并返回一个对它的引用 ?? ?$$ref[1] = "test"; ?? ?print "@arrayn";#输出 xin lang shen zhen ?? ?print $$ref[0]."n";#xin ?? ?print $$ref[1]."n";#test ?? ?print $$ref[2]."n";#shen ?? ?print $$ref[3]."n";#zhen ?? ? ?? ?###############################3 ?? ? ?? ?$ref = @array; ?? ?$$ref[1] = "test";#对array的完全引用 ?? ?print @array;#xin test shen zhen ?? ? ?? ?my $ref = ["red","white","black"];#匿名引用的其他方法 37、散列放到数组里 ?? ?my @hash_array; ?? ?$hash_array[0] = {xin=>24,ling=>25}; ?? ?$hash_array[1] = {shenzhen=>perfect,guangzhou=>good}; ?? ? ?? ?print $hash_array[0]{xin};?? ?#24 ?? ?print $hash_array[1]{guangzhou};#good 38、打印复杂数据结构 ?? ?require "dumpvar.pl"#放在程序顶部的附近,放在use行后面 ?? ?dumoValue(reference);#调用,如dumpValue(@array); ?? ? ?? ?================= code start=============== ?? ?use strict; ?? ?use warnings; ?? ?require "dumpvar.pl"; ?? ? ?? ?my @matrix = ( ?? ??? ?[qw(xin lang)],?? ??? ?[qw(ling xi mei)],?? ??? ?[qw(live in shen zhen ping zhou)] ?? ?); ?? ? ?? ?dumpValue(@matrix); ?? ?================= code end================= ?? ?result: ?? ?0? ARRAY(0x85de1c) ?? ??? 0? 'xin' ?? ??? 1? 'lang' ?? ?1? ARRAY(0x85de8c) ?? ??? 0? 'ling' ?? ??? 1? 'xi' ?? ??? 2? 'mei' ?? ?2? ARRAY(0x1d28f34) ?? ??? 0? 'live' ?? ??? 1? 'in' ?? ??? 2? 'shen' ?? ??? 3? 'zhen' ?? ??? 4? 'ping' ?? ??? 5? 'zhou' 39、code test ?? ?================= code start=============== ?? ?use strict; ?? ?use warnings; ?? ?require "dumpvar.pl"; ?? ? ?? ?my @matrix = ( ?? ??? ?[qw(xin lang work in zhong ruan guo ji)],?? ??? ?[qw(live in shen zhen ping zhou)],?? ?); ?? ? ?? ?print '$#matrix:'.$#matrix."n";?? ??? ?#行数?? ? ?? ?print '$#{matrix[0]}:'.$#{$matrix[0]}."n";?? ?#列数 ?? ?print '$#{matrix[1]}:'.$#{$matrix[1]}."n"; ?? ?print '$#{matrix[2]}:'.$#{$matrix[2]}."n"; ?? ?================= code end================= ?? ?result: ?? ?$#matrix:2 ?? ?$#{matrix[0]}:7 ?? ?$#{matrix[1]}:2 ?? ?$#{matrix[2]}:5 40、my @new_array = @old_array;#引用被复制,而数据没被复制,对@new_array的修改就是对@old_array修改 ?? ?考虑使用 Storable 模块,函数 dclone 克隆一个复杂的数据结构,生成一个所有引用的拷贝。它带有一个参数,一个对即将克隆数据的引用,并返回一个对数据拷贝的引用。 ?? ?================= code start=============== ?? ?use strict; ?? ?use warnings; ?? ?require "dumpvar.pl"; ?? ? ?? ?use Storable qw(dclone); ?? ? ?? ?my @old_array = qw(hua wei in shen zhen); ?? ?my $new_array_ref = dclone(@old_array); ?? ?print "@old_arrayn"; ?? ?dumpValue($new_array_ref); ?? ?================= code end================= ?? ?result: ?? ?hua wei in shen zhen ?? ?0? 'hua' ?? ?1? 'wei' ?? ?2? 'in' ?? ?3? 'shen' ?? ?4? 'zhen' 41、在线文档 ?? ?perldoc perdata #关于perl数据结构的信息 ?? ?模块: ?? ?Storable #保存和从文件读取复杂数据结构的perl模块 ?? ?dumpvar.pl #一个用于倾倒变量未编进文档的模块 =====================子程序和模块================== 42、参数定义字符 ?? ?$?? ?标量 ?? ?@?? ?数组(转换成引用) ?? ?%?? ?散列(转换成引用) ?? ?&?? ?函数引用 ?? ?@?? ?数组(必须为最后一个) ?? ?%?? ?散列(必须为最后一个) ?? ?;?? ?表示后面是可选参数 43、其他参数传递方法 ?? ?sub distance($$$$){ ?? ??? ?my ($x1,$x2,$x3,$x4) = @_; ?? ?} ?? ? ?? ?无参数定义的函数:如sub do_it{},这告诉perl函数带有任何类型的任何数量的参数。换句话说,绝对不进行类型检查。也没有数组到数组引用或散列到散列引用的自动转换发生,所有参数都被串联到一起,倾倒入@_.避免使用这种形式的参数传递。 44、local声明的作用: ?? ?@@@:保存变量的全局定义 ?? ?@@@:允许你随意改变变量 ?? ?@@@:当局部变量越出作用域时,它就恢复全局定义 ?? ? ?? ?my才是创建局部变量,local不是。 ?? ?================= code start=============== ?? ?print "$#ARGV arguments presentn"; ?? ?{ ?? ??? ?local @ARGV; ?? ??? ?my $first = shift @ARGV; ?? ??? ?print "$#ARGV arguments present nown"; ?? ?} ?? ?print "$#ARGV arguments restoredn"; ?? ?================= code end================= ?? ?等价于: ?? ?================= code start=============== ?? ?print "$#ARGV arguments presentn"; ?? ?my @save_argv = @ARGV; ?? ?{ ?? ??? ?my $first = shift @ARGV; ?? ??? ?print "$#ARGV arguments present nown"; ?? ?} ?? ?@ARGV = @save_argv; ?? ?print "$#ARGV arguments restoredn"; ?? ?================= code end=================

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读