#!/usr/bin/perl -w use strict; sub make_read_lines { my ($fh, $lines) = @_; return $lines == 1 ? sub { return unless defined(my $line = <$fh>); $line } : do { my $next_lines = make_read_lines($fh, $lines - 1); sub { return unless defined(my $line = <$fh>); $line, $next_lines->() }; }; } open my $fh, '<', 'details.txt' or die $!; my $read_4_lines = make_read_lines($fh, 4); while(my @details = $read_4_lines->()) { print @details, "\n"; }