my $output = ''; while ($input =~ /(.)/sg) { my $ch = $1; my $ord = ord($ch); $output .= $ch if $ord >= 0xD800 && $ord <= 0xDFFF || $ord >= 0xFDD0 && $ord <= 0xFDEF || ($ord & 0xFFFF) == 0xFFFE || ($ord & 0xFFFF) == 0xFFFF || $ord >= 0x110000; }