use Modern::Perl '2014'; my $delim = '&'; my @findme = ( '.#', '#', '..#\.' ); my @data = ; chomp @data; my $data; $data .= "$delim$_" for @data; for my $column ( 0 ... length( $data[0] ) - 1 ) { my $regex = build_regex( $column, @findme ); while ( my $result = $data =~ m/$regex/g ) { my $row = ( $-[0] / length( $data[0] . $delim ) ); say "Hit at row $row, column $column"; } } sub build_regex { my $column = shift; my @pattern = @_; my $pre = '[^' . $delim . ']{' . $column . '}'; my @accumulator; push @accumulator, quotemeta($delim) . $pre . $_ . '[^' . $delim . ']*' for @pattern; my $regex = join '', @accumulator; return qr/$regex/; } __DATA__ #..#.....#. ..#...##... .#....#..## #..#....#.. ..#...#..#. .......#.#. ...........