sub match { shift =~ m/ (?: [^(]*\((?[^)]*?)\) ) # Both parens. | (?: \((?.*)$ ) # Left paren. | (?: ^(?.*)\) ) # Right paren. | (?: ^[^()]*(?)$ ) # No parens (empty capture). /x; return $+{C} // (); }