perl编程问题
一、Hash类型
1、hash遍历输出:如果hash遍历输出的时候不是按key则会按数组输出。
my %hash=(); ${hash}{"a"}="1"; ${hash}{"b"}="2"; foreach my $temp (%hash){ print "$temp \n"; } #输出结果为: #a #1 #b #2 |
hash按keys遍历,才能输出正确的结果。
my %hash=(); ${hash}{"a"}="1"; ${hash}{"b"}="2"; foreach my $temp ( keys %hash){ print "$temp \n"; my $val=${hash}{$temp}; print "$val \n" } #输出结果为: #a #1 #b #2 |
2、hash赋值问题
my %hash=(); ${hash}{"a"}="1"; ${hash}{"b"}="2"; ${hash}{"c"}{"d"}; print Dumper(%hash); #这时候c=>{},而取不到d,改成${hash}{"c"}{"d"}=""就能解决问题; $VAR1 = 'c'; $VAR2 = {}; $VAR3 = 'a'; $VAR4 = '1'; $VAR5 = 'b'; $VAR6 = '2'; |
3、获取hash的长度
#!/usr/bin/perl -w use Data::Dumper; my %h=(apple=>01, orange=>02, banana =>03); ${h}{"cccc"}{"asdfas"}=""; ${h}{"cccc"}{"asdaafas"}=""; ${h}{"cccc"}{"asaaaas"}=""; my $l=keys %{$h{"cccc"}}; print Dumper($l); 输出: #3 |
hash排序:1、按key排序 2、按值排序 cmp按ASIIC排序 <==>按数字排序
my %h=(apple=>01, orange=>02, banana =>03); foreach my $tmp (sort keys %h){ #按key排序 } |
my %h=(apple=>01, orange=>02, banana =>03); foreach my $tmp (sort {$h{a}<==>$h{b}} %h){ #按值升序排序 } |
my %h=(apple=>01, orange=>02, banana =>03); foreach my $tmp (sort {$h{b}<==>$h{a}} %h){ #按值降序排序 } |
#按值size排序 foreach my $key (sort {$fileInfo{$b}{"size"} <=> $fileInfo{$a}{"size"}} keys %fileInfo){ my $modify =${fileInfo}{$key}{"modify"}; $data[0][$rowNum][0] = ${fileInfo}{$key}{"ip"}; $data[0][$rowNum][1] = $key; $data[0][$rowNum][2] = ${fileInfo}{$key}{"size"}; $data[0][$rowNum][3] = $modify; } |
hash存放hash:
#!/usr/bin/perl -w use Data::Dumper; my %h=(apple=>01, orange=>02, banana =>03); ${h}{"cccc"}{"asdfas"}=""; ${h}{"cccc"}{"asdaafas"}=""; ${h}{"cccc"}{"asaaaas"}=""; my $l=keys %{$h{"cccc"}}; my %hh=(); $hh{"xx"}=\%h; #hash存放hash foreach my $tmp (sort keys %hh){ #print Dumper(${hh}{$tmp}); print $hh{$tmp}; foreach my $temp (sort keys %{$hh{$tmp}}){ print Dumper($hh{$tmp}{$temp}); } } |
3、Hash引用和传递
#!/usr/bin/perl -w use Data::Dumper; my %h=(apple=>01, orange=>02, banana =>03);#初始化赋值 ${h}{"cccc"}{"asdfas"}=""; ${h}{"cccc"}{"asdaafas"}=""; ${h}{"cccc"}{"asaaaas"}=""; print(\%h); sub print{ my $h=shift;#取出参数数组中的第一个 #my ($h,$l)=@_;接收多个参数 foreach my $temp (sort keys %{$h}){#将$h标识为hash,如果是数组就用@ print Dumper(${}->{$temp});#取出值 print Dumper(${}->{$temp}{"asdfas"});#取出值 } foreach my $temp (sort keys %{$h}){#将$h标识为hash,如果是数组就用@ print Dumper(${}->{$temp});#取出值 foreach my $tmp (sort keys %{$h}->{$temp}){ print Dumper(${}->{$temp}{$tmp});#取出值 } } } |
二、数组
1、降序排序
my @arr=1..20; foreach my $n(sort {$b <==>$a} @arr){ } |
三、时间
1、获取整点或者半点
my $time =time; my $tmp=$time%1800;#获取余数 my $check_time = (($time-$tmp) / 1800) * 1800;#取半点或者整点 毫秒数 |
四、子程序
1、子程序引用调用
sub a{} my %hash=(); $hash{"callback"}=\&a;#传递子程序 \&$hash{"callback"}();#调用子程序 |
五、应用设计模式及模块
#! /usr/bin/perl -w # 处理通用模板 # 1、判断是否主机运行 # 2、执行回调方法 # 3、判读是否邮件发送(邮件发送失败3次告警) # 4、判断是否发送文件 # 5、判断是否发送告警 # 6、清除历史文件 # package DataHandling; require Exporter; use strict; our @ISA = qw (Exporter);#继承Exporter our @Exoprt = qw (process);#导出方法 our @version = 1.0; #对外发布process方法 #param:hash #param={ # needMaster:true/false, # callback:sub #} #process处理结果 #result={ # mail:hash:{mailMaster:true/false,mailMeta:hash:{},mailData:Array}, # file:hash:{fileMaster:true/false,fileMeta:hash:{},fileData:Array,clearStrategy:regular expression}, # alarm:hash:{alarmName:String,alarmType:String,alarmContent:String} #} sub process{ my ($core)=@_; my %result;#处理 if(defined($core) && %{$core}){ %result=\&${$core}->{"callback"}();#执行回调方法 sendMail(${result}{"mail"}); sendFile(${result}{"file"}); sendAlarm(${result}{"alarm"}); clearFile(${result}{"file"}); dealSendFailure(); }else{ print "error param!"; exit; } } sub sendMail{} sub sendFile{} sub sendAlarm{} sub clearFile{} sub dealSendFailure{} 1; |
六、字符串和数字
1、比较:字符串使用
操作符描述: lt小于 gt大于 eq等于 le小于等于 ge大于等于 ne不等于 cmp比较,返回1,0,or-1 |
2、比较:数字比较
操作符描述 <小于 >大于 ==等于 <=小于等于 >=大于等于 !=不等于 <=>比较,返回1,0,or-1 |
七、调用外部命令
1、`cmd`
my $re=`cat -e /usr/local/test.txt`;#$re命令执行的结果 my $ret = $?;#$?命令执行是否成功,0为成功 |
2、system(cmd)
my $result=system("wget -T 60 -N -P ${BASE_PATH}temp/ --http-user=wxstcdc --http-password=w,,,xstc-dc555xx1 http://wx.wxscndxns.com/baxsiduloxg/wxsflow.log >/dev/null 2>&1"); #result命令执行是否成功,0为成功 if($result==0){#执行成功 move("${BASE_PATH}temp/wxsflow.log", "${BASE_PATH}wxsflow.log"); } |
八、深度克隆
1、一些场景中需要对引用类型进行拷贝,然后释放原类型的数据,达到一种缓存的效果。例如:hash存储数据,时间作为key,对时间下的所有值进行累加。如果数据量庞大,存取hash次数会随着数据量的增长而增多,hash的性能会下降。这种情况下,可以将时间点拆分为多个,一次处理一个时间点,处理完将其拷贝至其他hash中,释放现有hash,可以减少hash的数据膨胀导致性能问题,并且在合适的时刻将汇总的hash数据写入文件,释放内存,达到控制内存增长问题。
use Storable qw(dclone);#克隆模块 #深度克隆数据 %DC_fullData =(%DC_fullData,%{ dclone \%fullData }) ; %fullData=(); |
perl编程问题的更多相关文章
- perl编程中的map函数示例
转自:http://www.jbxue.com/article/14854.html 发布:脚本学堂/Perl 编辑:JB01 2013-12-20 10:20:01 [大 中 小] 本文介绍 ...
- Perl 编程 基础用法
Perl 编程 标准头部写法 #!/usr/bin/perl -w # 标准的头部写法,-w意为显示警告 变量 $a=$b+10 # $a和$b都不需要定义,拿过来就用 Note: $flag=0 如 ...
- 《高级Perl编程》 读书笔记
http://blog.chinaunix.net/uid-20767124-id-1849881.html
- 精通Perl(第2版)
精通Perl(第2版)(通往Perl大师之路必读经典书籍,体现了一种编程思维,能够帮你解决很多实际的问题) [美]brian d foy(布瑞恩·D·福瓦)著 王兴宇 刘宸宇 译 ISBN 978 ...
- Perl 正则表达式
匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)替换:s/<pattern>;/<replacement>;/转化: ...
- perl语言书籍教程推荐
互动出版网计算机频道.为您推荐关于perl语言的书籍教程.包括perl push.perl chomp以及perl python等perl语言内容. perl语言书籍一.<Perl语言编程 第四 ...
- perl tk说明
介绍: perl/Tk(也被称为pTK) 是一个模块和代码的收集,尝试 简单的配置Tk 8 部件工具包到强大的词素文文字, 动态内存,I/O, 和面向对象,它是一种解释脚本语言 来制作部件和程序 使用 ...
- 终于懂得Perl句柄是什么意思了
一直以来就对Perl语言特别感兴趣,去年特别膨胀的 直接买了一本大骆驼书,想好好看看Perl编程,结果看到I/O,句柄的时候就觉得云山雾罩,不知道是在说啥了, 最近,京东打折,终于有机会又买了本小骆驼 ...
- perl代码调试
perl调试教程 一.DESCRIPTIONA (very) lightweight introduction in the use of the perl debugger, and a point ...
随机推荐
- 10个关于Android开发的实用教程
本文为致力于Android应用的开发人员精选了几个不错的实用教程,无论是初学者还是专业开发人员都应该能够从中获益.这些教程中有不少是关于绘图和地址服务运用的,另外一些则是SDK相关的.希望对大家有所帮 ...
- STL_算法_查找算法(binary_search、includes)
C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) 全部容器适用(O(log(n))) 已序区间查找算法 binary_search //二分查 ...
- 5.IntellijIDEA常用快捷键总结
转自:https://blog.csdn.net/qq_17586821/article/details/52554731下面的这些常用快捷键需要在实际操作中不断地体会才能真正感受到它们的方便之处. ...
- 登录那些事儿+ Session原理
http://cnodejs.org/topic/5671441a1d2912ce2a35aaa1 登录那些事儿 http://www.jianshu.com/p/2b7c10291aad Sess ...
- django 笔记11 装饰器
在views.py创建 一般用来cookies的装饰器 def auth(func): def inner(request, *args, **kwargs): v = request.COOKIES ...
- SecondaryNameNode合并元信息过程
- VS Code(Visual Studio Code)
这次推荐 VS Code,这是个跨平台.免费的代码编辑器,集成开发.调试.编译为一身.单成启动速度,资源占用,就已经赢了各大编辑器(什么 SB.N++之类).以前觉得 VS 2015 是宇宙最强编辑器 ...
- 51Nod 1433 0和5(数论)
小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5.小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数.使得这个数尽可能大,而且可以被90整除. 注意: 1.这个数没有前 ...
- PHP——下载图片到本地代码
<?php //获取网页图片 $url = "http://qlogo2.store.qq.com/qzone/393183837/393183837/50"; $curl ...
- day01-Python介绍,安装,idea
一. python 简介 Python,读作['paɪθɑn],翻译成汉语是蟒蛇的意思,Python 的 logo 也是两条缠绕在一起的蟒蛇的样子,然而 Python 语言和蟒蛇实际上并没有一毛钱关系 ...