Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 将哈希写入文件的最佳方法_Database_Perl_File_Hash - Fatal编程技术网

Database 将哈希写入文件的最佳方法

Database 将哈希写入文件的最佳方法,database,perl,file,hash,Database,Perl,File,Hash,根据dbmopen docu的说法,该功能已被“tie”功能大大取代。 我知道Tie::File模块,它通过Perl数组访问磁盘文件的行。 如果我不需要数组而需要散列,我该怎么做?要将散列写入文件: open(OUT,">myFile.txt"); foreach my $key (sort keys %hash) { print OUT $key.",".$hash{$key}."\n"; } close(OUT); 要将哈希写入文件,请执行以下操作: open(OUT,"&g

根据dbmopen docu的说法,该功能已被“tie”功能大大取代。 我知道Tie::File模块,它通过Perl数组访问磁盘文件的行。
如果我不需要数组而需要散列,我该怎么做?

要将散列写入文件:

open(OUT,">myFile.txt");

foreach my $key (sort keys %hash) {
   print OUT $key.",".$hash{$key}."\n";
}
close(OUT);

要将哈希写入文件,请执行以下操作:

open(OUT,">myFile.txt");

foreach my $key (sort keys %hash) {
   print OUT $key.",".$hash{$key}."\n";
}
close(OUT);

查看标准AnyDBM_文件模块及其引用的其他文档,了解使用
tie
代替
dbmopen

的一些示例查看标准AnyDBM_文件模块及其引用的其他文档,对于使用
tie
代替
dbmopen

的一些示例,您可以使用:

或者,如果您需要存储更多数据,则:

您可以使用:

或者,如果您需要存储更多数据,则:


核心模块SDBM_文件可以将哈希绑定到文件:

use Fcntl;
use SDBM_File;

tie(%h, 'SDBM_File', 'filename', O_RDWR|O_CREAT, 0666) or die $!;
...
...
untie %h;

但是:“……密钥的长度加上其相关值的长度不得超过1008字节。”

核心模块SDBM_文件可以将哈希绑定到文件:

use Fcntl;
use SDBM_File;

tie(%h, 'SDBM_File', 'filename', O_RDWR|O_CREAT, 0666) or die $!;
...
...
untie %h;

但是:“……键的长度加上其相关值的长度不得超过1008字节。”

请永远不要使用裸字文件句柄。它们对软件的安全性和稳定性是一种风险,将它们传播给新手会降低perl的质量。一旦您更改为使用标量文件句柄,我将撤消我的投票。在您的一个键中有逗号之前,这一切都很正常。对散列进行排序通常没有什么意义——只要使用每一个,除非它真的很重要。@Mithaldu,我不会更改任何代码。如果你正在设计一个任务关键型核电站(不太可能使用Perl,因为它完全取决于一个人,一个非常有才华的狂热者),我可以理解你的观点。如果您正在编写一段Perl,为了尽快完成一项工作,我不知道问题出在哪里。不管怎么说,我从来没有打算给出一个完整的答案——只是一个关于如何着手做某事的指标。因此,你的负代表是可悲的。我要求你提供一个更好的答案。“做得更好!”这是一个孩子的抱怨。将来你应该远离这些事情。毕竟,即使你从来没有造过一辆坏汽车,你也能识别出它,是吗?此外,为了回答您的第一个问题,即为什么会出现这样的问题:您确实意识到Data::Dumper、Storable和JSON对于实现细节来说是完全一样的安全的吗?它们都是核心序列化模块,这正是OP所需要的。那么,我在整个问题中收到的评论不是积极贡献的指标吗?真正地最后:Perl也被用于医疗设备:PS:Using“includes”,即使用来自CPAN的模块是好的,不是坏的。请永远不要使用裸字文件句柄。它们对软件的安全性和稳定性是一种风险,将它们传播给新手会降低perl的质量。一旦您更改为使用标量文件句柄,我将撤消我的投票。在您的一个键中有逗号之前,这一切都很正常。对散列进行排序通常没有什么意义——只要使用每一个,除非它真的很重要。@Mithaldu,我不会更改任何代码。如果你正在设计一个任务关键型核电站(不太可能使用Perl,因为它完全取决于一个人,一个非常有才华的狂热者),我可以理解你的观点。如果您正在编写一段Perl,为了尽快完成一项工作,我不知道问题出在哪里。不管怎么说,我从来没有打算给出一个完整的答案——只是一个关于如何着手做某事的指标。因此,你的负代表是可悲的。我要求你提供一个更好的答案。“做得更好!”这是一个孩子的抱怨。将来你应该远离这些事情。毕竟,即使你从来没有造过一辆坏汽车,你也能识别出它,是吗?此外,为了回答您的第一个问题,即为什么会出现这样的问题:您确实意识到Data::Dumper、Storable和JSON对于实现细节来说是完全一样的安全的吗?它们都是核心序列化模块,这正是OP所需要的。那么,我在整个问题中收到的评论不是积极贡献的指标吗?真正地最后:Perl也被用于医疗设备:PS:Using“includes”,即使用CPAN中的模块是好的,不是坏的。这完全取决于您想要实现什么,以及存储了多少数据。你能补充一些信息吗?我将是(被取代的)dbmopen的替代品。在这个实际案例中,数据并不多。她所说的信息是指:什么样的信息?它是如何使用的?具体多少钱?有什么限制吗?如果您只需要这些,dbm*函数不会被取代。这完全取决于你想要实现什么,以及存储了多少数据。你能补充一些信息吗?我将是(被取代的)dbmopen的替代品。在这个实际案例中,数据并不多。她所说的信息是指:什么样的信息?它是如何使用的?具体多少钱?有什么限制吗?如果您只需要这些,dbm*函数不会被取代。他们使用散列,“使用可存储”链接被破坏。Perl人员将其更改为:“使用可存储”链接已断开。Perl人员将其更改为: