perl中随机文件名生成的异常字符

时间:2017-10-10 10:08:43

标签: bash perl mktemp

使用下面的perl代码,我尝试在随机生成的文件中输出一些名称。但是这些文件是用奇怪的字符创建的:

" SNP一览boo.dwjEUq5Wu ^ J.txt"

而且,显然当我的代码查找这些文件时,它说不是这样的文件。此外,当我尝试使用" vi"打开文件时,它们会像这样打开

vi 'temporary-files/snp-list-boo.dwjEUq5Wu
.txt'

即。使用"新线"在文件名中。有人请帮助我理解并解决这个奇怪的问题。非常感谢!

代码:

my $tfile = `mktemp boo.XXXXXXXXX`;
my $fh = "";
     foreach my $keys (keys %POS_HASH){
       open ($fh, '>>', "temporary-files/snp-list-$tfile.txt");
        print $fh "$keys $POS_HASH{$keys}\n";
        close $fh;
         }

2 个答案:

答案 0 :(得分:6)

mktemp在其输出中返回换行符,您需要先切断()或chomp()。

不是使用外部mktemp计划,为什么不选择使用File::Temp

答案 1 :(得分:4)

出于某些原因,不必要地使用外部程序是一个坏主意。

  • 您使用的外部程序可能无法在运行代码的所有系统上使用。因此,您的程序便于移植。
  • 生成一个新的子shell以运行外部程序要比在当前环境中完成工作要慢得多。
  • 您从外部程序返回的值可能附加了换行符。你可能忘记删除它。

这是最后一个在这里烧你的人。但其他人仍然适用。

多年来,Perl的标准库包含File::Temp模块,可以为您创建临时文件,而无需使用外部程序。

use File::Temp qw/ tempfile /;

# It even opens it and gives you the filehandle.
($fh, $filename) = tempfile();