2011年11月14日

perl实现二叉树

摘要: 最开始写的代码,每个结点用一个匿名哈希来表示,可惜运行时错误。。。代码如下use strict ;use warnings ;sub create_tree { my $n8 = { 'left' => undef , 'right' => undef , 'value' => 8 , } ; my $n6 = { 'left' => undef , 'right' => \$n8 , 'value' => 6 , }; my $n5 = { 'left& 阅读全文

posted @ 2011-11-14 18:03 perlman 阅读(1173) 评论(0) 推荐(0) 编辑

2011年11月10日

perl获取脚本名字

摘要: 且看一段代码( my $pgm = $0 ) =~ s!.*/(.*)!$1! ;如果我们运行脚本的命令是perl d:/code/test.pl -f c:/test那么$0获取的是脚本本身,也即d:/code/test.pl正则表达式s!.*/(.*)!$1!是将脚本全名中的路径去掉,得到test.pl所以这行代码执行过后,$pgm的值就是test.pl,perl果然是强大呀! 阅读全文

posted @ 2011-11-10 10:56 perlman 阅读(2565) 评论(0) 推荐(0) 编辑

2011年10月19日

perl实现链表

摘要: perl数组的push,pop,shift,unshift操作可以实现栈,队列及双端队列,但是却不能支持链表的操作,所以创建链表要另寻他法。创建链表sub test { # Create list my $list = undef; foreach (reverse 1..5) { $list = [$list, $_ * $_] ; } }上面的代码创建一个简单的单向链表,它的过程如下[undef, 25][[undef, 25], 16][[[undef, 25], 16], 9][[[[undef, 25], 16], 9], 4][[[... 阅读全文

posted @ 2011-10-19 09:54 perlman 阅读(1267) 评论(0) 推荐(0) 编辑

2011年10月14日

perl中的bool值

摘要: perl中没有专门的bool类型,多数的判断都是通过数字和字符串完成的,如果不是数字和字符串则转换为数字和字符串再判断。perl中为假的值有以下几种数字0字符串0,'0', "0"空字符串,'', ""undef空列表空哈希所有其他值均为真值。注意,定义空列表或空哈希用()my @array = ();my %hash = () ;不能用undefmy @array = undef #这表示array有一个元素,是undef也不能用[]my @array = [] #这表示array有一个元素,是指向空列表的引用。== 阅读全文

posted @ 2011-10-14 11:23 perlman 阅读(1954) 评论(0) 推荐(0) 编辑

2011年10月13日

perl杂项

摘要: 不好分类的暂时都放到这里判断两个数组所有元素是否相同直接比较数组名字即可,不必逐个元素比较。my @a = (1..10) ;my @b = (1..10) ;if (@a == @b) { print "equal\n" ; #equal}但需要注意一点,如果是数组的引用,那么就不能直接比较了。必须先解引用再比较。my $aref1 = [1..10] ;my $aref2 = [1..10] ;if ($aref1 == $aref2) { print "equal\n" # not equal}先解引用再比较my $aref1 = [1..10] 阅读全文

posted @ 2011-10-13 10:20 perlman 阅读(932) 评论(0) 推荐(0) 编辑

2011年10月12日

vim乱码问题

摘要: 如果vimrc配置没有问题,但是仍然出现乱码,那么可能是控制面板配置错误,如下图。== 阅读全文

posted @ 2011-10-12 17:38 perlman 阅读(228) 评论(0) 推荐(0) 编辑

perl判断字符串包含

摘要: perl中没有判断字符串包含的函数,可以用正则表达式来实现这个功能,下面代码判断$str1是否包含$str2。if($str1 =~ /$str2/) { ...} 阅读全文

posted @ 2011-10-12 17:35 perlman 阅读(12838) 评论(0) 推荐(0) 编辑

2011年10月7日

在shell窗口中使用backspace删除字符

摘要: 使用putty远程连接机器开发时,由于网络的不稳定性,采用screen可以减少许多问题。但在putty默认的情况下,在screen下使用vi时会 导致退格键无法使用(在vi上显示^?),解决的办法是在putty修改设置-->终端-->键盘页修改backspace的绑定键为 ctrl-H。原因分析如下: 一般在shell中会将ctrl-h和ctrl-?绑定为backspace,但这不是标准的。在screen是将backspace绑定到ctrl-h,所以在putty将backspace绑定为ctrl-?时,会在vi上显示^?而非删除前一字符。 阅读全文

posted @ 2011-10-07 10:45 perlman 阅读(1433) 评论(0) 推荐(0) 编辑

2011年9月28日

Vim中的键映射

摘要: http://www.pythonclub.org/linux/vim/mapVIM键盘映射 (Map)设置键盘映射使用:map命令,可以将键盘上的某个按键与Vim的命令绑定起来。例如使用以下命令,可以通过F5键将单词用花括号括起来::map <F5> i{e<Esc>a}<Esc>其中:i{将插入字符{,然后使用Esc退回到命令状态;接着用e移到单词结尾,a}增加字符},最后退至命令状态。在执行以上命令之后,光标定位在一个单词上(例如amount),按下F5键,这时字符就会变成{amount}的形式。不同模式下的键盘映射使用下表中不同形式的map命令,可以 阅读全文

posted @ 2011-09-28 15:57 perlman 阅读(30918) 评论(1) 推荐(2) 编辑

2011年9月27日

Perl风格

摘要: 括弧对齐方式@a = ( [1, 2, 3], [4, 5, 6], [7, 8, 9],);赋值运算符单起一行并缩进my $predicted_val = $average + $predicted_change * $fudge_factor;如果要断句,那么将断句继续缩进,以表明它是属于赋值表达式的一部分my $predicted_val = ($minimum + $maxximum) / 2 + $predicted_change * max($fudge_factor, $local_epsilon);== THE END == 阅读全文

posted @ 2011-09-27 11:27 perlman 阅读(376) 评论(0) 推荐(0) 编辑

2011年9月26日

Vim中的标签

摘要: ma 设置标签a,用`a可以跳转到标签a所在的行。`a 跳转到标签a。:marks 查看当前设置的所有标签。`` 返回到跳转前的位置。delmarks a 删除标签adelmarks! 删除所有标签,不包括[A-Z]和[0-9]标签。 阅读全文

posted @ 2011-09-26 10:53 perlman 阅读(2672) 评论(0) 推荐(0) 编辑

2011年9月23日

Vim帮助系统

摘要: 基本命令帮助:help x按键帮助:help CTRL-H特殊键帮助:help <UP> 向上箭头帮助,特殊键用<>括起来。某个模式下的命令帮助:help i_CTRL-H i表示插入模式。(Normal模式无需加前缀)vim启动参数帮助:help -tvim选项帮助:help 'number'vim错误码帮助:help E37 阅读全文

posted @ 2011-09-23 10:37 perlman 阅读(445) 评论(0) 推荐(0) 编辑

Vim中的swp文件

摘要: vim中的swp即swap文件,在编辑文件时产生,它是隐藏文件,如果原文件名是data,那么swp文件名就是.data.swp。如果文件正常退出,则此文件自动删除。以下两种情况不会删除swp文件:Vim非正常退出,这种情况下,除非手动删除swp文件(也可以在vim提示时删除),否则它会一直存在。多个程序同时编辑一个文件。可以通过选项禁止产生swp文件set noswapfile 阅读全文

posted @ 2011-09-23 10:05 perlman 阅读(11892) 评论(0) 推荐(1) 编辑

Vim命令计数

摘要: 如果想重复一个命令若干次,可以按如下方式书写命令nc<Esc>n表示次数,c表示命令,最后按Esc键(非编辑命令不需要按Esc键)光标向下移动20行20j (不必按回车)当前行下加三行3o + Esc (这里需要按Esc键,因为o是编辑命令)在当前行首加入三个hello3Ihello + Esc 阅读全文

posted @ 2011-09-23 09:21 perlman 阅读(1288) 评论(0) 推荐(0) 编辑

2011年9月22日

更改默认的shell

摘要: 如果默认是csh,想改成bash,那么可以编辑用户目录下的.cshrc文件,在最后加一行/usr/bin/bash这样启动csh后就会自动执行bash。另一个办法是使用chsh,推荐使用这个办法,直接在shell窗口中输入chsh,然后输入登陆密码,这时系统会显示旧的shellOld shell: /bin/cshNew shell: 此时输入/bin/bash即可。 阅读全文

posted @ 2011-09-22 10:21 perlman 阅读(413) 评论(0) 推荐(0) 编辑

2011年9月21日

UNIX上安装VIM

摘要: 下载vim73ftp://ftp.vim.org/pub/vim/unix/如果是windows系统,可以下载后通过WinSCP上传到UNIX系统。如果是UNIX系统呢?用什么下载?解压缩bzip2 -d vim-7.3.tar.bz2 //解压成tar文件tar -xvf vim-73.tar编译首先来到解压后的vim73文件夹下(Makefile所在的文件夹),然后依次输入以下命令./configure --prefix /home/users/$username/makemake install其中第一个命令是给没有root权限的用户使用,因为没有root权限,只能安装在自己的目录下。安 阅读全文

posted @ 2011-09-21 17:17 perlman 阅读(1618) 评论(1) 推荐(0) 编辑

jobs

摘要: 查看当前系统中的job命令:jobs上面输出表示当前有三个后台进程,+表示的是当前job,-表示前一个job。第一列数字表示job编号,可以配合fg,bg命令来使用。暂停jobCtrl Z结束job如果job正在运行,可以用Ctrl C来结束之,如果job在后台,那么可以先用fg命令将其转到前台,然后Ctrl C结束之,也可以先jobs -l查看其id,然后kill -9 id结束之!Ctrl Ckill -9 id(job进程id)将job转到后台运行bg %nn是job编号,即上图中1,2,3。将job转到前台运行fg %n察看job对应的进程idjobs -l上面第二列数字就是job对应 阅读全文

posted @ 2011-09-21 15:47 perlman 阅读(346) 评论(0) 推荐(0) 编辑

vim 脚本中,注释以"开头

摘要: rt 阅读全文

posted @ 2011-09-21 15:03 perlman 阅读(611) 评论(0) 推荐(0) 编辑

UNIX/Linux上Vim没有颜色的解决办法

摘要: 如果你在UNIX/Linux上使用vim,设置了colorscheme之后没有颜色,那么将在.vimrc中加入如下代码试试if &term =~ "xterm" if has("terminfo") set t_Co=8 set t_Sf=^[[3%p1%dm set t_Sb=^[[4%p1%dm else set t_Co=8 set t_Sf=^[[3%dm set t_Sb=^[[4%dm endifendif 阅读全文

posted @ 2011-09-21 15:00 perlman 阅读(3000) 评论(0) 推荐(0) 编辑

2011年9月20日

UNIX/Linux 中的Ctrl C与Ctrl Z

摘要: ctrl+c一般是终止一个命令的运行。crtl+z一般是将你的命令转到后台执行,当然你可以用fg再将它调到前台执行。如果有多个在后台执行的,可以用fg PID来调用(怎么看pid?)ctrl+c 中断正在执行的进程(不可恢复?) ctrl+d 可以保存正在编辑的东东(比如at)ctrl+z 挂起正在执行的进程(完了可以用bg和fg再唤醒) 阅读全文

posted @ 2011-09-20 12:48 perlman 阅读(3054) 评论(0) 推荐(0) 编辑

解决vim粘贴时格式混乱的问题

摘要: 如果在.vimrc中设置了自动缩进set autoindent,那么在插入模式下粘贴代码时,vim会自动为代码缩进,导致格式混乱。解决的办法如下在.vimrc中设置set paste选项,这样粘贴代码时就不会产生缩进了,但是如果需要缩进的时候又要把该选项改回set nopaste。这样换来换去很麻烦,所以可以设置一个开关。set pastetoggle <F9>如此,通过按F9键就可以打开和关闭paste选项了,粘贴之前按下F9,需要缩进时再按下F9。vim中默认一个tab包含8个空格,如果你喜欢4个空格的模式,请添加如下选项set tabstop=8 阅读全文

posted @ 2011-09-20 10:26 perlman 阅读(7577) 评论(0) 推荐(0) 编辑

2011年9月15日

perl代码技巧

摘要: perl代码可以说要多简洁有多简洁,下面是一些我日常工作中积累的技巧交换两个变量($a, $b) = ($b, $a);列表移位($a, $b, $c) = ($b, $c, $a);将字符串拆分为字符my $str = 'abcd';my @chars = split //, $str;巧用unlessunless(condition){ #do something}相当于if(condition){ #...}else{ #do something}所以,使用unless可以减少代码行数,下面是一个例子if(-e file){ #read file}else{ ... 阅读全文

posted @ 2011-09-15 16:35 perlman 阅读(955) 评论(0) 推荐(0) 编辑

perl处理命令行参数

摘要: 使用Getopt::std模块代码如下use strict ;use Getopt::Std ;sub test{ use vars qw($opt_d $opt_f) ; getopts('d:f:') ; print $opt_d, "\n" ; print $opt_f, "\n" ;}&test() ;1 ;'d:f:' d和f后面有冒号,表示-d和-f后面必须跟参数。对于更复杂的命令行参数处理,请看Getopt::long模块。 阅读全文

posted @ 2011-09-15 13:13 perlman 阅读(2415) 评论(0) 推荐(0) 编辑

2011年9月14日

perl命令行参数

摘要: 查看perl版本perl -version对脚本进行语法检查perl -c scriptname.pl,比如 perl -c zdd.pl对zdd.pl进行语法检查,并不执行。调试perl脚本perl -d script.pl执行命令perl -e 'print "hellow, world!\n"'注意,在Windows上-e后面要使用双引号,所以上面的命令在Windows上要写成perl -e "print 'hello, world\n'",但是这样的话\n将被直接输出,而不是换行,所以更好的办法是使用qqperl 阅读全文

posted @ 2011-09-14 15:38 perlman 阅读(1960) 评论(0) 推荐(0) 编辑

vim配置

摘要: vim配置文件如果是在Unix/Linux系统上,则系统自带vim,可以在当前用户的主目录下创建.vimrc文件touch ~/.vimrc ~代表当前用户的主目录有了这个文件,vim将会以vim模式启动,否则的话则是以vi兼容模式启动,很多高级功能在兼容模式下用不了,可以使用下面的命令将vim设置为非兼容模式:set nocompatible如果是在Window系统上,那么安装vim的时候会生成_vimrc文件,和Unix/Linux上的.vimrc文件类似,都是vim的配置文件。~ tilder 波浪号自动对齐set autoindent 自动对齐方式。set cindent C风格的对齐 阅读全文

posted @ 2011-09-14 14:42 perlman 阅读(811) 评论(4) 推荐(0) 编辑

2011年8月16日

Perl到底是什么意思?

摘要: 学习perl也有一段时间了,如果连perl是什么意思都不知道,那就太汗颜了,听好啦!perl == Practical Exstraction and Report Language,中文叫做实用抽取和报表语言。 阅读全文

posted @ 2011-08-16 16:46 perlman 阅读(852) 评论(0) 推荐(0) 编辑

运算符的结合性

摘要: Operator precedence and associativity-运算符的优先级和结合性,下表是C语言的运算符优先级和结合性表格优先级我就不说了,表中写的很清楚,说一下结合性。运算符的结合性运算符的结合性是指相同优先级的运算符在同一个表达式中,且没有括号的时候,运算符和操作数的结合方式,通常有从左到右结合和从右到左结合两种方式。举个例子,假设~是一个运算符,又有表达式a~b~c,如果~是左结合的,那么该表达式被解析为(a~b)~c,如果~是右结合的,那么该表达式将被解析为a~(b~c)。比如上表中三目运算符?:是从右向左结合的,那么下面的表达式a > b ? b > c 阅读全文

posted @ 2011-08-16 14:54 perlman 阅读(16720) 评论(2) 推荐(1) 编辑

2011年8月13日

Perl链接数据库

摘要: Perl链接数据库并不难,但是对于很多初次解除的人来说,经常会遇到一些问题,本文总结了一些无法链接的问题,供大家参考perl链接SQL Server由于我机器上只有SQL Server Express版本,所以就以它为例,企业版大同小异。一 确保数据库服务已经开启开始菜单-Microsoft SQL Server200x-Configuration tools-SQL Server Configuration Manager,展开SQL Server 200x Services,确保State列状态为running,如下图所示。二 确保数据库可以连接首先用SSMS(SQL Server Man 阅读全文

posted @ 2011-08-13 11:39 perlman 阅读(1828) 评论(0) 推荐(0) 编辑

2011年8月12日

perl复杂数据结构

摘要: 数组的数组定义方法一my @person1 = ("zdd", 30, "man") ;my @person2 = ("autumn", 27, "woman") ;my @persons =(\@person1, \@person2) ;方法二my @persons =( ["zdd", 30, "man"], ["autumn", 27, "woman"]) ;方法三 匿名数组,这个方法需要用特殊的访问方法。my $persons 阅读全文

posted @ 2011-08-12 17:55 perlman 阅读(2607) 评论(0) 推荐(0) 编辑

一个关于正则表达式的疑问

摘要: s/\c[ABCD]/ /gs/\cA|\cB|\cC|\cD/ /g以上两者难道不相等么?为什么后者能工作而前者却不能? 阅读全文

posted @ 2011-08-12 15:43 perlman 阅读(252) 评论(2) 推荐(0) 编辑

2011年8月11日

XML 中的轉義字符

摘要: 阅读全文

posted @ 2011-08-11 08:58 perlman 阅读(230) 评论(0) 推荐(0) 编辑

2011年8月8日

Perl中的特殊符号

摘要: $_俗称perl的老地方,当你的程序中未告知使用哪个参数或者变量时,perl就会自动使用$_中的值,比如for(1..10){ print ;}这里print没有指定参数,所以它就会使用$_,那$_里面是什么呢?每次循环$_的值都会变化,所以$_实际上就是1 .. 10这10个值,所以上面的代码打印的结果就是12345678910$!当且仅当某个函数调用失败时才会设置该变量,所以经常这样使用这个变量open FILE,"<d:/code/zdd.txt" or die $! ;$/这是perl中的行分隔符,默认是换行符,可以改变这个变量以便一次读入整个文件,如下sub 阅读全文

posted @ 2011-08-08 10:41 perlman 阅读(6950) 评论(0) 推荐(1) 编辑

2011年8月6日

perl智能匹配操作符~~

摘要: 介绍智能匹配操作符,英文叫做smart matching operator,写法是连续的两个波浪线~~,为什么说它是智能的呢?因为它能够根据操作符两侧的操作数进行智能匹配,具体智能到什么程度呢?听我一一道来!具体应用案例一,判断某个元素是否在给定的数组中这算是一个比较常见的问题,如果不用智能匹配操作符的话,我想多数人会这样写程序my $value = 3 ;my @array = (1, 2, 3, 4, 5) ;sub test{ for(@array){ if ($value == $_){ print "$value was found!\n" ; return ; 阅读全文

posted @ 2011-08-06 18:31 perlman 阅读(11300) 评论(3) 推荐(4) 编辑

perl常用正则表达式集合

摘要: 本文罗列了一些常用的正则表达式,不间断更新中。。。去除前导空格s/^\s+//去除尾部空格s/\s+$//去除前后空格s/^\s+|\s+$//g匹配任意字符/.*/s这里/s表示连换行符也匹配,因为.是不匹配换行符的,所以上面的表达式匹配任意字符。下面看第二种方法,perl中的元字符.能匹配所有单个字符,但是不能匹配换行符,如果要匹配的文本含有换行符,那么.将无法胜任,比如下面的xml文件。<Response> <Code>200</Code> <Description>Success</Description></Respo 阅读全文

posted @ 2011-08-06 10:25 perlman 阅读(9391) 评论(0) 推荐(0) 编辑

perl去除文本行首尾空格

摘要: perl中并没有其他语言中的trim函数,所以如果想去除文本行的首尾空格,只能自己写,不过用正则写起来也很简单,代码如下。use strict ;# Remove all leading whitespacesub trimleft{ my @array = @_ ; foreach(@array){ s/^\s+// ; } return @array ;}# Remove all trailing whitespacesub trimright{ my @array = @_ ; foreach(@array){ s/\s+$// ; } return @array ;}# Remove 阅读全文

posted @ 2011-08-06 10:16 perlman 阅读(7241) 评论(0) 推荐(0) 编辑

关于hash

摘要: 下面的代码有何区别?my %table ;my %table = () ;my %table = {} ;前两者是一样的,都是空hash表,第三行是匿名空哈希表,与前两者是不同的。 阅读全文

posted @ 2011-08-06 08:42 perlman 阅读(234) 评论(0) 推荐(0) 编辑

2011年8月5日

perl函数原型

摘要: 大多数perl函数定义都是没有指定参数个数及类型的,所有传入的参数都保存在@_数组中,如果想指定参数个数及类型,那么就要使用函数原型了。看下面的例子use strict ;sub test($$){ my($var1,$var2) =@_ ; print$var1,"\n" ; print$var2,"\n" ;}test(1,2) ;1 ;上面的test函数就使用了函数原型,在函数定义时元括弧内加入参数定义,上面$$表示两个标量参数。这样就保证test值接受两个参数,且都是标量,所以下面的调用都可以test(1,2) ;test(1,"a&q 阅读全文

posted @ 2011-08-05 22:05 perlman 阅读(743) 评论(0) 推荐(0) 编辑

2011年8月4日

Perl子过程调用

摘要: Perl子过程调用有以下几种方式&name(para1, para2, ... paran) ;&name para1, para2, ... paran ;name(para1, para2, ... paran) ;name para1, para2, ... paran ;什么时候&必须使用?一 调用代码位于函数声明之后的use strict ;&test ; # & is must, since test was invoked before declarationsub test{ print "This is test\n" 阅读全文

posted @ 2011-08-04 22:10 perlman 阅读(612) 评论(0) 推荐(0) 编辑

2011年8月2日

perl中的循环控制

摘要: Perl中的next关键字结束本次循环,相当于C/C++中的continue。Perl中的last关键字结束整个循环,相当于C/C++中的break。 阅读全文

posted @ 2011-08-02 08:58 perlman 阅读(890) 评论(0) 推荐(0) 编辑

2011年7月31日

perl类定义必须返回真值

摘要: package Logger ;use strict ;sub new{ my $class = shift() ; my $self = {} ; bless $self, $class ; return $self ;}sub message{ shift ; my ($msg, $color) = @_ ; print "@: @_ \n" ; my $cmd = "echo -e \033[40;$color$msg\033[0m" ; # this does not work on windows, try it on unix/linux p 阅读全文

posted @ 2011-07-31 23:02 perlman 阅读(670) 评论(0) 推荐(0) 编辑

导航