perl腳本框架整理

#開頭處經常使用模塊框架

#!usr/bin/perlless

use warnings;函數

use strict;spa

use Getopt::Long;   命令行

use File::Basename;code

use PerIO::gzip;     #open IN,"<:gzip","$in" or die " $in:$!"; #打開的是一個gzip壓縮文件,即$in是file.gz文件orm

use Cwd;xml

 

#外部參數設置「模塊」—— 「use Getopt::Long; 」(另有詳解)對象

my ($indir,$rep,$dep,$out);
GetOptions(
  "indir:s" => \$indir,
   "rep:s" => \$rep,
  "dep:i" => \$dep,
  "out:s" => \$out,
);blog

 

#說明「模塊-1」 

=head1 name

  myfile,pl

  #介紹此腳本功能

=head1 example

  perl  myfile.pl  -參數1  ******** -參數2  ********* -參數  ********   2>myfile.log  

=head1 description                                            #若是,使用Getop::Long模塊,通常此處爲參數解釋說明

  -參數1      <str>             ********

  -參數2      [str]     ********

  -參數3  [int]    ********

  -參數4  [flt]     ********

  -參數         ********

  -help         help

=head1 author

   839365149@qq.com

=head1 version

   1.0  2017-07-15   15:00

=cut

die `pod2text $0` if ( $help );                                 # 當用戶有輸入 -help參數時,進行輸出上邊的=head1 ...=head1 ......=cut框架中的信息;

die `pod2text $0` unless ($fq1 && $list1);             # 用於缺乏指定的必須參數時,進行報錯,輸出上邊的=head1 ...=head1 ......=cut框架中的信息;

                      # `command`
                      # Perl使用反引號調用外部命令(命令行命令)可以捕獲其標準輸出,並按行返回且每行結束處附帶一個回車。反引號中的變量在編譯時會被內插爲其值。

                      # pod2text 是命令行函數   #功能輸出處理對象(腳本)中的的=head1 ...=head1 ......=cut框架中的信息

#說明「模塊-2」 

my $usage=<<USAGE;
Usage : $0
  -indir : directory for input files
   -rep : repeat rate[1.5]
  -dep : depth[0]
  -out : outfile
USAGE

 

#顯示時間信息                      

my $time=`date`;                                                   # date 命令行函數,輸出時間

print STDERR "|-- Start $0 at time: ".$time."\n";     # $0指代的就是myfile.pl腳本

 

#註釋框信息——任意發揮你想要的解釋or提示做用

eg1:解釋文件格式

#####adapter.list format#########################################################################
# FC81CCCABXX:3:1101:1235:2198#ACTTGAAT/1 49 31 48 iPE-3+ 34 0 17 18 0
# reads_id reads_len reads_start reads_end adapter_id adapter_len adapter_start adapter_end align_len mismatch
############################################################################################

#內部全局參數設置及初始化

my($name,$place,$num);

 

#內部全局Perl取整、四捨五入、向上取整、向下取整

取整int 
四捨五入round 
向上取整POSIX::ceil 
向下取整就是int或者POSIX::floor

其中ceil和floor,要使用庫POSIX,在perl源代碼里加入

#!/usr/bin/perl use strict; use warnings; use POSIX;


#打開外部文件

if($methy=~/\.gz$/){
  open IN,"<:gzip",$methy || die $!;
}
else{
  open IN,$methy || die $!;
}

#打開輸出文件

if($cout =~ /.gz$/){open OT,">:gzip",$cout;}else{open OT,">$cout";}

 

#while循環

while(<IN>){

  chomp($_); #去掉換行符字符

  next if($_ eq "");#跳過空行

  next if($_=~/^$/)#跳過空行

  last if(not defined $_); #跳過不含字符(包含換行符、空格、空行等)和數值的行,defined判斷變量(不管這個變量是否被定義)是否爲空(即不包含任何字符和數值)。

}

 

#for循環

for( $a = 0; $a < 10; $a = $a + 1 ){

  print "a 的值爲: $a\n";

}

 

 

#split方便用法

my $chromosome_2 = (split /\./,$chromosome)[0];   

my ($id, $strand, $chr) = (split /\t/)[0..2];      #以空格爲分割標準爲 /\t/ 

my ($id, $strand, $chr) = (split /\s+/)[0..2];      #以空格爲分割標準爲 /\s+/ 

 

#偶爾用,但很容易忘記的字符串截取命令substr()

語法:substr($string,offset,length)
offset表明起始字符的位置,length表明引用的字符串長度,若是省略length則表明從起始值到字符串的最後一個字符長度。而offset若是是負值的話,就會從字符串右邊開始指定字符。

    1. $s=substr("perl5",2,2);#這時$s="rl";  
    2. $s=substr("perl5",2);#這時$s="rl5";  
    3. $s=substr("perl5",-2,2);#這時$s="er"; 

 

 

 

 

PS:

#一些特殊符號的意義

$0      #指代的就是運行的*.pl 或者  /dir1/dir2/*.pl,即命令行  perl  *.pl    或者 perl   /dir1/dir2/*.pl     

$?     #若是,報錯,$?會產生一個數值,可用下邊的perl腳本糾錯,查出$?產出的數值是表明什麼報錯(這個腳本內容沒搞明白!)

if ($? == -1) {
print "failed to execute: $!\n";
}
elsif ($? & 127) {
print "child died with signal %d, %s coredump\n",($? & 127), ($? & 128) ? 'with' : 'without';
}
else {
print "child exited with value %d\n", $? >> 8;
}

 

$!      #直接文字報錯說明緣由

die 「$!」    #打印$!值,並結束整個進程 #他自帶換行符

相關文章
相關標籤/搜索