Есть три способа разбора этой таблицы.Сначала нам нужно открыть его и добраться до данных.Я предполагаю, что если второй столбец оканчивается на %
, это допустимый столбец:
#! /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).
Однако, в зависимости от ваших навыков программирования, вам может быть удобнее использовать идею двойного хеширования или объединение двух значений в один хеш.