Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在另一个perl脚本中打印perl脚本?_Perl_Printing_Nested - Fatal编程技术网

在另一个perl脚本中打印perl脚本?

在另一个perl脚本中打印perl脚本?,perl,printing,nested,Perl,Printing,Nested,嗨,我是新来的。我尝试过在不同的perl脚本中打印另一个perl脚本,我遇到的唯一建议是使用反斜杠转义变量……但我尝试了这个方法,但它不起作用 我的目标是编写一个perl脚本来生成一组新的perl脚本,但实际上它不允许我在打印中使用variable/array/etc。有办法解决这个问题吗?提前谢谢 以下是我的初稿: #!/usr/bin/perl use warnings; use strict; my $idfile = $ARGV[0]; open

嗨,我是新来的。我尝试过在不同的perl脚本中打印另一个perl脚本,我遇到的唯一建议是使用反斜杠转义变量……但我尝试了这个方法,但它不起作用

我的目标是编写一个perl脚本来生成一组新的perl脚本,但实际上它不允许我在打印中使用variable/array/etc。有办法解决这个问题吗?提前谢谢

以下是我的初稿:

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

    my $idfile = $ARGV[0];
    open (IDFILE,'<',$idfile)
    or die "Could not open $idfile \n";

    my $outfile_name;
    my $outfile = $outfile_name."pl";
    open (OUTFILE, '>', $outfile)
    or die "Could not open $outfile \n";

    while (my $line = <IDFILE>) {
        chomp ($line);
        if ($line =~ /(T4-GC_[0-9]+)/) {
            my $outfile_name = "Pull_".$line;
            my $script = "
    #!/usr/bin/perl
    use warnings;
    use strict;
    use Bio::SearchIO;
    use Bio::SeqIO;

    my @ARGV = glob("*.fa");

    foreach my $fil (@ARGV) {
        my $seqio  = Bio::SeqIO->new(-format => 'fasta', -file  => $fil);
            while (my $seqobj = $seqio->next_seq) {
            my $seqid = $seqobj->display_id;
            $fil =~ /([A-Z]+[0-9]+)/;
            my $phage_name = $1;
            my $id = $seqid."|".$phage_name;
            my $nuc = $seqobj->seq();
            if ($seqid =~ /**$line**/) {
                    print ">$id\n$nuc\n";
            }
    }
    }"
        print OUTFILE $script;
        }
    }

使用在前导分隔符周围带单引号的HERE文档

print <<'EOT';
#!/usr/bin/perl
use warnings;
use strict;
use Bio::SearchIO;
use Bio::SeqIO;

my @ARGV = glob("*.fa");

foreach my $fil (@ARGV) {
  my $seqio  = Bio::SeqIO->new(-format => 'fasta', -file  => $fil);
  while (my $seqobj = $seqio->next_seq) {
    my $seqid = $seqobj->display_id;
    $fil =~ /([A-Z]+[0-9]+)/;
    my $phage_name = $1;
    my $id = $seqid."|".$phage_name;
    my $nuc = $seqobj->seq();
    if ($seqid =~ /**$line**/) {
      print ">$id\n$nuc\n";
    }
  }
}
EOT

请注意,尾随分隔符必须由换行符包围:\n在源中跟踪\n。例如,不要尝试缩进它。在源文件中,您可以这样填充文本的另一个位置是在__;数据线之外。然后您可以重新阅读。

使用HERE文档,在前导分隔符周围加上单引号

print <<'EOT';
#!/usr/bin/perl
use warnings;
use strict;
use Bio::SearchIO;
use Bio::SeqIO;

my @ARGV = glob("*.fa");

foreach my $fil (@ARGV) {
  my $seqio  = Bio::SeqIO->new(-format => 'fasta', -file  => $fil);
  while (my $seqobj = $seqio->next_seq) {
    my $seqid = $seqobj->display_id;
    $fil =~ /([A-Z]+[0-9]+)/;
    my $phage_name = $1;
    my $id = $seqid."|".$phage_name;
    my $nuc = $seqobj->seq();
    if ($seqid =~ /**$line**/) {
      print ">$id\n$nuc\n";
    }
  }
}
EOT

请注意,尾随分隔符必须由换行符包围:\n在源中跟踪\n。例如,不要尝试缩进它。在源文件中,您可以这样填充文本的另一个位置是在__;数据线之外。然后,您可以重新阅读。

为什么需要创建新的pl文件?如果需要,最好创建一个pl,并使用不同的命令行调用它。为什么需要创建新的pl文件?如果需要,最好创建一个pl并使用不同的命令行调用它。