一、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编程问题的更多相关文章

  1. perl编程中的map函数示例

    转自:http://www.jbxue.com/article/14854.html 发布:脚本学堂/Perl  编辑:JB01   2013-12-20 10:20:01  [大 中 小] 本文介绍 ...

  2. Perl 编程 基础用法

    Perl 编程 标准头部写法 #!/usr/bin/perl -w # 标准的头部写法,-w意为显示警告 变量 $a=$b+10 # $a和$b都不需要定义,拿过来就用 Note: $flag=0 如 ...

  3. 《高级Perl编程》 读书笔记

    http://blog.chinaunix.net/uid-20767124-id-1849881.html

  4. 精通Perl(第2版)

    精通Perl(第2版)(通往Perl大师之路必读经典书籍,体现了一种编程思维,能够帮你解决很多实际的问题) [美]brian d foy(布瑞恩·D·福瓦)著   王兴宇 刘宸宇 译 ISBN 978 ...

  5. Perl 正则表达式

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

  6. perl语言书籍教程推荐

    互动出版网计算机频道.为您推荐关于perl语言的书籍教程.包括perl push.perl chomp以及perl python等perl语言内容. perl语言书籍一.<Perl语言编程 第四 ...

  7. perl tk说明

    介绍: perl/Tk(也被称为pTK) 是一个模块和代码的收集,尝试 简单的配置Tk 8 部件工具包到强大的词素文文字, 动态内存,I/O, 和面向对象,它是一种解释脚本语言 来制作部件和程序 使用 ...

  8. 终于懂得Perl句柄是什么意思了

    一直以来就对Perl语言特别感兴趣,去年特别膨胀的 直接买了一本大骆驼书,想好好看看Perl编程,结果看到I/O,句柄的时候就觉得云山雾罩,不知道是在说啥了, 最近,京东打折,终于有机会又买了本小骆驼 ...

  9. perl代码调试

    perl调试教程 一.DESCRIPTIONA (very) lightweight introduction in the use of the perl debugger, and a point ...

随机推荐

  1. 实现图像剪裁 jquery.Jcrop

       配合 jquery.Jcrop 实现上传图片进行剪裁保存功能    <script src="js/jquery.min.js"></script> ...

  2. Tomcat连HBase报错: HTTP Status 500 - java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext

    Tomcat中连接HBase数据库,启动的时候报错: HTTP Status 500 - java.lang.AbstractMethodError: javax.servlet.jsp.JspFac ...

  3. hadoop-02-关闭防火墙

    hadoop-02-关闭防火墙 su root service iptables status #查看状态 即时关闭: service iptables stop #关闭 重启之后关闭: chkcon ...

  4. Android ADB工具-截图和录制视频(五)

    Android ADB工具-截图和录制视频(五) 标签(空格分隔): Android ADB 7. 截图和录制视 命令 功能 adb shell screencap –p <path/file& ...

  5. [MST] Create an Entry Form to Add Models to the State Tree

    It is time to add new entries to the wishlist. We will achieve this by reusing forms and models we'v ...

  6. USACO Section 1.3 : Calf Flac (calfflac)

    题意:据说假设你给无限仅仅母牛和无限台巨型便携式电脑(有很大的键盘),那么母牛们会制造出世上最优秀的回文. 你的工作就是去寻找这些牛制造的奇观(最优秀的回文). 在寻找回文时不用理睬那些标点符号.空格 ...

  7. vim 插件之vundle

    vundle这个插件主要是用来插件管理的.它可以根据你配置的插件地址,自动下载.更新.删除插件,非常的好用 地址 https://github.com/gmarik/vundle 然后你在 .vim下 ...

  8. 安卓第一课:android studio 的环境搭建与真机运行以及遇到的问题

    AS的下载: https://developer.android.com/studio/index.html AS的安装: android studio, sdk, virtual device都要安 ...

  9. Hadoop框架基础(三)

    ** Hadoop框架基础(三) 上一节我们使用eclipse运行展示了hdfs系统中的某个文件数据,这一节我们简析一下离线计算框架MapReduce,以及通过eclipse来编写关于MapReduc ...

  10. hdu 4825 xor sum(字典树+位运算)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others)Total S ...