将特定命名的文件输出到与infile相同的目录 - Perl

时间:2014-01-08 14:14:49

标签: perl directory file-io

我有以下代码:

#!/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");

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您正在尝试将输出写入与输入文件相同的目录。如果是这样,您可以使用File::Basename模块获取输入文件的目录。

答案 1 :(得分:1)

怎么样

my $outfile=$infile . ".combinations"

或者,更好的是,使用stdin和stdout。

(另外,检查你的outfile是否已成功打开)