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 ...
随机推荐
- [转载]深入JVM锁机制-synchronized
转自:http://blog.csdn.net/chen77716/article/details/6618779,并加上少量自己的理解 目前在Java中存在两种锁机制:synchronized和Lo ...
- 待字闺中之Magic Index 分析
给定一个数组A,当中有一个位置被称为Magic Index,含义是:如果i是Magic Index.则A[i] = i. 如果A中的元素递增有序.且不反复,请给出方法,找到这个Magic Index. ...
- BeautifulSoup的高级应用 之.parent .parents .next_sibling.previous_sibling.next_siblings.previous_siblings
继上一篇BeautifulSoup的高级应用,主要解说的是contents children descendants string strings stripped_strings.本篇主要解说.pa ...
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第1章节--SharePoint 2013 介绍 处理开发者需求
BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第1章节--SharePoint 2013 介绍 处理开发者需求 SharePoint本质上是一个平台.你 ...
- JAVA学习第四十六课 — 其它对象API(二)Date类 & Calendar类(重点掌握)
Date类(重点) 开发时,会时常遇见时间显示的情况,所以必须熟练Date的应用 <span style="font-family:KaiTi_GB2312;font-size:18p ...
- FPGA静态时序分析——IO口时序(Input Delay /output Delay)
1.1 概述 在高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束和时序例外约束才能实现PCB板级的时序收敛.因此,FPGA时序约束中IO口时序约束也是一个重点.只有约束正确 ...
- bzoj1497: [NOI2006]最大获利(最大权闭合子图)
1497: [NOI2006]最大获利 题目:传送门 题解: %%%关于最大权闭合子图很好的入门题 简单说一下什么叫最大权闭合子图吧...最简单的解释就是正权边连源点,负权边连汇点(注意把边权改为正数 ...
- hdoj--2138--How many prime numbers(暴力模拟)
How many prime numbers Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请求,导致 redis 短时间不可用
redis 突然大量逐出导致读写请求block 内容目录: 现象 背景 原因 解决方案 ref 现象 redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请 ...
- Laravel-错误调试与记录日志
Laravel-错误调试与记录日志 标签(空格分隔): php 错误调试 配置 修改/config/app.php 'debug' => env('APP_DEBUG', true), 开启de ...