my @data = split /\n\n/, $data; @data = map { join ' ', ( $_->[0], ( join '/', @{$_->[1]} ), $_->[2] ) } sort { $a->[1][2] <=> $b->[1][2] || $a->[1][0] <=> $b->[1][0] || $a->[1][1] <=> $b->[1][1] } map { [ $_->[0], [split /\//, $_->[1]], $_->[2] ] } map { [split( /\s+/, trim( $_ ), 3) ] } @data; sub trim { my $data = shift; $data =~ s/^\s+//; $data =~ s/\s+$//; return $data; }