在 perl 中使用命令行参数作为文件名

Using command line argument as a file name in perl

以下 perl 脚本从命令行获取参数并将其用作输出文件名。

my $str = $ARGV[0];
my $out_handler= Bio::SeqIO->new(
    -file => $str,
    -format => 'Fasta'
);

与此类似example。当我 运行 perl test.pl polg 时,我得到了这个错误

------------- EXCEPTION -------------
MSG: Could not read file 'polg': No such file or directory
STACK Bio::Root::IO::_initialize_io /opt/perl/lib/site_perl/5.14.2/Bio/Root/IO.pm:268
STACK Bio::SeqIO::_initialize /opt/perl/lib/site_perl/5.14.2/Bio/SeqIO.pm:513
STACK Bio::SeqIO::fasta::_initialize /opt/perl/lib/site_perl/5.14.2/Bio/SeqIO/fasta.pm:87
STACK Bio::SeqIO::new /opt/perl/lib/site_perl/5.14.2/Bio/SeqIO.pm:389
STACK Bio::SeqIO::new /opt/perl/lib/site_perl/5.14.2/Bio/SeqIO.pm:435
STACK toplevel test.pl:16
-------------------------------------

我该如何解决?

您的程序正在尝试从该文件读取,但失败了,因为它不存在

您在 github 上的示例代码有这个

-file => '>chrom20.fasta'

所以我建议你试试

-file => ">$str"

或者您可以运行您的程序

perl test.pl >polg

此外,对于包含输出文件名的标量变量,我相信您能想到一个比 $str 更好的名称。 $str 仅略高于 $var