#!/usr/bin/perl -w use strict; use Data::Dumper; 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; } 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"; }