strftime()函数,方便的时间操作
string strftime(string format, int [timestamp]);返回值: 字符串函数种类: 时间日期内容说明 返回值的字符串依配置的格式来决定。若有传入时间戳记值,则将时间戳记格式化返回;若无传入时间戳记值,则将目前服务器的时间本地式化返回。月份或者星期名称随着本地语系配置 setlocale() 的不同而改变。返回的字符串可以依下列的格式而定:%a 星期几的缩写。 %A 星期几的全名。 %b 月份名称的缩写。 %B 月份名称的全名。 %c 本地端日期时间较佳表示字符串。 %d 用数字表示本月的第几天 (范围为 00 至 31)。 %H 用 24 小时制数字表示小时数
Thread already joined at **
use strict;use threads; use threads::shared; my $MAXTHREAEDNUM = 20; my $CURTHREADNUM :shared = 0;my @threads; sub startThread{ ## 当前新建的线程数加一: { lock($CURTHREADNUM); $CURTHREADNUM++; } print"here is the $CURTHREADNUM thread!n"; sleep(3); ## 当前活动的线程数减一: { lock($CURTHREADNUM); $CURTHREADNUM--; }} [@more@]sub main { my $threadid;#壹 f
UltraEdit (UE)中的常用正则表达式
UltraEdit是文本编辑的极好的工具,我们常用它来处理文本文件,掌握下面的正则表达式会让他如虎添翼:% 匹配行首 - 表明要搜索的字符串一定在行首. $ 匹配行尾 - 表明要搜索的字符串一定在行尾 ? 匹配除换行符外的任一单个字符. [@more@]* 匹配任意个数的字符出现任意次数(不包括换行符) + 匹配前导字符或者表达式出现一次或者更多次(不包括换行符) ++ 匹配前导字符或者表达式不出现或者出现一次以上(不包括换行符) ^b 匹配页中断符 ^p 匹配DOS文件的换行符^r 匹配MAC文件的换行符(CR Only) ^n 匹配UNIX文件的换行符 (LF Only) ^t 匹
perl 数据库链接失败重试机制
在写数据库相关的程序时,我们希望在数据库短暂连接失败后有重试的机制,重试间隔时间比如设定为:1分,1分,1分,1分,2分钟,4分钟,8分钟,16分钟,32分钟九次重试的机制;前4次避免网络瞬断,再后3次避免机器重启,后3次避免网络长时间断……说起来好像比较复杂,其实用二维数组可以很轻松完成这个任务:[@more@]my $owner = shift; my $OraUserID = "********"; my $OraPassword = "*******"; my $ORADSN; my @Dsc_Owner= ( ['****', '****'], ['****', '****'] ); foreac
DOS,UNIX中的回车换行区别
这几天写了个多线程的数据抽取perl脚本,速度很快,可达到1G/m以上。可是今天做fastload加载时,被破了瓢冷水:抽过来的所有的文件都无法正常的加载,表现的形式是我抽取的数据始终要比BOSS送过来的数据大那么一点点,但记录条数没有异常。于是我开始了艰难的查错之旅:[@more@]1.用UE查看数据文件,无明显异常:2.用cygwin查看各条记录的长度,输出长度不对的行:awk '{ if ( length($0) !=行字节数) {print $0;print NR} }' xxx.dat结果令我失望,所有行的长度均正常;3.编写一perl脚本,比较我抽取的数据文件和正确文件的差异:#!/user
PERL进程、管道、信号
PERL灵活的进程函数是为了复制进程用于分担任务与程序的工作量。 PERL中复制进程有两种方法:fork()、system()与exec()。 fork()部分:*NIX传统的复制进程方法 fork()函数: 作用:进程复制函数。 用法:$pid=fork(); [@more@]讲解: 无参数;当本进程为父进程时返回值为子进程的PID值,当进程为子进程时返回值为0。 实例: #!usr/bin/perl -w $pid=fork(); #复制进程,并把返回值附入$pid die "Error:$!n" unless defined $pid; #制定程序的错误机制,此步可略 if($pid!=0){ #条件选择,测试$pid值 print"This is a main pid!PI
perl处理中文
最近用perl处理中文时遇见不少问题,google了一下,得到好文章一篇,贴出来共享:Perl从5.6开始已经开始在内部使用utf8编码来表示字符,也就是说对中文以及其他语言字符的处理应该是完全没有问题的。我们只需要利用好Encode这个模块便能充分发挥Perl的utf8字符的优势了。[@more@]下面就以中文文本的处理为例进行说明,比如有一个字符串"测试文本",我们想要把这个中文字符串拆成单个字符,可以这样写:use Encode;$dat="测试文本";$str=decode("gb2312",$dat);@chars=split //,$str;foreach $char (@chars)
perl常用特殊变量
1. $_ $ARG,常常是一个默认变量 2. @_ @ARG,子例程参数表 3. {row.content} $PROGRAM_NAME,本程序的名字 [@more@]4. @ARGV 本程序的命令行参数表 5. $" $LIST_SEPARATOR,数组内插到双引号字符串中时所用的分隔符, 默认为空格 6. $, $OFS,或$OUTPUT_FIELD_SEPARATOR,用于print的输出字段分隔符, 即一个print语句中用逗号分隔的部分之间用什么分隔,默认为无 7. $ $ORS,或$OUTPUT_RECORD_SEPARATOR,用于print的输出记录分隔符, 即一个print语句结束时末尾添加什么,默认为无 8. $/ $RS,或$INPUT_RECORD_SEPARATOR,输入记录
perl文件操作
用 Sysopen()进行更多的控制 为了更好的控制文件的打开方式,可以使用 sysopen() 函数: use Fcntl; sysopen(FH, $filename, O_RDWR|O_CREAT, 0666) or die "Can't open $filename for reading/writing/creating : $!"; [@more@]函数 sysopen() 带有四个参数,第一个是同open()函数类似的文件句柄参数,第二个参数是不带模式信息的文件名,第三个参数是模式参数,由Fcntl 模块提供的逻辑OR运算组合起来的常数构成,第四个参数(可选),为八进制属性值(0666表示数据文件, 0777表示程序)。如果文件可以被打开,sysopen() 返回true
perl调试哲学(转)
描述 我的调试哲学我相信三件事情:这不是个人问题别老想着是你的代码。你可能觉得自己是个艺术家,但实际上就算是经验丰富的大师也会写出很多垃圾。每个人的代码都是垃圾,我的也是你的也是。要学着去喜欢它。当你碰到问题的时候,你应该想:“噢,我写的垃圾代码出了点问题。”这说明你不再去责怪 Perl。不应该变成个人性的问题。忘记你以前怎么做的。如果不是你做事的方法有点问题,你也不会来读这个。这并不是坏事,只是到了该有点长进的时间。我们都经历过的。[@more@]个人责任感如果你的代码出了问题那仅仅是——你的问题。你应该尽
PERL SOCKET
使用PERL SOCKET API首先需要载入SOCKET模块。 use Socket; socket(文件句柄,AF_INET,数据类型,协议类型); #建立套接字 文件句柄随便找个词就可以了。 AF_INET为域类型,也可以写为PF_INET。 数据类型,通常用有两种:SOCK_STREAM、SOCK_DGRAM。 协议类型,可以用协议号代替,EGP---8、HMP---20、ICMP---1、 RAW---255、RDP---27、RVD---66、TCP---6、UDP---17、XNS-IDP---22、 其他---22、ALL---0;也可以用getprotobyname()函数作此参数。 例子:socket(SOCK,AF_INET,SOCK_STREAM,getprotobyname('tcp')); 语柄为SOCK,套接字以TCP方式传
利用Perl解析XML文件
当在Perl中使用XML时,你会有将近五百个CPAN模块可以选择,每一个都支持整合Web服务的不同方面。此外,Perl的核心库包括多个支持XML的模块。这篇文章就关注于一个最早期且涉及最频繁的核心模块:XML::Parser. XML::解析器系列 最初的Perl解析器XML::Parser::Expat由Larry Wall在几年前编写并由Clark Cooper保持延续。模块作为Expat XML parser的界面由James Clark用C语言编写且已经被一些脚本语言所采用。 Expat是一个以事件为基础的解析器,意味着特定条件触发处理功能。例如,一个开始或结尾标记将触发适当的用户定义子程序。XML::Parse
unlink,link,symlink等,处理文件和目录
删除文件在perl中用unlink操作符删除文件,同shell的rm命令一样。unlink "aa","bb","cc"; 把这三个文件删除。与glob函数结合起来可以一次删除多个文件unlink glob "*.o"; 删除当前目录下以.o结尾的文件,与rm *.o相似。unlink的返回值告诉我们有多少文件被成功删除。my $successful = unlink "aa","bb","cc";print "I delete $successful file(s) just now.n";[@more@]如果想知道那个文件被删除,可用循环,一次删除一个文件。foreach my $fi
perl 中glob函数的使用
ExampleTry out following example: Here glob will retun all the files which begin with "perl_g"#!/usr/bin/perl(@file_list) = glob "perl_g*";print "Returned list of file @file_listn";[@more@] Syntaxglob EXPRglobDefinition and UsageReturns a list of files matching EXPR as they would be expanded by the standard Bourne shell. If the EXPR does not specify a path, uses the current directory. If EXPR is omitted, the value of $_ is used.From Perl 5.6 on, expansion is done in
perl 多线程
需要引入的pm文件有:use threads; #导入threads多线程处理包 use threads::shared; #使用线程间共享变量程序和C基本上一样,下面是有关线程操作的相关代码:#main functionsub main(){ $dbcon = ConnectTD(); while(1) { my @dataset = Get_Config_Info(); my $rec_cnt = @dataset; for(my $i=0;$i<$rec_cnt;$i++) { processFiles($dataset[$i][0],$dataset[$i][1],$dataset[$i][2],$dataset[$i][5],$dataset[$i][6],$dataset[$i][7]); } fore
perl操作二维数组
NAME perllol - 操作数组的数组(二维数组)说明 声明和访问数组的数组 创建一个数组的数组(有时也可以叫“列表的列表”,不过不太准确)真是再简单也不过了。它相当容易理解,并且本文中出现的每个例子都有可能在实际应用中出现。 数组的数组就是一个普通的数组(@AoA),不过可以接受两个下标("$AoA[3][2])。 [@more@]下面先定义一个这样的数组: # 一个包含有“指向数组的引用”的数组 @AoA = ( [ "fred", "barney" ], [ "george", &qu
常用正则表达式
正则表达式用于字符串处理、表单验证等场合,实用高效、本文收集了一些常用的表达式:匹配中文字符的正则表达式: [u4e00-u9fa5]-- 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了匹配双字节字符(包括汉字在内):[^x00-xff]-- 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)匹配空白行的正则表达式:ns*r-- 评注:可以用来删除空白行[@more@]匹配HTML标记的正则表达式:<(S*?)[^>]*>.*?</1>|<.*? />-- 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记
MFC应用程序中处理消息的顺序
1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象 ,然后调用AfxCallWndProc 2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数 3.WindowProc() 该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数 4.OnWndMsg() 该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。任何被遗漏的消息将是一个窗口消息。OnW
HashTable vs HashMap
??Hashtable和HashMap的区别:??1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;??2.Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable 了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:??Map Collections.synchronizedMap(Map m)??这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。