#! perl -slw use strict; sub checkDiags { my $text = shift; my $x1 = 1 + index $text, "\n" or die 'Bad input'; my $x2 = $x1-2; my $reMajor = qr[ ([12]) (?: .{$x1}\1 ){3} ]sx; my $reMinor = qr[ ([12]) (?: .{$x2}\1 ){3} ]sx; return $text =~ $reMajor || $text =~ $reMinor; } my $test = do{ local $/; <> }; print "$test\n", checkDiags( $test ) ? 'Matched' : 'Failed'; __END__ c:\test>junk40 0100000000 0010000000 0001000000 0000100000 0000000000 ^Z 0100000000 0010000000 0001000000 0000100000 0000000000 Matched c:\test>junk40 0000000 0000020 0000200 0002000 0020000 0000000 ^Z 0000000 0000020 0000200 0002000 0020000 0000000 Matched