use warnings; use strict; local $/; my $data = ; while ($data =~ /TATAAT[ACGT]+ATG([ACGT]+)(:?T(:?GA|AA|AG))/cgs) { warn $1; } __DATA__ TATAATATTACAATGGATCATACAGTTAG TATAATATTACAATGGATCATACAGTTAG TATAATATT ACAATGGATCATACAGTTAG #### $ perl tst.pl GATCATACAGT at tst.pl line 8, chunk 1. GATCATACAGT at tst.pl line 8, chunk 1. $