我在perl中已经存在的转储文件中附加了数据转储。但是使用eval<>只返回一个数据转储。我将转储命名为$ project1,$ project2等等。我不需要从转储文件中检索$ project2。我怎么做? 这是我的数据转储:
$project1 = {
'projectname1' => [
{
'media_name' => 'Design Sync',
'dssite' => 'gnb',
'area' => 'qa_dap',
'ldap_list' => 'list1',
'replicate_key' => '2',
'user_num' => '4858',
'role' => '1',
'prj_name' => 'DAP_Rep_Test'
},
{
'media_name' => 'Design Sync',
'dssite' => 'noi',
'area' => 'qa_dap',
'ldap_list' => 'list2',
'replicate_key' => '2',
'user_num' => '4858',
'role' => '1',
'prj_name' => 'TAP_Rep_Test'
}
]
};
$project2 = {
'projectname2' => [
{
'media_name => 'B Sync',
'dssite' => 'agr',
'area' => 'qa_dap',
'ldap_list' => 'list1',
'replicate_key' => '2',
'user_num' => '4858',
'role' => '1',
'prj_name' => 'DAP_Rep_Test'
},
{
'media_name' => 'Design Sync',
'dssite' => 'noi',
'area' => 'qa_dap',
'ldap_list' => 'list2',
'replicate_key' => '2',
'user_num' => '4858',
'role' => '1',
'prj_name' => 'DAP_Rep_Test'
}
]
};
我如何获得project2 - > projectname2 - >第一个括号{} ??
的media_name值这是我编写转储并检索它的perl代码:
# Print structure to file
open my $out, '>>', 'file_dump' or die $!;
my %hash_val;
$hash_val {projectname} = $arrayref;
print {$out} Data::Dumper->Dump([\%hash_val], ["projectname"]), $/;
close $out;
# Read structure back in again
open my $in, '<', 'file_dump' or die $!;
my $data;
{
local $/; # slurp mode
$data = eval <$in>;
}
close $in;
答案 0 :(得分:0)
Data::Dumper
的有用之处在于它可以让您打印数据结构,这样可以更轻松地找出您需要打印的内容。
project2
有[]
表示数组。在您的示例中,它只有一个元素,因此:
$project2 -> projectname2[0]{media_name}
(如用户名中的注释所示,我可以输入; p)
你也可以这样做:
foreach my $thing ( @{ $project2 -> {projectname2} } } {
print $thing -> {media_name},"\n";
}
但实际上 - 看起来你正在从错误的方向接近这个问题。 Data::Dumper
不适合数据导入/导出。 Storable
是一种保存和加载数据结构的方法。
如果以外部程序仍然可读的方式这样做,则可能值得查看JSON
或XML
而非Dumper
之类的内容。它最初有点难度,但是会产生更强大,更持久的代码。