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

[经验分享] 《Beginning Perl》读书笔记1:0~3章

[复制链接]

尚未签到

发表于 2015-12-26 13:51:02 | 显示全部楼层 |阅读模式
Perl概览
  Perl最早由Larry Wall开发,是一种“胶水”语言,例如将上一个程序的输出做简单处理,转换为下一个程序的输入。第一版Perl发布于1987年12月18日,然后一直稳步升级,直到Perl 5. Perl 5是一个大升级,包含了一些对于Perl 4旧有语法的改进。该书写作之时的Perl版本是5.10.1。Perl仍在不断升级中,下一个大版本是Perl 6,Perl 6是全部重写的Perl实现,与之前的版本不同,完全由社区贡献代码。
  Perl的宗旨是“不止一种做法”(TMTOWTDI, There’s More Than One Way To Do It.)。具有以下优点:


  • 易于学习
  • 代码可读性好
  • 可移植(portable)
  • 善于进行文本处理
  • Perl是高层语言(high-level language),无需像C/C++考虑诸多细节

第1章:初识Perl

Hello, World!
  第一个Perl程序(helloworld.pl):



#!/usr/bin/perl
use warnings;
print "Hello, world!\n";

  
  
  Perl将源码中#之后到行尾的内容视为注释。而在Linux/Unix中,#!program表示由program处理该文本文件,因此首行写#!/usr/bin/perl表示该文件由/usr/bin/perl处理,若该文件有+x权限,则执行./helloworld.pl等同于执行perl helloworld.pl

开启警告信息
  在源码开始处声明
  use warnings;
  或以-w参数调用perl运行.pl源码均可开启警告信息

调试
  使用perl –d运行.pl可以调试

第2章:标量
  Perl中的标量(scalar)是指单个的简单数据类型,例如整数、浮点数、字符串。字面量(literal)是一个常量,例如5. 变量是可以重赋值的标识符,所有变量以$开头,例如$number。

数字


  • Perl中可以用下划线为数字分段,例如10,000,000可以写作10_000_000
  • 十进制数直接写,0开头八进制,0b开头二进制,0x开头十六进制

字符串


  • 单引号对’’/双引号对””均可表示字符串,区别是单引号对中的字符串不处理转义符(’除外,\’表示’),例如print '\tThis is a single-quoted string.\n'; 输出\tThis is a single-quoted string.\n而双引号对中的字符串处理转义符。
  • 也可以用q//和qq//表示字符串(两/间为字符串内容),q//相当于单引号写法,qq//相当于双引号写法。除/外可以使用任何非字符、非数字的字符,例如|、#. 除此之外还可以使用{}、[]、()、<>这四种符号对。
  • 可以用就地文档(here-document)在代码中包含大量文本。就地文档的格式是:
  <<label
  文档内容
  label
  其中label可以是EOF或是EOT. 文档内容按照双引号写法的字符串内容处理。通常有字符串过长有多行时可用就地文档声明,例如:



print <<EOF;
This is a here-document. It starts on the line after the two arrows,
and it ends when the text following the arrows is found at the beginning
of a line, like this:
EOF

  


  • 数字/字符串转换

    • "0.25" * 4的值为1
    • hex()函数将十六进制写法的数值字符串转换为Number类型
    • oct()解析八进制写法的数值字符串


运算符


  • +、-、*、/、++、--、(、)、&、|、^、~、==、!=、&&、||、!、=、,同C/C++、Java
  • $a = $a <some operator> $b; 可以简写为$a <some operator>= $b; 例如$a=$a+$b可以写作$a+=$b同C/C++、Java
  • **是幂运算运算符,2**4=16
  • Perl中以下值是布尔值false:0(数字0)、”0”(字符串”0”)、””(空字符串)、Undefined、空表(empty list)
  • <=>运算符:a<=>b比较a和b的大小,a大为1,相等为0,b大为-1
  • 字符串运算符:.为字符串合并算符,”ba”.”nana”->”banana”
  • 通过x可以进行字符串乘法”ba”.(”na” x 2) ->”banana”
  • ord()可取得一个字符的ASCII值,例如ord(“f”)->102

变量


  • 变量作用域为当前代码块以及该代码块内的所有子块。
  • 通常情况下可任意声明、赋值变量。但这样存在一个问题,如果一开始声明$foo = 4; 而后面写成了$ofo = 7;会使得代码工作不正确(而且还一下子发现不了)
  • 可通过声明use strict;让Perl严格检查变量使用。使用未定义/初始化的变量将会导致编译错误。在strict模式下声明变量必须使用my关键字,例如my $record;. 为了代码规范易维护建议使用use strict
  • 特殊变量:有一些特殊变量,例如$_代表了很多函数输入、输出的默认参数。关于特殊变量可参考perldoc perlvar
  • 双引号中可使用变量,变量将会被代换为其值。例如



my $name = "fred";
my $salutation = "Dear $name,";
print $salutation, "\n";
  输出
  Dear fred,

标准输入<STDIN>


  • my $yen = <STDIN>;从STDIN中读一次,每赋值一次就读一次
  • chomp()修改输入参数的指定的字符串,如果该串最后一次字符是换行符,则将其去掉,如果不是则不做修改
  • chop()函数移除输入字符串的最后一个字符
  • chomp()和chop()直接修改输入,无返回值

两个函数


  • exit()用于退出,exit()等价于exit(0),正常退出。exit(1)为带错误退出
  • die()用于报错退出,die接受一个字符串参数,将其打印至STDERR然后exit(1)退出两个函数

第3章:流程控制


  • 与C/C++、Java相同的:

    • if(){…}else(){…}
    • for(init; cond; op){…}
    • while(cond){…}
    • do{…}while(cond)
    • 无限循环while(1){…}


  • 逻辑算符

    • 字符串比较算符:gt(>)、lt(<)、ge(>=)、le(<=)、eq(==)、ne(!=) 注意括号内仅为注释,不可替代通用
    • defined($var)算符。如果$var已定义则为true,反之false.
    • 可用and代替&&,or代替||,not代替!. 注意and/or/not的算符优先级与&&/||/!不同
    • if(){…}elseif(){…}elseif(){…}else(){…}可用于多分支流程控制
    • unless(cond)等价于if(!cond)
    • 可以将





if ($number == 0) {
die "can't divide by 0";
}

  
  写作



die "can't divide by 0" if $number == 0;
  


  • until(cond){…}等价于while(!cond){…}
  • foreach my $var list可用于使用变量$var遍历列表list,例如foreach my $number (1 .. 10) {…}
  • do{…}until(cond)等价于do{…}while(!cond)
  • Perl中的last等于C/C++、Java中的break,next等于continue
  • redo语句可以重启循环,从循环开始处执行。注意redo重启循环对于for和while/until并不进行条件检查,而是直接从头开始执行循环(个人理解,就是在next的基础上去掉条件检查)
  • 循环标记。默认last、next、redo仅仅对所在的那一层循环有效。如果想跳至外层则需要使用标记:



OUTER: while ($i <= 5) {
my $j = 1;
while ($j <= 5) {
last OUTER if $j == 3;
print "$i ** $j = ", $i ** $j, "\n";
$j++;
}
$i++;
}

  

运维网声明 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-156600-1-1.html 上篇帖子: Perl起步 下篇帖子: Perl:化繁为简
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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