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 ...
随机推荐
- 转:百分百激活office for mac2011的激活文件
方法:1点击finder 2点击系统盘 3点击资源库 4找到Preferences文件夹 5用压缩包里的 ...
- 从client(content="<p></p>")中检測到有潜在危急的 Request.Form 值。
最近的站点要做一个新闻模块,站点后台须要对新闻进行管理,拿到富文本编辑器的内容,在获取的时候会报一个错误:从client(content="<p>.....</p>& ...
- Oracle创建用户以及备份还原数据库操作
-- Create the user create user XX identified by "" default tablespace USERS temporary tabl ...
- poj 2513 欧拉回路+并查集推断是否联通+Trie树
http://poj.org/problem? id=2513 最初看到 第一感觉---map 一看250000的数据量 果断放弃 然后记得曾经看过.trie取代map.尤其当数据量特别大的时候 学 ...
- 使用JSON Web Token设计单点登录系统--转
原文地址:https://leon_lizi.gitbooks.io/json-web-token/content/chapter2.html 用户认证八步走 所谓用户认证(Authenticatio ...
- ASP.NET Identity 角色管理(Roles)
当我们使用ASP.NET 4.5创建模板项目时,会发现模板只提供了ApplicationUserManager用于用户的登录注册.修改.设置等,而没有提供与用户角色相关的代码,对此就需要我们自己手动的 ...
- vue中makeMap方法的使用 (定义注册一些值 后期方便使用)
function makeMap ( str, expectsLowerCase ) { var map = Object.create(null); var list = str.split(',' ...
- GoldenGate 反向切换步骤
1 事先配置好反向复制链路: 2 停止源端的应用程序; 3 确认源端Capture已捕获所有的Redo信息: GGSCI>info all GGSCI>info ext_app 4 确认源 ...
- WLAN HAL
WLAN HAL WLAN 框架具有三个 WLAN HAL 表面,分别由三个不同的 HIDL 软件包表示: 供应商 HAL:Android 专用命令的 HAL 表面.HIDL 文件位于 hardw ...
- [APIO2014]回文串 后缀自动机_Manancher_倍增
Code: // luogu-judger-enable-o2 #include <cstdio> #include <algorithm> #include <cstr ...