use warnings;
use strict;
my $rawdata = qq|
~ItemName1~ItemName2~ItemName3~ItemName4~ItemName5~
~Apple~Orange~Banana~Pear~Watermelon~
~Blue~Red~Yellow~Brown~Purple~
~Uno~Dos~Tres~Cuatro~Cinco~
|;
my @datalines = grep {length} split "\n",$rawdata;
my @listings;
my $header;
foreach my $line (@datalines) {
if ($line =~ /^(.+)<\/COLUMNS>/) {
$header = $1;
} elsif ($line =~ /^(.+)<\/DATA>/) {
push(@listings, $1);
}
}
my %hoa;
my @keys = grep {length} split '~', $header;
for my $listing (@listings) {
my @list = grep {length} split '~', $listing;
push @{$hoa{$keys[$_]}}, $list[$_] for 0..$#keys;
}
print "$_ => @{$hoa{$_}}\n" for sort keys %hoa;
####
ItemName1 => Apple Blue Uno
ItemName2 => Orange Red Dos
ItemName3 => Banana Yellow Tres
ItemName4 => Pear Brown Cuatro
ItemName5 => Watermelon Purple Cinco