使用ruby解析Perl Data :: Dumper输出

时间:2017-06-06 10:13:17

标签: ruby perl

我的目录中充满了由Perl的Data :: Dumper打印的状态文件。内容如下所示:

$VAR1 = {
          'localtime' => 'Tue Jun  6 11:48:20 2017',
          'lookback_history' => {
                                  'ifHCOutOctets' => {
                                                       '1496742350.42394' => '74365529910',
                                                       '1496742455.72943' => '74366309899',
                                                       '1496742446.38562' => '74366309114',
                                                       '1496742500.42388' => '74372744112'
                                                     },
                                  'ifHCInOctets' => {
                                                      '1496742350.42394' => '13198364950',
                                                      '1496742455.72943' => '13198718163',
                                                      '1496742446.38562' => '13198705712',
                                                      '1496742500.42388' => '13199010183'
                                                    }
                                },
          'timestamp' => '1496742500.42388',
          'ifHCOutOctets' => '74372744112',
          'ifHCInOctets' => '13199010183'
        };

我要分析文件是否包含不可再生的信息。

ruby​​中有没有办法解析那些perl转储?

2 个答案:

答案 0 :(得分:4)

如果这些数据属于您,并且您肯定其中不包含任何意外/有害的字符串,最简单的方法是(假设文件的内容是您发布的内容):

eval(File.read(file))
my_local_var = $VAR1

答案 1 :(得分:1)

由于您已经拥有这些文件并且无法更改它们,因此一种方法是使用实​​用程序将它们转换为Ruby可以理解的格式,例如JSON。如果您的Perl发行版中有JSON模块(您可能有一个Perl系统),那么您还拥有json_pp utility

所以你可以解决这个问题,让它将你的Perl数据结构(Data :: Dumper就是这个)转换成JSON:

$ cat data.pl | json_pp -f eval -t json > data.json

然后使用Ruby将该JSON转换为Ruby数据结构:

require 'json'
JSON.parse(File.read('data.json'))
#=> {
#     "localtime" => "Tue Jun  6 11:48:20 2017",
#     "ifHCOutOctets" => "74372744112",
#     "ifHCInOctets" => "13199010183",
#     # ...
#   }