#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $input = ; my @data = split /\s+/, $input; my $last_display; my %results; for my $datum (@data) { my ($key, $value) = split /=/, $datum, 2; if ($key eq 'displaynum') { $last_display = $value; } if ($key eq 'value') { push @{$results{$last_display}}, $value; } } print Dumper \%results; for my $key (keys %results) { print join "\t", $key, @{$results{$key}}, "\n"; } __DATA__ displaynum=00 value=Some0 displaynum=01 value=Some1 displaynum=02 value=Some2 value=Some3 __END__ $VAR1 = { '01' => [ 'Some1' ], '00' => [ 'Some0' ], '02' => [ 'Some2', 'Some3' ] }; 01 Some1 00 Some0 02 Some2 Some3