首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用异常字符生成的perl中的随机文件名

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

Stack Overflow用户
提问于 2017-10-10 10:08:42
回答 2查看 286关注 0票数 0

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

“snp-list-bo.dwjEUq5Wu^J.txt”

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

代码语言:javascript
复制
vi 'temporary-files/snp-list-boo.dwjEUq5Wu
.txt'

也就是说,在文件名中有“新行”。谁能帮我理解和解决这个奇怪的问题。非常感谢!

代码:

代码语言:javascript
复制
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;
         }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-10 10:12:40

mktemp在其输出中返回一个行提要字符,首先需要chop()或chomp()。

与其使用外部mktemp程序,不如使用档案::Temp吧?

票数 6
EN

Stack Overflow用户

发布于 2017-10-10 11:11:00

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

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

这是最后一个烧死你的地方。但其他的也同样适用。

多年来,Perl的标准库中包含了档案::Temp模块,该模块为您创建临时文件,而不需要使用外部程序。

代码语言:javascript
复制
use File::Temp qw/ tempfile /;

# It even opens it and gives you the filehandle.
($fh, $filename) = tempfile();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46664077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档