Works perfectly! Thanks Grandfather and Hofmator!!
The full code is included here for ease...
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my $rawdata = qq|
<COLUMNS>~ItemName1~ItemName2~ItemName3~ItemName4~ItemName5~</COLUMNS>
<DATA>~Apple~Orange~Banana~Pear~Watermelon~</DATA>
<DATA>~Blue~Red~Yellow~Brown~Purple~</DATA>
<DATA>~Uno~Dos~Tres~Cuatro~Cinco~</DATA>
|;
my @datalines = grep {length} split "\n",$rawdata;
my @listings;
my $header;
foreach my $line (@datalines) {
if ($line =~ /^<COLUMNS>(.+)<\/COLUMNS>/) {
$header = $1;
} elsif ($line =~ /^<DATA>(.+)<\/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;
}
for my $listing (@listings) {
my @list = grep {length} split '~', $listing;
my %data;
@data{@keys} = @list;
print "Item1 is ", $data{'ItemName1'}, ", ";
print "Item2 is ", $data{'ItemName2'}, ", ";
print "Item3 is ", $data{'ItemName3'}, "\n";
}