gpt4 book ai didi

perl - 如何将哈希中的数据存储在文件中并将其用于另一个哈希

转载 作者:行者123 更新时间:2023-12-03 23:59:54 27 4
gpt4 key购买 nike

我是 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com