總結(jié):
如果使用全局修飾符/g盗尸,那么下次匹配會從上次匹配的中止位置開始;而不是從0開始火欧;
所以在做if篩選條件【if(base2=~/TACG/ )】的時候最好不要加/g;這時候pos($base)一直是空值棋电,當在這個語句塊中需要匹配位置的時候再加/g,
if($base1=~/ATCG/ || $base2=~/TACG/){
pos($base1); #此時為空值
pos($base2); #此時為空值
if($base1=~/ATCG/g){
pos($base1); # 此時返回正常位置值苇侵;
}
}
在 Perl 中赶盔,如果對一個字符串使用 /g 修飾符進行全局匹配,則 pos 函數(shù)會在匹配時記錄上一次匹配結(jié)束的位置榆浓,并在下一次匹配時從該位置開始繼續(xù)匹配于未。但是,如果沒有使用 /g 修飾符,則 pos 函數(shù)不會記錄匹配結(jié)束的位置烘浦,而是始終返回 0抖坪。
因此,對于連續(xù)兩次同樣的匹配闷叉,如 r/ 后再接一個 r/擦俐,如果沒有使用 /g 修飾符,則 pos(seq2) 的值重置為 0。例如:
my $seq2 = "ACCTTGAGGT";
my $r = "G";
# 第一次匹配
if ($seq2 =~ /$r/) {
print "Matched at position ", pos($seq2), "\n";
}
# 第二次匹配
pos($seq2) = 0; # 重置匹配的起始位置
if ($seq2 =~ /$r/) {
print "Matched at position ", pos($seq2), "\n";
}
在上述代碼中萄传,對字符串 seq2) 的值重置為 0答朋,以使其從字符串的起始位置開始匹配贷揽。