我正在接替那些突然离开我公司并且几乎没有使用Perl编程经验的人。我的O'Reilly书籍,谷歌和这里的搜索让我陷入了一个越来越混乱的局面,我处于死路。
我有一个自动生成的哈希值,它会定期更新并作为文本文件保存在服务器上。文件内容如下:
$VAR1 = {
'qa_metrics' => {
'group_level' => {
},
'product_level' => {
'qa_metric_1' => [
{
'operator' => '>',
'limit' => '5',
}
],
'qa_metric_2' => [
{
'operator' => '>',
'limit' => '5',
}
]
}
}
'speed_metrics' => {
'group_level' => {
'group_speed_metric_1' => [
{
'operator' => '>=',
'limit' => '6',
}
]
},
'product_level' => {
'speed_metric_1' => [
{
'operator' => '>=',
'limit' => '6',
}
],
'speed_metric_2' => [
{
'operator' => '<=',
'limit' => '13',
}
]
}
}
'other_metrics' => {
'product_level' => {
'other_metric_1' => [
{
'operator' => '==',
'limit' => '1',
}
],
'other_metric_2' => [
{
'operator' => '<',
'limit' => '3',
}
]
}
}
}
我正在开发的项目要求我遍历多级哈希结构,并将所有'product_level'度量标准名称推送到基于度量标准类型的数组中。例如,qa_metric_1
,qa_metric_2
以及该类型的任何其他内容(qa
)和级别(product
)将在speed_metric_1
时被推送到一个数组中, speed_metric_2
,other_metric_1
,other_metric_2
等会被推送到各自独立的数组中。
一旦数组被填充并包含在,
和``或类似内容中,我相信我可以自己从这一点开始。
我应该提一下,我正在使用Perl 5.8,我的能力(意味着来自IT的许可)添加第三方模块几乎不存在。
非常感谢任何帮助。
答案 0 :(得分:2)
如果您使用Data::Dumper
模块,并将其打印到文件中,这看起来就像您所获得的那样。如果您想再次阅读它,我认为这有点不寻常。它是一个调试工具,并且有更好的方式以重新读取的格式提取信息。
我建议首先看看输出出现的位置,并使用Storable
(核心模块,我想想它将在5.8)中将其保存到您可以轻松重读的文件中。
如果失败了,虽然可以应用一些黑客来执行此操作。但不要误以为他们是一个很好的解决方案&#39;因为&#39;良好的解决方案&#39;是不是首先要做到这一点!
例如 - 这应该有效,但如果你无法控制文件内容,那就太危险了。 (这基本上是在这个文件中运行一些代码,并希望它没有采取任何可怕的方法。这通常是坏消息,并且要避免)。
请参阅:How do I read back in the output of Data::Dumper?
use strict;
use warnings;
our $VAR1;
open ( my $input_fh, "<", "your_file.txt" );
{
local $/;
$VAR1 = eval <$input_fh>;
warn $@ if $@;
}
foreach my $key ( keys %{$VAR1} ) {
print "$key:\n";
}
有一点需要注意 - 您发布的数据中是否存在拼写错误,您省略了一些逗号?否则它不是有效的数据结构。 (您需要在每个&#39; qa_metrics
,speed_metrics
等之间使用逗号。
一旦你完成了这个,你就会得到一个哈希,然后你可以用你认为合适的方式进行操作 - 遍历哈希来提取你想要的数据应该相当简单。