#!/usr/bin/perl -w use strict; my %data; open DB, "db.txt"; while () { @_ = split/[\t,|\n]/; $data{ $_[0] } = { @_[1..$#_] }; } close DB; #### # pseudo representation 615 = ( MNH => 36.00 USED => 12.00 PB => 50.00 ) #### keys %data # 614, 615, 616 $data{615} # an anon hashref $data{615}{USED} # 12.00 keys %{ $data{615} } # MNH, USED, PB #### for my $key (keys %data) { print "\n$key"; my $h_ref = $data{$key}; printf "\t%s\t%6.2f\n", $_, $h_ref->{$_} for keys %$h_ref; } #### 614 MNH 16.00 USED 32.00 PB 50.00 615 MNH 36.00 USED 12.00 PB 50.00 616 MNH 96.00 USED 2.00 PB 10.00 #### $data{ (split/\t/)[0] } = { (split/[\t,|\n]/)[1..6] } while ;