如何使用PERL解析包括表之类的文本

问题描述

| 像这样的表:
<p>
        Porpertity        History 
<p>
class    Rate              data
<p>
A1        5%                10
<p>
B1        3.5%              8
如何将它们解析为哈希或数组? 非常感谢。     

解决方法

        我们可以通过三种方式解析该表。首先,我们需要打开它并获取数据。我假设如果第二列以ѭ1结尾,则它是有效列:
#! /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 =~ /%$/);
该部分代码将拆分这三个项目,然后问题是如何构造哈希。我们可以创建两个哈希(一个用于速率,一个用于数据,并使用相同的密钥:
   $rateHash{$class} = $rate;
   $dataHash{$data} = $data;
或者,我们可以将散列作为散列的散列,然后将两个片段放在同一散列中:
   $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轻松完成)。 但是,根据您的编程技能,您可能会更喜欢双重哈希概念,或者将两个值组合为单个哈希。