my $re = $left ? qr/ab(..)ef/ : qr/gh(..)jk/; /$re/ or die("Bad data"); print "Caught $1\n" #### my $re; if (...) { $re = qr/.../ } elsif (...) { $re = qr/.../ } elsif (...) { $re = qr/.../ } else { die '...' } /$re/ or die("Bad data"); print "Caught $1\n" #### my %re_lookup = ( ... => qr/.../, ... => qr/.../, ... => qr/.../, ); /$re_lookup{...}/ or die("Bad data"); print "Caught $1\n"