一、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. [转载]深入JVM锁机制-synchronized

    转自:http://blog.csdn.net/chen77716/article/details/6618779,并加上少量自己的理解 目前在Java中存在两种锁机制:synchronized和Lo ...

  2. 待字闺中之Magic Index 分析

    给定一个数组A,当中有一个位置被称为Magic Index,含义是:如果i是Magic Index.则A[i] = i. 如果A中的元素递增有序.且不反复,请给出方法,找到这个Magic Index. ...

  3. BeautifulSoup的高级应用 之.parent .parents .next_sibling.previous_sibling.next_siblings.previous_siblings

    继上一篇BeautifulSoup的高级应用,主要解说的是contents children descendants string strings stripped_strings.本篇主要解说.pa ...

  4. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第1章节--SharePoint 2013 介绍 处理开发者需求

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第1章节--SharePoint 2013 介绍 处理开发者需求         SharePoint本质上是一个平台.你 ...

  5. JAVA学习第四十六课 — 其它对象API(二)Date类 &amp; Calendar类(重点掌握)

    Date类(重点) 开发时,会时常遇见时间显示的情况,所以必须熟练Date的应用 <span style="font-family:KaiTi_GB2312;font-size:18p ...

  6. FPGA静态时序分析——IO口时序(Input Delay /output Delay)

    1.1  概述 在高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束和时序例外约束才能实现PCB板级的时序收敛.因此,FPGA时序约束中IO口时序约束也是一个重点.只有约束正确 ...

  7. bzoj1497: [NOI2006]最大获利(最大权闭合子图)

    1497: [NOI2006]最大获利 题目:传送门 题解: %%%关于最大权闭合子图很好的入门题 简单说一下什么叫最大权闭合子图吧...最简单的解释就是正权边连源点,负权边连汇点(注意把边权改为正数 ...

  8. hdoj--2138--How many prime numbers(暴力模拟)

    How many prime numbers Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  9. redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请求,导致 redis 短时间不可用

    redis 突然大量逐出导致读写请求block   内容目录: 现象 背景 原因 解决方案 ref 现象 redis作为缓存场景使用,内存耗尽时,突然出现大量的逐出,在这个逐出的过程中阻塞正常的读写请 ...

  10. Laravel-错误调试与记录日志

    Laravel-错误调试与记录日志 标签(空格分隔): php 错误调试 配置 修改/config/app.php 'debug' => env('APP_DEBUG', true), 开启de ...