我在执行perl子例程时遇到问题。 这是定义:
sub primer{
print STDERR "primer is $_[0]\n";
$primer=$_[0];
if ($_[0]=~/ATTACCGC/){
mkdir ("Primer1") || die "Unable to create directory <$!>\n";
open OUTFILE1,">","Primer1/lt450";
open OUTFILE2,">","Primer1/no_primer_lt450";
open REPORT,">","Primer1/Report";
&primer_analysis('ATTACCGC');}
if ($_[0]=~/CCGTCAATTC[AC]/){
mkdir ("Primer2") || die "Unable to create directory <$!>\n";
open OUTFILE1,">","Primer2/lt450";
open OUTFILE2,">","Primer2/no_primer_lt450";
open REPORT,">","Primer2/Report";
&primer_analysis('CCGTCAATTC[AC]');}
以下是应该由上面调用的另一个子例程的一部分:
sub primer_analysis{
$primer=$_[0];
while ($line = <INFILE>){
if ($line =~ /^>/) {
$header = $line;
$headcnt++;}
if ($line !~/^>/){
$seq = $line;
chomp($seq);
if (length($seq)<450 && $seq=~/^$primer/){
$len_450=length($seq);
$TB_450=$len_450+$TB_450;
$cnt450++;
print OUTFILE1 "$header";
print OUTFILE1 "$seq\n";}}
以下是调用函数:
&primer('ATTACCGC');
&primer('CCGTCAATTC[AC]');
问题是,当我运行程序时,只有Primer1被执行,即目录和数据被正确创建,然而,Primer2没有任何反应。 任何想法为什么只有一部分功能被执行? 感谢
答案 0 :(得分:2)
字符[]
是正则表达式中的特殊字符。您需要通过编写CCGTCAATTC\[AC\]
在子引子中转义它们,或者只使用eq
字符串比较。因为你的第二篇文章是失败的,因为你的引文中的文字[
与[AC]
字符类不匹配。
答案 1 :(得分:0)
一般建议:
考虑使用shift而不是$ _ [0],即
$primer = shift;
if $primer =~ /ATTACCGC/){ ..... etc.
而不是
$primer=$_[0];
if ($_[0]=~/ATTACCGC/){
...然后在你的函数中使用$ primer而不是$ _ [0]。