在另一个perl脚本中打印perl脚本?
嗨,我是新来的。我尝试过在不同的perl脚本中打印另一个perl脚本,我遇到的唯一建议是使用反斜杠转义变量……但我尝试了这个方法,但它不起作用 我的目标是编写一个perl脚本来生成一组新的perl脚本,但实际上它不允许我在打印中使用variable/array/etc。有办法解决这个问题吗?提前谢谢 以下是我的初稿:在另一个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
#!/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并使用不同的命令行调用它。