sub match { local $_ = shift; m/ \(([^)]*?)\) /x # Both parens. || m/ \((.*)$ /x # Left paren. || m/ ^(.*)\) /x # Right paren. || m/ ^[^()]*()$ /x; # No parens (no capture). return $1 // (); }