use strict; use warnings; my %seen; while () { !$seen{ $. . $1 }++ and print "Line $.: $1\n" while /(\b\w{3}\b)(?=.*\1)/g; } __DATA__ foofoo foo foo foo bar foo foo bar foo bar foooof foo oof foo and bar foo foo and and bar bar foo and bar foo and bar and or and or say or say or say or say