if ($string =~ /(foo(?{ $N = 1 }))|(bar(?{ $N = 1 }))/) { if ($N == 1) { ... } else { ... } } #### if (my @capt = $string =~ /(foo)|(bar)/) { $N = @capt; for (reverse @capt) { last if defined; $N--; } if ($N == 1) { ... } else { ... } }