使用ruby解析Perl数据::转储程序输出

使用ruby解析Perl数据::转储程序输出,ruby,perl,Ruby,Perl,我有一个由Perl的Data::Dumper打印的状态文件目录。内容如下所示: $VAR1 = { 'localtime' => 'Tue Jun 6 11:48:20 2017', 'lookback_history' => { 'ifHCOutOctets' => {

我有一个由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转储?

如果这些数据是您的,并且您确信其中没有意外/有害的字符串,最简单的方法是(假设文件的内容是您发布的):


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


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

因此,您可以使用它,并让它将您的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",
#     # ...
#   }

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

因此,您可以使用它,并让它将您的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",
#     # ...
#   }


有参考资料吗?是否使用了
$Data::Dumper::Purity
$Data::Dumper::Deparse
?是否有参考资料?是否使用了
$Data::Dumper::purchy
$Data::Dumper::Deparse
?Ruby是否能够理解Perl数据结构?@simbabque此哈希语法在Perl和Ruby之间共享。它在这种情况下有效。在我看来,这只适用于哈希?它也应该适用于数组。内部结构的Ruby语法深受perl的启发。Ruby会理解perl数据结构吗?@simbabque此哈希语法在perl和Ruby之间共享。在这种情况下,它起作用。在我看来,这只适用于哈希?它也应该适用于数组。内部结构的Ruby语法深受perl的启发。我添加了相应的代码片段,希望您不介意。您也可以通过Ruby调用shell命令,并将输出传递给JSON解析器:
JSON.parse(`cat data.pl | JSON_pp-f eval-t JSON`)
@Stefan
json_pp-f eval-t json
中的
eval
是否包含与mudasobwa?@BenediktBock的答案相同的针对代码注入的漏洞。如果你读了,你会看到的。或者,您可以使用maybe在Perl中破解一些不允许任意代码执行的东西。我已经添加了相应的代码片段,希望您不介意。您还可以从Ruby via中调用shell命令,并将输出传递给JSON解析器:
JSON.parse(`cat data.pl | JSON|pp-f eval-t JSON`)
@Stefan
json_pp-f eval-t json
中的
eval
是否包含与mudasobwa?@BenediktBock的答案相同的针对代码注入的漏洞。如果你读了,你会看到的。或者,您可以在Perl中使用maybe将一些不允许执行任意代码的东西组合在一起。