use strict; use Data::Dumper; my @jobs; my $key; my $value; while (my $line = ){ if ($line =~ /\(.*)\<\/name\>/){$key = $1;} if ($line =~ /\(.*)\<\/time\>/){$value=$1;} if ($key and $value){push @jobs, {$key=>$value}; $key = undef; $value = undef;} } print Dumper(\@jobs); __DATA__ myjob1 lend myjob2 fin