用不寻常的字符生成的perl中的随机文件名

random file name in perl generated with unusual characters

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

"snp-list-boo.dwjEUq5Wu^J.txt"

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

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

即文件名中带有 "new line"。有人请帮助我理解并解决这个奇怪的问题。非常感谢!

代码:

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;
         }

mktemp returns 输出中的换行符,您需要先 chop() 或 chomp()。

为什么不使用外部 mktemp 程序,为什么不使用 File::Temp 呢?

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

  • 您使用的外部程序可能不适用于您的代码 运行 所在的所有系统。因此,您正在降低程序的可移植性。
  • 生成一个新的子shell 到 运行 一个外部程序比只在当前环境中工作要慢很多。
  • 您从外部程序返回的值可能附加了换行符。你可能会忘记删除它。

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

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

use File::Temp qw/ tempfile /;

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