#!/usr/bin/env perl use strict; use warnings; my $lines_per_block = 4; my $wanted_id = 'id2'; while (my $joined_block = join_block_of_lines($lines_per_block)) { next unless $joined_block =~ /^$wanted_id/; print $joined_block, "\n"; } sub join_block_of_lines { my ($lines_per_block) = @_; my @block_lines; for (1 .. $lines_per_block) { my $line = ; return '' unless defined $line; $line =~ s/\s*\n$//; push @block_lines, $line; } my $joined_line = join ' ' => @block_lines; $joined_line =~ s/\s*\t\s*/ /g; $joined_line =~ s/^(\S+)\s+(:)\s+/$1$2/; return $joined_line; } __DATA__ id1 : /a text lies here/ add name: new add1 ph no: new phone1 country: new country1 id2 : /some other text lies here/ add name: new add2 ph no: new phone2 country: new country2