Perl
分懂课堂
程序是我人生中最大的乐趣 。强项PHP,LINUX C, JAVA,MYSQL,LINUX SHELL
展开
-
[Perl]用hash引用时别忘了初始化
相信很多人都写过下面这种函数,把参数当作hash引用来赋值:sub foo { my $hash = shift; $hash->{foo} = bar;}然后这样调用:foo($a);调用之后,$a就变成了一个hash引用,里面包含了 foo => bar 这一对值。当然你可能会说,干嘛要在foo里面修改参数,直接return $hash不行吗。当原创 2010-01-01 14:57:00 · 2179 阅读 · 0 评论 -
[Perl]管道、进程及其他
昨天一个同事问我关于Perl中的 -| 描述符的问题。他的程序大概是这样的:unless (open FH, "-|") { exec "foo bar"; # 用exec执行另一个程序 exit;}while () { ...}close FH;$ret = $? >> 8;if ($ret == 1) { ...}那转载 2010-01-01 14:59:00 · 864 阅读 · 0 评论 -
Perl文件测试符-C的用法
在Perl的各种文件测试运算符中,最有用的运算符之一就是 -C 了。它返回的是文件的ctime到程序启动的那一时刻经过的天数。如果不是整数天,返回值就带有小数。这个运算符经常用来检测文件是否过期,比如判断文件距离上次修改是否超过了3天,如果超过就将其删除。但是,你是否真正理解 -C 的工作原理呢? 何谓ctime要想理解-C,就必须理解什么是ctime。我们原创 2010-01-01 14:48:00 · 724 阅读 · 0 评论 -
perl中一些问题
开发中遇到的几点问题:1. split的分隔符不能使用字符串,只能使用正则表达式。用perl -de 1; 启动后做实验: DB x split //, a//b//cTrailing / in regex m/// at (eval 13)[/usr/lib/perl5/5.8/perl5db.pl:628] line 2. DB x split ////原创 2010-01-01 15:01:00 · 696 阅读 · 0 评论 -
[Perl]用XML::Simple解析XML文件
在Perl中解析XML的方法最常见的就是使用 XML::DOM 和 XML::Simple了。XML::DOM过于庞大,而且解析结果是一个DOM树,操作也不方便。对于小型且不复杂的XML文件,XML::DOM真是杀鸡用牛刀。这时就轮到轻便的XML::Simple上场了。XML::Simple如其名,真的很简单。假设XML内容如下:原创 2010-01-01 15:00:00 · 948 阅读 · 0 评论 -
[Perl]引用传递和值传递
这个题目似乎有些不太合适,因为这并不是我们常说的引用传递和值传递。但是我想提醒大家这一点,否则很容易犯错误。问题:map语句的代码段中使用的 $_,是列表中的值本身,还是将列表中的值复制到 $_ 中?例如,下面这段程序的运行结果是什么呢?#!/usr/bin/perl$,=,, $/="/n";$a = [1,2,3];print map { ++$_; }原创 2010-01-01 14:57:00 · 781 阅读 · 0 评论 -
[Perl]/xc3/xc2问题的原因
在处理多语言编码、使用UTF-8时,偶尔会遇到这个我称之为“c3c2问题”的问题。花了一天时间好不容易找到了原因所在,写在这里希望对遇到的人有所帮助。基于Perl语言写的,可能是Perl的专有问题,不过其他的语言若遇到类似的现象也可作为参考。现象进行编码转换时出现乱码。转换后的结果类似于下面的样子:c3 a3 c2 81 c2 82 ...看起来就像是正确的字符序列中加入了许多转载 2010-01-01 14:56:00 · 725 阅读 · 0 评论 -
Perl最强Perl执行时间测试工具 – Devel::NYTProf
之前曾经介绍过 SmallProf和 DProf。之所以说NYTProf是最强测试工具,是因为它给出了极其详尽的测试信息,并且整理成便于阅读的HTML格式,将函数按着执行速度排序,而且测试速度相当快。fcicq@2008/12/30:NYTProf是 New York Times Profiler的意思,想不到吧~测试方法如下:$ perl -d:NYTProf原创 2010-01-01 14:50:00 · 1207 阅读 · 0 评论 -
[Perl]关于m//g的问题
今天讨论一下m//g一个的小问题。m//g表示在字符串中查找所有可能出现的模式匹配。在标量环境下,m//g会依次查找每个出现的匹配。通常的用法是这样的:while (/(pattern)/g) { print $1; # 做些操作}在内部,m//g会保存一个“匹配位置”的变量,表示这次的m//g匹配到了什么位置,以便下次运行时从该处继续开始。(这个位置可以通过pos原创 2010-01-01 14:58:00 · 1012 阅读 · 0 评论 -
Perl使用DProf测定程序执行效率
代码写多了,程序就会变得臃肿;程序臃肿了,就会变慢。这时提高代码执行效率就非常重要了。但是,代码优化并不是几条best practice就能完成的。那些无关痛痒的空间分配、减少复制等优化措施,虽然有效,但却微乎其微。优化的关键,是要找出瓶颈并解决之,这样才能以最小的代价获得最佳的效果。这就用到Perl的一个强大的工具:DProf。它可以测定程序执行的每个函数所花费的时间原创 2010-01-01 14:54:00 · 794 阅读 · 0 评论 -
[Perl]One-Liner
哦……Perl真的是太博大精深了。尤其是它的One-Liner程序,每一行都是优美的杰作啊。下面搜集了一些很有用的One-Liner。大部分资料来自于这里、这里、这里。 替换将所有C程序中的foo替换成bar,旧文件备份成.bakperl -p -i.bak -e s//bfoo/b/bar/g *.c很强大的功能,特别是在大程序中做原创 2010-01-01 15:08:00 · 1804 阅读 · 0 评论 -
[Perl]利用XML::DOM生成XML文档
Perl的XML::DOM功能很强大,利用它可以轻易地分析XML文档,也可以建立XML文档。常用的类包括:XML::DOM::Node:所有类的基类,表示一个XML节点。XML::DOM::Parser:XML解析器,将XML字符串解析成XML::DOM::Document对象。XML::DOM::Document:指向XML文档的根节点。XML::DOM::Element原创 2010-01-01 15:12:00 · 1912 阅读 · 0 评论