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

[经验分享] 【Perl学习】学习笔记(持续更新中)

[复制链接]

尚未签到

发表于 2015-12-27 09:55:05 | 显示全部楼层 |阅读模式
  
  作者:gnuhpc     
出处:http://www.cnblogs.com/gnuhpc/
  1.shell和Perl的区别和联系   
    perl十足一个万金油,从自身内部就实现了各种系统命令的功能,在效率上高许多,而且有专门的调试工具,支持面向对象,不论是小脚本还是大型应用程序都可胜任。   
    shell脚本本身只适用于简单的系统管理,个人觉得shell象粘合剂,把各种linux系统命令粘在一起形成脚本,所以你还要学习awk、sed等等,由于shell多是调用外部程序执行操作,所以效率方面较低,还有就是shell脚本调试起来不方便,所以用shell写500行以上的脚本会很累。   
    联系:他们都是一种解释性程序设计语言。   
2.Perl和C语言一样,一个语句由一个分号结尾。   
3.在Perl语言中,变量在使用前不需要申明数据类型,即变量是没有类型的。你可以将一个字符串赋给一个变量,在这之后,你可以将一个数字赋给同一个变量。一个变量是什么类型的,是由对这个变量指定什么样的处理来决定的。通常   
是在变量名前面加一个类型修饰符来表明该变量的类型。   
4.数据结构   
Perl有三种数据结构:单值,数组,关联数组(就是"哈希表")。   
1)单值(scalar)变量   
单值变量名通常以$符号开始     
e.g. $mystr  = “Hello world.” ;  $mynum = 321;   
其中有3种表示字符串的方法,好记的是,它们与shell脚本的规则是一样的。   
双引号("):在程序里,Perl会把字符串中变量替换掉。   
单引号(’):在 Perl程序中不会做任何特别处理。   
反引号(`): Perl会把这个字符串作为shell的命令来执行(作为一个独立的进程),并把结果作为该字符串的结果。   
2)列表(数组)变量   
列表的大小是动态可扩充的。列表由圆括号((  ))包含的,以逗号(,)分隔的元素组成。每个元素可以通过它在列表中的位置来引用。第一个位置的索引是0。也可以用方括号([])来引用列表中的一部分。   
e.g.以下定义了一个四个字符串的列表,并且将这个列表的索引为0的元素(Mon)赋值给单值变量monday.   
$monday = ("Mon.","Tus.","Fri.","Sun.")[0];     
而 ("Mon.","Tus.","Fri.","Sun.")[1,3];这句的结果也是一个列表——"Mon","Fri"   
声明列表通常以@符号开始,并且在使用的时候,使用前缀$或者@来告诉Perl解释器某个变量的类型。e.g.@rev = reverse(@num1234); $num1  = $num1234[0];   
Perl提供了一些函数用来处理列表:   
sort(LIST)                 对LIST排序,返回一个列表   
reverse(LIST)             对LIST反序,返回一个列表   
join(EXPR,LIST)          返回EXPR和LIST的组合列表   
split(PATTERN,EXPR)   返回由PATTERN分隔的EXPR的子列表     
push(@ARRAY,LIST)    把列表LIST加到@ARRAY尾部   
pop(@ARRAY)            从@ARRAY尾部移去一个元素   
unshift(@ARRAY,LIST) 在@ARRAY前面加入列表LIST     
shift(@ARRAY)           移去并返回@ARRAY的第一个元素     
scalar(@ARRAY)         返回数组的元素数目     
3)关联数组变量   
Perl提供了一种基于key=>value方式的关联数组。这类数组中,通过key来索引元素的值(value)。这里的key是字符串。关联数组变量名通常以%符号开始,如%myvar,   
在关联数组中,用大括号({ })来表示以key来索引元素。   
%myhash =  (“first”=>”First  element”,  “second”=>”Second element”,     
“third”=>”Third element”);   
$secondelement = $myhash{“second”};   
在Perl语言内部,通过哈希表来保存关联数组的,通过对key取哈希运算   
来定位元素的位置。所以,关联数组又叫哈希表。   
Perl提供了一些函数来处理关联数组:   
keys(%ARRAY)             返回关联数组%ARRAY的所有的key组成的列表   
values(%ARRAY)          返回关联数组%ARRAY的所有的value组成的列表   
each(%ARRAY)            每次调用的时候,就返回由一对key和value组成的列表   
delete($ARRAY{KEY})  从数组%ARRAY中删除由key关联的元素     
5.输入   
想从文件读入时,把文件名作为脚本执行时的参数附在脚本名称后边就可以了。Perl解释器在解释运行脚本的时候,会把该文件打开,并把其中的每一行读入,赋值给变量$_。   
你可能写了几个文件名字作为命令行参数,比如:   
lines foo bar zap   
这意味着脚本lines将文件foo, bar, 和 zap 作为一个已经合并的单个文件来   
处理。   
6.输出   
print 与shell中的printf非常类似   
7.条件测试和真值   
Perl提供了2套条件测试方法,一套用于数字,一套用于字符串:   
比较测试 字符串  数字   
相等       eq       ==     
不等       ne       !=     
大于       gt        >     
大于等于  ge       >=     
小于       lt         <     
小于等于  le        <=     
比较,返回-1,0,1     
            cmp     <=>     
可以用&& (AND) 和|| (OR) 来组合测试运算。   
真值问题在Perl中很灵活。   
下面的值作为真值(true)来处理:   
1;  
(&quot;a&quot;,&quot;b&quot;); #有元素的列表   
&quot; &quot;;          #空格符 (注意这个)   
&quot;hello&quot;;   #非空字符串   
&quot;00&quot;       #这个实际上也是非空字符串   
下面的值作为false来处理:   
0;  
(); # 空的列表   
&quot;&quot;; # 空字符串   
&quot;0&quot;; # 这个也是false!(注意这个)   
8.控制结构   
Perl有丰富的控制结构。可以用if语句来实现分支结构,while语句来实现循   
环结构。除了if和while,Perl还提供了一个foreach语句,大大方便了对数组的   
处理。注意,一个程序块的大括号是必须的,这和C语言略有不同。   
if语句的格式是:   
if(expression)   
{   
    block     
}   
if(expression)   
{   
    block1   
}   
else     
{   
    block2     
}   
while语句的格式如下:   
while(expression)   
{   
    block     
}   
last语句告诉Perl解释器,该语句是循环体中最后执行的语句。执行这条语   
句后,将退出该循环体。这个语句和C语言中的break功能类似。   
next 语句告诉 Perl 解释器,执行一次新的循环。这个语句和 C 语言中的   
continue类似。   
在Perl语言中,除了支持和C语言类似的for语句外,还有一个foreach语   
句。该语句极大方便了对数组的操作。   
foreach 单值变量 ( 列表 )     
{     
   block   
}     
每次循环的时候,SCALAR 的值是 LIST 中的下一个值,然后执行STATEMENTS语句。   
9.过程   
Perl也提供过程,方便代码重用。   
Perl语言通过下面的格式来定义过程:   
sub NAME     
{     
     STATEMENTS;     
}   
所有的过程都通过列表(数组@_)来传递参数,而过程的返回值可以是单值,也可以是列表。   
sub error   
{     
    ($message) = @_;     
    print(&quot;<b>ERROR:<b>&quot;,     
            $message,     
           &quot; /n&quot;);     
    exit(0);     
}     
10.文件测试操作符   
下面是部分常用的文件测试操作符列表:   
-r  可读   
-x  可执行     
-e  存在     
-d  是目录   
-t  是tty   
-T  是文本文件     
11.文件管理   
Perl语言还提供了对文件I/O操作的强大支持。支持重定向的方式类似,<、 >、 >>和|操作符。   
open(FD,FILENAME);     
close(FD);   
它类似于C语言中的宏常量,作为句柄而存在   
&quot;FILE&quot;           打开一个文件FILE,作为数据输入,也可以写做&quot;<FILE&quot;     
&quot;> FILE&quot;        打开一个文件FILE,作为输出,如果文件不存在,就创建     
&quot;>> FILE&quot;      以追加方式打开文件FILE,数据都添加在文件后面   
&quot;+> FILE&quot;      以读写方式打开文件FILE     
&quot;| CMD&quot;         打开一个到CMD的管道(pipe)     
&quot;CMD |&quot;         打开一个以CMD为输入的管道  
# 从FILEHANDLE所指向的文件中读入一行   
$line = <FILEHANDLE>;     
# 从FILEHANDLE所指向的文件中读入整个文件   
@lines = <FILEHANDLE>;     
在Perl中,用print写文件。Print的第一个可选参数是FILEHANDLE,参见   
下面的解释,请注意第一个参数后面,没有逗号(,):   
print(FILEHANDLE &quot;your&quot;,&quot;list&quot;,&quot;here&quot;);
  
  12.Perl的哲学   
Perl 碰巧是由一个语言学家设计的(可以这么说吧),因此它被设计成一个可以象自然语言那样使用的编程语言。   
Perl 被设计成可以进化,并且实际上也已经进化了。骆驼(Perl的徽标)是一匹委员会设计的马,但是被放到了沙漠中。沙漠中,骆驼是非常适应沙漠中的生活。马已经进化成为相当能自给自足的骆驼了,这也是选择骆驼作为 Perl 的吉祥物众多原因中的一个,而和语言学没有什么关系。我觉得和生物进化学倒是相关。   
环境在 Perl 中是十分重要的,Perl 将根据环境来判断你想要什么,而不用象其他编程语言一样必须明确地告诉它.     
数组和散列的最简单的应用哲学:当你想通过编号来查找东西的时候,你要用数组.而如果你想通过名称来查找东西,那么你应该用散列.这两种概念是互补的.   
散列使用 % 这个趣味字符来标志散列名字(如果你仔细观察 %,你会发现斜扛两边的键字和数值.)  
13.使用了尚未赋值的变量   
这个未初始化的变量会在需要的时候自动存在.遵循最小意外的原则,该变量按照常规初始化为空值,&quot;&quot; 或 0.根据使用的地方的不同,变量会被自动解释成字符串,数字或&quot;真&quot;和&quot;假&quot;(通常称布尔值).   
14.标量的环境   
在 Perl 中不同的操作符会要求特定类型的单数值作为参数.这个操作符就给这些参数提供了一个标量的环境.有时还会更明确,比如说操作符会给这些参数提供一个数字环境,字符串环境或布尔环境.Perl 会根据环境自动将数据转换成正确的形式.   
例如:  
   $camels = '123';     
   print $camels +1, &quot;/n&quot;;     
   124   
15.列表操作   
列表赋值: ($potato, $lift, $tennis, $pipe) = @home;     
他们逻辑上平行发生,因此你可以象下面一样交换两个变量: ($alpha, $omega) = ( $omega, $alpha);   
  
  作者:gnuhpc     
出处:http://www.cnblogs.com/gnuhpc/

运维网声明 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-156838-1-1.html 上篇帖子: 查看已安装PERL的模块 下篇帖子: 实用报表提取语言 Perl : Practical Extraction and Report Language
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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