我是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 $!;
}
答案 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
超出范围时,它将在结束时自动关闭。)