如何使用PERL解析包含类似于表的内容的文本

如何使用PERL解析包含类似于表的内容的文本,perl,Perl,如下表格: <p> Porpertity History <p> class Rate data <p> A1 5% 10 <p> B1 3.5% 8 如何将它们解析为散列或数组 非常感谢。有三种方法可以解析此表。首先,我们需要打开它并获取数据。我假设如果第二列以a%结尾,则它是一个有效列: #! /

如下表格:

<p>
        Porpertity        History 
<p>
class    Rate              data
<p>
A1        5%                10
<p>
B1        3.5%              8
如何将它们解析为散列或数组


非常感谢。

有三种方法可以解析此表。首先,我们需要打开它并获取数据。我假设如果第二列以a%结尾,则它是一个有效列:

#! /usr/bin/env perl

use strict;
use warnings;

open (MY_FILE, "data.txt")
   or die qq(Can't open "data.txt" for reading\n);

my %myHash;
my %dataHash;
my %rateHash;


while (my $line = <MY_FILE>) {
   my ($class, $rate, $data) = split (/\s+/, $line);
   next (unless $rate =~ /%$/);
或者,我们可以将散列作为散列的散列,并将两个片段放在同一个散列中:

   $myHash{$class}->{RATE} = $rate;
   $myHash{$class}->{DATA} = $data;
您现在可以在同一个散列中提取速率或数据。您也可以一次完成:

   %{$myHash{$class}} = ("RATE" => $rate, "DATA" => "$data");
我个人更喜欢第一个

另一种可能是将这两种方法组合成一个标量:

   $myHash{$class} = "$rate:$data";   #Assuming ":" doesn't appear in either.
我倾向于将其设置为散列,如第二个示例中所示。然后,创建一个类来处理使用Moose简单易做的脏活


但是,根据您的编程技能,您可能会更喜欢双哈希的想法,或者将两个值组合成一个哈希。

您希望该哈希看起来如何?如果您提供一些上下文,您可能会得到更多帮助。这并不是说这是一件特别难做的事情;问题是有1000000个,只有一种方法可以做到这一点。有三个列:类别、出生率和历史数据。
   $myHash{$class} = "$rate:$data";   #Assuming ":" doesn't appear in either.