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

[经验分享] perl编程的一些笔记

[复制链接]

尚未签到

发表于 2017-5-17 11:12:44 | 显示全部楼层 |阅读模式
由于工作需要,需要用perl编写一些程序,所以花了一个下午看了一下perl,基本perl编程
已经可以了,做了一些笔记。

1. 由<STDIN>返回的文本行也包含用户键入的换行符(因为按下了Enter键)。在
大多数情况下,你不希望在字符串的结尾处出现换行符。若要删除换行符,可以像下面这样
使用chomp运算符.

2. 关于字符串和数字的说明
(1) 如果某个元素看上去是个数字,那么Perl在需要数字时可以将它用作数字;
(2) 如果某个元素看上去是个数字,那么当Perl需要一个字符串时,它可以使用数字的字符
串表示法(使用.链接起来)


3. 流程
条件:
if (exp) {
} elsif (exp) {
} else {
}

unless(exp) {
#exp为假时执行
}

数字关系运算符: ==, >, <, >=, <=, !=
字母: eq, gt, lt, ge, le, ne

规则:
数字0为假
空的字符串("")和字符串"0"为假
未定义值undef为假
其他东西均为真

逻辑运算符: &&(and), ||(or), !(not)

循环:
while(exp) {
}

for(init; test; icrement) {
}

注意:

if (test_expression) {
expression;
}
等效为: expression if (test_expression)

循环控制:
last-->等效于break;
next-->等效于continue;

4. 数组
@后跟一个有效变量名表示数组;
(1) qw(xx xxx)-->包含字符串
(2) 范围运算符( 1 . . 1 0 )产生1-10(包括1-10)之间的所有的数的列表
(3) $数组名[下标]的方式访问数组元素
(4) $#arrayname获得数组的最后一个元素的下标; $size=@array得到数组的元素
(5) 遍历数组:
for ($index=0; $index<@array; $index++) {
..$array[$index]...
}

foreach $elem (@array) {
    do with $elem
}

得到的元素都是引用.

while(<STDIN>) {
($firstchar)=split(//, $_);
print "$firstchar\n";
}
$_这里是读取到的当前行


split是分割; join是合并

排序: 默认是ASCII排序, 可以自定义排序顺序
@sorted=sort {
return (1) if ($a > $b);
return (0) if ($a == $b);
return (-1) if ($a < $b);
} @numbers;


5. 文件
(1) 打开和关闭
open(filehandle, filepath) || die--->执行成功, 则打开文件; 执行失败, 则执行die信息
close(filehanle) 关闭句柄
(2) 读取文件
方式一:
while(defined($a=<filehandle>) {
print $a;
}
方式二:
如果尖括号运算符是while循环的条件表达式中的唯一元素,那么perl将自动把输入行赋予该
特殊变量$ ,并重复运行该循环,直到输入耗尽为止
while(<filehandle>) {
print $_;
}

(3) 写入文件
open(filehandle, ">filepath")
open(filehandle, ">>filepath")

print filehandle data


6. 模式匹配
匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)
替换:s/<pattern>;/<replacement>;/
转化:tr/<pattern>;/<replacemnt>;/

这三种形式一般都和 =~ 或 !~ 搭配使用(其中 "=~" 表示相匹配,在整条语句中读作 does,"!~" 表示不匹配,在整条语句中读作 doesn't),
并在左侧有待处理的标量变量。如果没有该变量和 =~ !~ 操作符,则默认为处理 $_ 变量中的内容。举例如下:
$str = "I love Perl";

$str =~ m/Perl/; # 表示如果在 $str 中发现 "Perl" 字符串,则返回 "1" 否则返回 "0"。

$str =~ s/Perl/BASH/; # 表示将变量 $str 中的 "Perl" 字符串替换为 "BASH",如果发生此替换则返回 "1",否则返回 "0"。

$str !~ tr/A-Z/a-z/; # 表示将变量 $str 中的所有大写字母转化为小写字母,如果转化发生了则返回 "0",否则返回 "1"。


7. 哈希结构
$map{'key'}='test';

(1) 列表初始化map
成对的当作key-value
(2) 使用=> 初始化
%food=('apple' => 'fruit', 'pear' => 'fruit');
(3) 遍历key
foreach $key (keys %map) {
print "$key"
}

@valueslist = values %map;
@keylist = keys %map;

(4) 检查是否包含某个关键字,不是关键字的值:
if (exists $Hash{keyval} {
}

(5) 删除关键字:
delete $Hash{keyval}

8. 函数
使用@_表示参数
$_[下标]取参数


eclipse的插件支持:
http://e-p-i-c.sf.net/updates


Perl里面的map, 是一种道具,可以让你的函数或者表达式,很方便地施用到一系列对象上去。
1. 让我们先看map的语法
map BLOCK LIST
map EXPR, LIST
BLOCK是一个用{}包围的代码块。EXPR可以是子函数名、正则表达式等。LIST是输入列表。
简单地说,map就是起了一个替代foreach循环的作用,map会把数组LIST中的元素挨个取出,放到系统变量$_中,然后调用BLOCK去 处理。值得强调的是,除非有很特殊的理由,不要去修改$_的值,因为修改$_就是直接改了原始数组里的元素!BLOCK 处理过的结果由map返回,仍然是一个数组。
2. 一个例子:计算一系列文件大小
my @sizes = map { -s $_ } @filenames;
上面例子用-s操作取得一些文件的大小,存到数组中去。
3. 是不是说map函数的输入数组和输出数组一定等长呢?不一定的,看这个
my @books = ( 'Pride and Prejudice', 'Emma', 'Masfield Park', 'Sense and Sensibility', 'Nothanger Abbey', 'Persuasion', 'Lady Susan', 'Sanditon', 'The Watsons');
现在取出书名里面所有用到的单词,并且全部转换成大写
my @words = map { split( //s+/, $_)} @books;
my @uppercases = map uc, @words;
在split起过作用之后,当然@words的长度要比@books长了。
split的用法:http://perldoc.perl.org/functions/split.html

运维网声明 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-378468-1-1.html 上篇帖子: 使用PAR发布Perl应用 下篇帖子: Perl学习文档——Perl高级功能(CGI编程)《Perl编程24学时教程》
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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