存档

2014年1月 的存档

[perl] 变量内存占用及引用计数

2014年1月10日 1 条评论

一、变量内存占用
场景:
读入一个非常大的文本文件,大概180m,处理逻辑很简单,可以忽略
伪代码如下

#!/usr/bin/perl

open(FH,"ip.txt");

#my @a=<FH>;

while (<FH>){
    chomp;
    $a .= $_;
}

1. 当直接while 读取文件句柄时,使用pmap查看程序占用内存在220m左右,可以接受
2. 当把文件句柄读入数组时,使用pmap查看程序占用内存2.1g左右,使用惊人
阅读全文…

分类: PERL/PHP技术 标签:

一些命令备忘

2014年1月10日 没有评论

perldoc:
perldoc perltoc # Perl 文档目录,了解其概要
perldoc -f # 查询 Perl 内置函数
perldoc -v # 查询 Perl 预定义变量
perldoc -q # 搜索 Perl FAQ
perldoc -m # 查看 Perl 模块
perldoc -l # 显示 Perl 模块路径
perldoc -u # 查看 Pod 源文件
perldoc -t # 无格式输出

rpm:

yum:

sed ‘/a/,/b/ s/^/#/’ file.conf 模式匹配,ab之间包括ab,行首加#

分类: 技术笔记 标签:

[perl]数组与列表

2014年1月10日 没有评论

列表是标量的集合,数组是存储列表的变量。
更精确的说,列表指的是数据,而数组指的是变量。列表的值不一定放在数组里,但每一个数组变量都一定包含一个列表(即使列表可能是空的)。

列表与数组最主要的区别在于在标量环境中:数组被解释为其长度;而列表则被解释为其最后一个元素,此时列表相当于由逗号操作符组成的表达式。
测试代码:

@array = ( "a", "b", "c" );
$num   = @array;
$list  = ( "a", "b", "c" );
print
"The number of array elements is "$num";nThe last element of list is "$list".n";

阅读全文…

分类: PERL/PHP技术 标签:

[perl]引用与解引用

2014年1月10日 没有评论

perl引用的意义:可以实现动态调用不同函数,实现Hash和Array的多个函数参数同时传递

perl的引用相当于c中的指针,有以下几种类型
一 引用
声明方式

1 一般方式
$scalarref = \$foo;          #标量引用 SCALAR,  $foo='hello';
$constref  = \186_282.42;    #标量(常量)引用 SCALAR 
$arrayref  = \@arr;          #数组引用   ARRAY,   @arr=1..100;
$hashref   = \%hash;         #hash引用   HASH,%hash=('a'=>1,'b'=>2);
$coderef   = \&add;          #函数引用  CODE,sub add{($a,$b)=@_;  return $a+$b;}
$globref   = \*STDOUT;       #GLOB句柄引用

2 匿名方式
另外声明方式采用匿名方式声明 如下(针对数组,hash,函数)
$arrRef=[1,2,3,4,5];                #指向匿名数组的引用
$hashRef={'a'=>1,'b'=>2};           #指向匿名hash的引用
$subRef=sub{return 1;};             #指向匿名函数的引用

3 符号表声明方式
$scalarref = *foo{SCALAR};          # 和 \$foo 一样
$arrayref  = *ARGV{ARRAY};          # 和 \@ARGV 一样
$hashref   = *ENV{HASH};            # 和 \%ENV 一样
$coderef   = *handler{CODE};        # 和 \&handler 一样
$globref   = *foo{GLOB};            # 和 \*foo 一样
$ioref     = *STDIN{IO};            # ?...

阅读全文…

分类: PERL/PHP技术 标签: