作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Perl 世界的新手,我需要有关从文件中的散列中保存数据以及之后在另一个散列中使用它的帮助。
这是我的代码的一个简短示例:
#!/usr/local/bin/perl
use FileHandle;
use File::Copy;
use Data::Dumper qw(Dumper);
use Storable;
use warnings;
use strict;
my $user_data;
$user_data->{test_user}->{1256489043}->{STATUS} = "RUN";
$user_data->{test_user}->{1256489043}->{MEM} = "51591";
$user_data->{test_user}->{1256489043}->{RUN_TIME} = "41410";
$user_data->{test_user}->{1256489043}->{PROJ_NAME} = "unkown";
$user_data->{test_user}->{1256489043}->{GROUP} = "default";
$user_data->{test_user}->{1256489043}->{DATE} = "Aug 17 05:23";
$user_data->{test_user_2}->{528562752}->{STATUS} = "RUN";
$user_data->{test_user_2}->{528562752}->{MEM} = "591";
$user_data->{test_user_2}->{528562752}->{RUN_TIME} = "46410";
$user_data->{test_user_2}->{528562752}->{PROJ_NAME} = "unkown";
$user_data->{test_user_2}->{528562752}->{GROUP} = "default";
$user_data->{test_user_2}->{528562752}->{DATE} = "Aug 17 05:23";
store (\$user_data, 'temp_jobs.txt') or die "can't store data to $!";
my $data = retrieve('temp_jobs.txt');
print "Hash 1\n";
print Dumper \$user_data;
print "Hash2\n";
print Dumper \$data;
my @new_array_id;
foreach my $user (keys %{$user_data}) {
foreach my $job_id (keys %{$user_data->{$user}}) {
push (@new_array_id, $job_id)
}
}
my @old_array_id;
foreach my $user (keys %{$data}) {
foreach my $job_id (keys %{$data->{$user}}) {
push (@old_array_id, $job_id)
}
}
这些是 Dumper 打印的输出:
$VAR1 = \{
'test_user_2' => {
'528562752' => {
'GROUP' => 'default',
'PROJ_NAME' => 'unkown',
'DATE' => 'Aug 17 05:23',
'STATUS' => 'RUN',
'RUN_TIME' => '46410',
'MEM' => '591'
}
},
'test_user' => {
'1256489043' => {
'GROUP' => 'default',
'PROJ_NAME' => 'unkown',
'DATE' => 'Aug 17 05:23',
'STATUS' => 'RUN',
'RUN_TIME' => '41410',
'MEM' => '51591'
}
}
};
$VAR1 = \\{
'test_user' => {
'1256489043' => {
'GROUP' => 'default',
'PROJ_NAME' => 'unkown',
'DATE' => 'Aug 17 05:23',
'STATUS' => 'RUN',
'RUN_TIME' => '41410',
'MEM' => '51591'
}
},
'test_user_2' => {
'528562752' => {
'GROUP' => 'default',
'PROJ_NAME' => 'unkown',
'DATE' => 'Aug 17 05:23',
'STATUS' => 'RUN',
'RUN_TIME' => '46410',
'MEM' => '591'
}
}
};
在第二个 foreach 循环中观察到错误:
foreach my $user (keys %{$data}) {
foreach my $job_id (keys %{$data->{$user}}) {
push (@old_array_id, $job_id)
}
}
输出:report.pl 中不是 HASH 引用`
实际上,我不确定检索到的数据的类型。您能帮忙将数据保存在新的哈希中吗?
最好的问候,SK
最佳答案
您的 $user_data
变量包含一个哈希引用。哈希引用是一个标量值。我认为您对 documentation for Storable 的概要感到困惑。其中包含这样的示例:
store \%table, 'file';
在上面的例子中,%table
是一个哈希。因此,您需要引用它以便将其传递给 store()
。因为你在 $user_data
中拥有的是一个哈希引用,而不是一个哈希,所以在将它传递给 store()
之前你不需要获取它的引用。事实上,通过引用它,您已经添加了额外的间接级别,这会破坏您的代码。
你说:
Actually, I'm not sure about the type of the retrieved data.
它是对哈希引用的引用。但是您的代码只需要一个哈希引用。
最简单的解决方法是替换:
store (\$user_data, 'temp_jobs.txt') ... ;
与
store ($user_data, 'temp_jobs.txt') ... ;
删除单个字符后,您的两个数据结构相同,并且您的代码按预期工作。
关于perl - 如何将哈希中的数据存储在文件中并将其用于另一个哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63453384/
我是一名优秀的程序员,十分优秀!