随笔分类 - perl
摘要:由于工作需要,写了个小脚本,用于把所有文件夹下的文件,每个都放入以他们自己名字命名的文件夹中,并且文件夹名字不能有空格。包括子目录。#!perl(my $thisfile)=$0=~/.*\\(.*)/;my @curfile=grep { $_ ne $thisfile } glob('*');&action(\@curfile);sub action { my $test=shift; for my $file(@$test) { if (-d $file){ chdir $file; my @subfile = gl...
阅读全文
摘要:下午和群里的朋友争论了一下,有关awk和perl处理文本的速度,自己一直比较推崇perl,对awk知之甚少,结果就想当然的觉得perl快,结果一番争吵后,觉得还是实验一下靠谱,(其实是想证明一下perl确实很快……唉,找虐啊)先是制造了一个文本,1200万行,大致内容如下row.txt:row1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 row2 1 2 3
阅读全文
摘要:由于业务需要,要查询客户的ip地址,将部分地区的客户过滤出来,开始想到使用ip数据库,发现读取纯真数据库的难度对我来说有些大,而我目前的时间要求比较紧迫,通过在群里询问,感谢黑影子和扶凯的帮忙,推荐了IP::QQWry::Decoded这个模块,该模块是专门用来读取qqwry纯真数据库的,用起来非常简单。#!/usr/bin/perluse IP::QQWry::Decoded;use Encode;use utf8;binmode(STDIN, ':encoding(utf8)'); #这三行binmode(STDOUT, ':encoding(utf8)')
阅读全文
摘要:1、在打开的句柄中,直接使用while之后,$_=<openhandle>,来遍历每一行,如:open TEST,"1.txt";binmode TEST;while (1 == 1) {$_=<TEST>;print ;}2、在去除回车符时,可以使用:chomp $_; s/\r$//;3、有两种处理时间的函数:localtime(time) 输出:5501511811222540,这是一个数组,如果赋值给变量,再打印,就会出现“Tue Sep 11 15:02:14 2012”gmtime(time) 输出:434711811222540,这也是
阅读全文
摘要:前两天在微博中看到一个各种管道符组成的命令,是用来统计history的,也就是说,统计你平时使用次数最多的命令,内容如下:1 history | awk '{CMD[$2]++;count++;} END { for (a in CMD )print CMD[ a ]" " CMD[ a ]/count*100 "% " a }' | grep -v "./" | column -c3 -s " " -t |sort -nr | nl | head -n10当然,如果作为一个awk或者sed偏执狂,
阅读全文
摘要:一般来说,我们会使用正规表达式来做字符串匹配,今天在网上浏览的时候,看到了有人用正则表达式来检查一个数字是否为素数(质数),让我非常感兴趣,这个正则表达式如入所示:检查素数与否的正则表达式要使用这个正规则表达式,你需要把自然数转成多个1的字符串,如:2 要写成 “11”, 3 要写成 “111”, 17 要写成“11111111111111111”,这种工作使用一些脚本语言可以轻松的完成。一开始我对这个表达式持怀疑态度,但仔细研究了一下这个表达式,发现是非常合理的,下面,让我带你来细细剖析一下是这个表达式的工作原理。首先,我们看到这个表达式中有“|”,也就是说这个表达式可以分成两个部分:/^1
阅读全文
摘要:转载自:http://hi.baidu.com/ly055442/blog/item/4f2d8a2d36a4b430359bf76c.html1. $_$ARG,经常是一个默认变量2. @_@ARG,子例程参数表3. {row.content}$PROGRAM_NAME,本程序的名字4. @ARGV本程序的命令行参数表5. $"$LIST_SEPARATOR,数组内插到双引号字符串中时所用的分隔符,默认为空格6. $,$OFS,或$OUTPUT_FIELD_SEPARATOR,用于print的输出字段分隔符,即一个print语句中用逗号分隔的部分之间用什么分隔,默认为无7. $$O
阅读全文
摘要:整洁性-w打开警告-Mstrict打开严格编译指示(pragma)数据-0(这是个零)指定输入记录分隔符-a将数据分割成名为 @F 的数组-F指定分割时 -a 使用的模式(请参阅 perldoc -f split)-i在适当的位置编辑文件(请参阅 perldoc perlrun 以获取大量详细信息)-n使用 <> 将所有 @ARGV 参数当作文件来逐个运行-p和 -n 一样,但是还会打印 $_ 的内容执行控制-e指定字符串以作为脚本(多个字符串迭加)执行-M导入模块-I指定目录以搜索标准位置前的模块1、查找 Artist-Album-Track#-Song.mp3 的专辑名>
阅读全文
摘要:零宽断言的意思是(匹配宽度为零,满足一定的条件/断言) 我也不知道这个词语是那个王八蛋发明的,简直是太拗口了。零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。其中零宽断言又分四种先行断言 也叫零宽度正预测先行断言(?=表达式) 表示匹配表达式前面的位置例如 [a-z]*(?=ing) 可以匹配cooking singing 中的cook与sing注意:先行断言的执行步骤是这样的先从要匹配的
阅读全文
摘要:use 5.010;$name ~~ /Fred/;%name ~~ /Fred/; 查找键值匹配%a ~~ ‘Fred’ 哈希中某一指定键$a{Fred}是否存在@nums ~~ $result; 查找数组匹配%a ~~ %b 哈希键是否一致%a ~~ @b 至少%a中的一个键在列表@b中@a ~~ @b 数组是否相同@a ~~ 123 至少有一个元素转化为数字后是123@a ~~ 'Fred' 至少有一个元素转化为字符串是 ‘Fred’$name ~~ undef 查看是否尚未定义$name ~~ /Fred/ 模式匹配123 ~~ '123.0' 看大小是
阅读全文
摘要:& 按位与操作符;10 & 12 这样相当于1010 & 1100 , 得到的结果是8,即:1000,两边均为1(真)时,才是1.| 按位或两边有一边为真,即为真.^ 按位异或两边相等,则为0,否则为1.<< 按位左移将左边的操作数向左移动右边操作数指定的的位数,并以0来填补最低位.>> 按位右移与左移相反,并丢弃移出的最低位.~ 按位取反返回操作数逐位取反之后的数值.
阅读全文
摘要:localtime 会返回一个数字元素组成的列表:my($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst)=localtime $timestamp;$mon 是范围从0到11的月份值$year 是一个自1900年起算的年数,所以这个值加上1900就是实际年份$wday 的范围从0(星期天)到6(星期六)$yday 表示今天是今年的第几天gmtime 和localtime返回的一样,只不过,gmtime返回的是世界标准时间如果需要从系统时钟取得当前时间戳,可以用time;没有参数的情况下,不论哪个函数,都默认使用当前time返回的时间值作为时
阅读全文
摘要:unless 条件为假时才执行。与if相反;until 条件为假时循环。与while相反;while ($n<10){print "\n",($n+=2);} 输出:2468my $d=$m++;## $d得到的是$m之前的值(5),然后$m增加到6my $d=++$m;## $m先增加到6,然后再赋值给$d;如果只有自加或自减,赋值无顺序。裸块:用{ }包裹起来,常用语区域变量;查找字符出现的次数:my @people = qw{ fred barney bamm-bamm wilma dino barney betty pebbles };my %seen;for
阅读全文
摘要:通配符: .点号,匹配任何单字符的通配符(除了换行符\n)--------"abcde"=~/abc.d/ *匹配之前内容零次或者多次 *.通配所有的字符串,捡破烂模式 +通配之前内容1次以上 ?通配前之前内容1次或者0次分组: $_="aa11bb"; if (/(.)\g{1}11/) { # 使用\g{num}这种形式,避免\111时出现的错误。 num中,负号代表反向引用; print "it matched!\n";}择一匹配: $name=~/fr(a|e)d/ #a或者e字符集: $name=~/HAL-[^0-9]+/
阅读全文

浙公网安备 33010602011771号