0、前言与目录
由于近期有闲,想提升一下自我的技能;故想学习一下Perl脚本语言,想利用这个脚本提升开发的效率!
首先我使用小骆驼(perl语言入门)进行学习,那么就先将小骆驼的目录列出:
- 简介
- 标量数据
- 列表与数组
- 子程序
- 输入与输出
- 哈希
- 漫游正则表达式王国
- 用正则表达式进行匹配
- 用正则表达式处理文本
- 其他控制结构
- perl模块
- 文件测试
- 目录操作
- 字符串与排序
- 智能匹配与given-when结构
- 进程管理
- 高级perl技巧
1、简介
首先作者介绍了Perl这个名字的含义,Perl是一个溯写词(backronym),而不是一个缩写词(acronym),这是因为该语言作者(Larry Wall)是先想出了这个词,然后在考虑怎么解释这个名字。现在主要被认同的名称有:“实用摘录与报表语言(Practical Extraction and Report Language)”和“病态折中式垃圾列表器(Pathologically Eclectic Rubbish Lister)”
该语言的一个特点是学习比较难,但完成学习后的使用会非常方便;这是由于作者在设计该语言的时候就偏向于程序员的使用便捷而非容易学习。选择这种方式的原因也很简单,学只学一次,而用却是一辈子可以用下去。所以Perl有很多便捷的写法,可以让使用者节省大量的时间;比如大部分函数都具有默认行为,这种默认行为在使用的时候很方便,可对于初学者来说可以说是噩梦了。例如:
while(<>){
chomp;
print join("\t",(split/:/)[0,2,1,5],"\n");
}
以上是本人认为简介中有用的内容,仅供参考!
2、标量数据
对于标量数据也就是数字和字符串,perl对这一块做了比较多的工作,在大多数情况下让使用者可以不区分这两者的区别而直接使用。对于标量数据最常见的情况也就是将数据存入到一个标量变量中。在对标量数据操作中,需要注意的有一下几点:
- 单引号与双引号的区别
Perl双引号和单引号的区别: 双引号可以正常解析一些转义字符与变量,而单引号无法解析会原样输出。其中也有个例外,单引号内反斜线后续接反斜线或者单引号也是表示转义的。
另注:双引号内字符串有一种特性成为标量内插:
$meal = "noodles";
$test = "I ate $meal"; # $test="I ate noodles"
$test = 'I ate noodles'.$meal; # 另一种等效的写法,使用“.”操作符连接
上述代码描述了标量内插;也写了一种使用“.”句号操作符的连接情况也能实现相同的功能。同时下一章才讲到的列表也是可以在双引号内进行内插的!
- 反斜线转义符号
在双引号内的字符串使用转义字符实现转义含义,或保存相应的转义所使用的符号(如反斜杠“\”)。
- chomp
功能很简单却非常常用的一个函数,其只能作用于单个变量,且该变量必须为字符串,chomp()的任务就是去掉字符串末尾的换行符。
chomp($text = <STDIN>); #从输入值读入字符串,并去掉换行符存入变量$text中。
- undef值
在变量未被赋值时,其状态即为undef;或者操作符在参数越界或不合理是会返回undef(例如:STDIN没有输入时,返回状态为undef)。对于数字时,undef会被作为0;对于字符串时,undef会被作为空字符串。
对于操作符可能返回undef的值,perl有defined的函数对返回状态进行判别,使用者可以用该函数判断返回状态并进行相应的操作。例:
$input = <STDIN>;
if( defined($input) ){
print "The input was $input";
}
else {
print "No input available!\n";
}
$input = undef; #也可手动向变量赋undef的状态
第二章的主要重要内容差不多就以上了,其他操作都符合一般编程语言的思维就不再赘述。后面就做一下节后习题!
节后习题:
由于该章题目较为简单就不进行解释,直接上代码:
第三题代码如下:
#!/usr/bin/perl
$pi = 3.1415926;
#read user input
print "please input radius\n";
chomp( $radius = <STDIN> );
#determine if the input radius is less than 0
if($radius < 0) {
$radius = 0;
}
#compute the result
$perimeter = 2 * pi * $radius;
print "perimeter = $perimeter\n";
第五题代码如下:
#!/usr/bin/perl
#read user input
print "please input a string\n";
chomp( $s = <STDIN> );
#read user input
print "please input num\n";
chomp( $num = <STDIN> );
#determine if the input number is less than 0
if($num =< 0) {
print "please input a digital great than 0\n";
}
#output the string
while($num--){
print "$s\n";
}