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

[经验分享] Perl基础(备忘)

[复制链接]

尚未签到

发表于 2017-5-17 09:00:59 | 显示全部楼层 |阅读模式
    前两天项目中遇到了一个Perl脚本程序,需要读懂该程序,由于以前重来没有用过Perl语言,所以没法搞定。今天抽空把该语言的基础看了一遍,基本上内读懂Perl脚本程序了吧。真是如网上很多分享的经验所说,第一:会一门语言后,学习其他的语言也就容易了,所有的语言包含的内容都差不多,只要熟悉一下该语言的语法就OK了;第二:会一门语言的有经验的开发者,跟本没有必要花大量的时间把一门新语言重头读到尾来学习他,看看基础就可以用了,用的过程中不明白的再去查阅手册或资料。
    网上不少人说Perl语言受关注度越来越低,在服务器端慢慢的被PHP取代,但是作为系统脚本语言还是有他的特点的,我觉得最主要的是:强大的正则表达式和模式匹配功能,在sed和awk中也用到了类似的语法。
    下面是我学习中记下的一些乱七八糟的东西,没有什么参考价值,就当自己学习过程中熟悉用的吧。
    入门可以参考以下教程:
    http://www.cbi.pku.edu.cn/chinese/documents/perl/index.htm
  http://www.phpchina.com/resource/manual/perl/perl5-1.htm
  

  • 字符串比较与数值比较
  字符串比较用:lt,gt,eq,le,ge,ne,cmp(比较,返回1,0,or-1)。数值比较用:<, >,==,<=, >=,!=,<=>(比较,返回1,0,or-1)。
  需要注意的是,不能用数值比较符号去比较字符串,因为用数值符号比较时,会先把左右操作数转换为数值类型,非数字字符串转换结果为0。所以,例如:if (“abc”== “yes”) 判断结果为真!

  • 去掉标准输入的行尾换行符
    例如:
    $in = <STDIN>;
    print (“Hello world!\n”) if ($in eq “yes”);
    终端输入yes,结果没有输出,这是因为$in末尾有换行符,可以用模式匹配删除掉,如下:
    $in = <STDIN>;
    $in =~ s/[\r\n]//;
    print (“Hello world!\n”) if ($in eq “yes”);



  • 普通变量“$”开头,数组变量“@”开头,关联数组“%”开头,另外访问数组或者关联数组的单个元素时以“$”开头。数组元素访问用“[]”,关联数组元素访问用“{}”,例如:
    数组:@arr =(1,2,3),访问第三个元素:$arr[2];
    关联数组:@fruit =(“apple”, 1, “banana”, 2, “orange”, 12),获取元素或修改元素值:$dict{“bananas”},$dict{“bananas”}=1。
    上面的关联数组初始化也可以这样:@fruit = (“apple”=>1, “banana”=>2, “orange”=>12)。
  


  • 使用正则表达式进行模式匹配时,$&为上一次匹配成功的字符串。



  • 去掉行首或行尾的空白符(包括换行符)的正则表达式写法:
    $inputline = <STDIN>;
    $inputline =~ s/^\s+|\s+\n$//g;
  


  • 注意替换操作符s/string1/string2/和翻译操作符tr/string1/string2/的区别,前者查找string1并替换成string2,后者查找string1中的第一个字符替换为string2中的第一个字符,查找string1中的第二个字符替换为string2中的第二个字符,以此类推,也就是tr操作符不把string1和string2当做字符串而是一个个独立的字符。下面的例子显示了二者的区别。
    $str = “abc123cba”;
    $str =~ s/abc/xyz/; #结果str为:”xyz123cba”
    $str = “abc123cba”;
    $str =~ tr/abc/xyz/; #结果str为:”xyz123zyx”



  • 字符串联结和重复操作符
    联接: .
    重复:x (注意,这里是小写字母x)
    联接且赋值(类似+=): .=
    例子:
    $newstring = "hello" . "world"; #结果为”helloworld”
    $newstring = "t" x 5; #结果为”ttttt”
    $a = "be";
    $a .= "witched";  #结果为”bewitched”



  • 文件操作

open(HANDLE, "filename"); //获取读文件句柄
open(HANDLE, ">filename"); //获取写文件句柄,若文件存在则先清空内容再写
open(HANDLE, ">>filename"); //获取写文件句柄,若文件存在则在原内容之后追加
$a = <HANDLE>; //读取文件中的一行
@a = <HANDLE>; //将文件整个赋给数组@a,数组的每个元素对应文件的一行
  详见:http://blog.csdn.net/taesimple/article/details/6307639

  

  opendir($handle, $path);
while($item = readdir($handle)) {
if(-d $item && !($dic =~ m/\.$|\.\.$/)) {
...
}
if ( -f $item ) {
...
}
}

  

  

运维网声明 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-378339-1-1.html 上篇帖子: Perl -- 读写文件 下篇帖子: Perl 学习笔记 --- 15
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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