重定向不同目录中的输出文件

时间:2017-03-25 06:02:21

标签: perl

我是Perl的新手并尝试将输出文件放在不同的目录中。代码如下所示

use File::Basename;
use File::Copy;
use File::Path; 

    foreach my $file (sort({uc($a) cmp uc($b)} keys(%$ch_ref))) {
        my $num = keys(%{$$ch_ref{$file}});
             print "\n     -> $string $file ($num):\n";
        foreach my $sid (keys(%{$$ch_ref{$file}})) {
            if ($type == $PRINT_OLD) {
                open ( my $output, '>>',$file );
                        print {$output} "  something";
                close ( $output ) or die $!;
            } 

1 个答案:

答案 0 :(得分:2)

open()的第三个参数是您要打开的文件的完整路径。目前,你只是给它文件名。但您可以扩展它以包含目录。

这样的事情:

my $dir = '/path/to/some/directory';

open my $output, '>>', $dir . $string . '_' . $file;

您应该检查open()调用是否成功,如果您首先将文件名构建到变量中,则更容易提供合理的错误消息。

my $dir = '/path/to/some/directory';
my $filename = "$dir${string}_$file";

open my $output, '>>', $filename
  or die "Can't open $filename: $!";

请注意,使用${string}代替$string意味着您可以直接在字符串中使用它,而不会将名称与以下_字符纠缠在一起。

我还强烈建议您在子程序中放弃使用原型。 Perl原型通常比它们的价值要大得多。

此外,您的文件不需要open()close()这么多次。只需在循环顶部打开它(当$output超出范围时,它将在结束时自动关闭。)