0

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

“snp-list-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;
         }
4

2 回答 2

6

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

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

于 2017-10-10T10:12:40.490 回答
4

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

  • 您使用的外部程序可能并非在您的代码运行的所有系统上都可用。因此,您使程序的可移植性降低。
  • 生成一个新的子 shell 来运行外部程序比在当前环境中执行工作要慢得多。
  • 您从外部程序返回的值可能带有换行符。你可能会忘记删除它。

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

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

use File::Temp qw/ tempfile /;

# It even opens it and gives you the filehandle.
($fh, $filename) = tempfile();
于 2017-10-10T11:11:00.717 回答