sub is_suffix { substr($_[0], -length($_[1])) eq $_[1] } sub common_suffix { $_[0] =~ m[(?>(.+))(?(?{ not is_suffix($_[1], $^N) })(?!))]s; return $1; }