perl来自Unix系统,而且目前也扎根于Unix中。Perl是实用摘录与报表语言(Practical Extraction and Report Language),大写P表示的“Perl"指的是程序语言,而小写p表示"perl"指的则是实际编译并运行程序的解释器。它的创作者是Larry,他创造的目的是能有Sell或awk一样能快速编程,有能具备grep,cut,sort和sed的高级功能,又能填补低级语言如c/c++或编程语言和高级语言之间的空隙。perl适合文字处理、业务流程管理,不适合做"封闭式"的程序,(如别人看不到你的秘密算法)。
      首先,我们来分析我写的一段莫版型的perl代码
      #!/usr/bin/perl -w#这是你perl执行程序的绝对路径
    use strict;#引入strict 包它包下有些编码的规范规则,如果代码不符合规范,会发出警告
    use warnings;
    use Getopt::Long;
    use Data::Dumper;
    use FindBin qw($Bin $Script);
    use File::Basename qw(basename dirname);
    my $BEGIN_TIME=time();
    my $version="1.0.0";

# GetOptions
my ($fIn,$fOut);#这是定义局部变量

GetOptions(
                "help|?" =>\&USAGE,
                "o:s"=>\$fOut,
                "i:s"=>\$fIn,
                ) or &USAGE;
&USAGE unless ($fIn and $fOut);#这是获取命令行参数

open (IN,$fIn) or die $!;#打开一个文件是否成功,如果不成功则会输出系统提供的错误($!)
open (OUT,">$fOut") or die $!;

#$/=">";#这是一个分隔符,将文本的字符考“>”来分割,给你的对应变量

while (<IN>) {#<IN>是当你打开文件一直处于正常状态没有异常发生时
    chomp;
    next if (/$/);
    my @lines=split /\n/,$_;
}

close IN;
close OUT;


print STDOUT "\nDone. Total elapsed time : ",time()-$BEGIN_TIME,"s\n";



# sub function

#定义你的函数如c语言,但是不需要像C 那样需要先声明
sub ABSOLUTE_DIR{ #$pavfile=&ABSOLUTE_DIR($pavfile);
    my $cur_dir=`pwd`;chomp($cur_dir);
    my ($in)=@_;
    my $return="";
    if(-f $in){
        my $dir=dirname($in);
        my $file=basename($in);
        chdir $dir;$dir=`pwd`;chomp $dir;
        $return="$dir/$file";
    }elsif(-d $in){
        chdir $in;$return=`pwd`;chomp $return;
    }else{
        warn "Warning just for file and dir\n";
        exit;
    }
    chdir $cur_dir;
    return $return;
}



sub max{#&max(lists or arry);
    #求列表中的最大值
    my $max=shift;
    my $temp;
    while (@_) {
        $temp=shift;
        $max=$max>$temp?$max:$temp;
    }
    return $max;
}



sub min{#&min(lists or arry);
    #求列表中的最小值
    my $min=shift;
    my $temp;
    while (@_) {
        $temp=shift;
        $min=$min<$temp?$min:$temp;
    }
    return $min;
}



sub revcom(){#&revcom($ref_seq);
    #获取字符串序列的反向互补序列,以字符串形式返回。ATTCCC->GGGAAT
    my $seq=shift;
    $seq=~tr/ATCGatcg/TAGCtagc/;
    $seq=reverse $seq;
    return uc $seq;           
}



sub GetTime {
    my ($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst)=localtime(time());
    return sprintf("%4d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $day, $hour, $min, $sec);
}


sub USAGE {
    my $usage=<<"USAGE";
 ProgramName:
     Version:   $version
     Contact:   Simon Young <yangxh\@biomarker.com.cn> 
Program Date:   2012.07.02
      Modify:   
 Description:   This program is used to ......
       Usage:
        Options:
        -i <file>   input file,xxx format,forced

        -o <file>   output file,optional

        -h      help

USAGE
    print $usage;
    exit;
}