#!/usr/bin/perl -w use strict; sub make_word_dispensor { my $infile = shift; open INFILE, "<$infile" or die "Can't open $infile: $!\n"; my @words = (); return sub { unless (@words or (@words = split /\s/, )) { close INFILE; return undef; } return shift @words; } } my $word_dispensor = make_word_dispensor("test.txt"); my $line_length = 50; my $line = ''; while (my $word = &$word_dispensor()) { if (length("$line $word") > $line_length) { print "$line\n"; $line = $word; } else { $line .= ($line ? ' ' : '') . $word; } } print "$line\n";