#開頭處經常使用模塊框架
#!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若是是負值的話,就會從字符串右邊開始指定字符。
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 「$!」 #打印$!值,並結束整個進程 #他自帶換行符