【问题标题】:Perl - Print output to files in a different directoryPerl - 将输出打印到不同目录中的文件
【发布时间】:2012-09-30 14:26:00
【问题描述】:

早上好!

如果之前已经发布过,我很抱歉 - 我找不到它。我只需要一点点指向正确的方向,这是我的作业,我觉得它快完成了。我想要做的是从运行脚本的不同文件夹中的文件中获取数据,在 Perl 中处理数据,然后将输出打印到另一个目录。现在我完成了这两个部分,但我失败的是 Perl 没有找到我想要保存文件的路径。它只是说“不存在具有该名称的文件或目录”,但确实如此!这是脚本的一部分:

my @files = <$ENV{HOME}/Docs/unprocessed/*.txt>;
my $path = "$ENV{HOME}/Docs/results";

<looping through @files, processing each file in the unprocessed folder...>

open (OUTFILE, $path . '>$file') or die $!;
print OUTFILE ""; # "" Is really the finished calculations from the loop, not important here.
close FILE;
close OUTFILE;

我敢打赌这很愚蠢......

【问题讨论】:

  • 感谢您的回答! use File::Basename;open (OUTFILE, "&gt;$path/" . basename($file)) 成功了。
  • 标题中不用solved

标签: perl file path directory file-io


【解决方案1】:

因为您将“写入”标记&gt; 与文件名混合在一起。这个:

open (OUTFILE, $path . '>$file')

应该是:

open (OUTFILE, ">$path/$file")

您还可能需要从文件名中去掉 .../Docs/unprocessed/ 前缀:

use File::Basename;

open (OUTFILE, ">$path/" . basename($file))

【讨论】:

  • 有效!感谢一百万豪伊!现在我的靴子与特定的 Perlmonk 有约会......
  • 三个参数 open 会更好 open (OUTFILE, '&gt;', "$path/" . basename($file)) 以防止变量中出现奇怪的东西。
  • @RobEarl 除了open 的三参数版本,使用词法文件句柄会更好。 open my $fh, '&gt;' , '...' or die 'miserably';
  • 知道如何将字符串添加到 basename($file) 吗?我还想将当前日期和时间添加到文件名中,保存在 $date 中。
  • 追加:"$path/" . basename($file) . "-$date"
猜你喜欢
  • 2021-11-25
  • 2011-12-19
  • 2014-07-22
  • 2023-03-22
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
相关资源
最近更新 更多