我有以下代码:
#!/usr/bin/perl
use strict;
use warnings;
my $usage = "Usage: $0 <infile.txt> <outfile.txt>\n";
my $infile = shift or die $usage;
my $outfile = shift or die $usage;
open (my $data, "<", $infile) or die "There was a problem opening: $!";
my @primers = <$data>;
close $data;
chomp @primers;
use Algorithm::Combinatorics qw(combinations);
my $strings = \@primers;
my $iter = combinations($strings, 2);
open(my $fh, '>', $outfile);
while (my $c = $iter->next) {
print $fh join('',@$c) ."\n";
}
哪个工作正常但是我更喜欢用户不必指定输出目录和文件名。是否有一种简单的方法可以让Perl将输出打印到与infile相同的目录,同时也为输出文件指定一个特定的名称,例如'output.txt'?
任何指针都将非常感谢!
感谢。
解决:
#!/usr/bin/perl
use strict;
use warnings;
my $usage = "Usage: $0 <infile.txt>\n";
my $infile = shift or die $usage;
use File::Basename;
my $DIR = dirname($infile);
my $outfile = $DIR . "/results.txt" or die $usage;
open (my $data, "<", $infile) or die "There was a problem opening: $!";
my @primers = <$data>;
close $data;
chomp @primers;
use Algorithm::Combinatorics qw(combinations);
my $strings = \@primers;
my $iter = combinations($strings, 2);
open(my $fh, '>', $outfile);
while (my $c = $iter->next) {
print $fh join('',@$c) ."\n";
}
print ("Finished. The results are located at $outfile\n\n");
答案 0 :(得分:2)
如果我理解正确,您正在尝试将输出写入与输入文件相同的目录。如果是这样,您可以使用File::Basename模块获取输入文件的目录。
答案 1 :(得分:1)
怎么样
my $outfile=$infile . ".combinations"
或者,更好的是,使用stdin和stdout。
(另外,检查你的outfile是否已成功打开)