用不寻常的字符生成的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();
使用下面的 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();