Если у вас есть две строки Unicode (то есть строка кодовых точек Unicode), то вы наверняка сохранили свой файл как UTF-8, и у вас действительно было
use utf8; # Tell Perl source code is UTF-8.
my $a = 'µ╫P[┐╬♣3▀═<+·1╪מ└╖"ª';
my $b = 'µ╫P[┐╬♣3▀═<+·1╪מ└╖"ª';
if ($a eq $b) {
print("They're equal.\n");
} else {
print("They're not equal.\n");
}
И это прекрасно работает. eq
и ne
будут сравнивать кодовую строку строк по кодовой точке.
Некоторые графемы (например, "& eacute;") могут быть построены несколькими различными способами, поэтому вам, возможно, придется нормализовать их представление в первую очередь.
use utf8; # Tell Perl source code is UTF-8.
use charnames qw( :full ); # For \N{}
use Unicode::Normalize qw( NFC );
my $a = NFC("\N{LATIN SMALL LETTER E WITH ACUTE}");
my $b = NFC("e\N{COMBINING ACUTE ACCENT}");
if ($a eq $b) {
print("They're equal.\n");
} else {
print("They're not equal.\n");
}
Наконец, Unicode считает некоторые символы почти эквивалентными, и их можно считать равными, используя другую форму нормализации.
use utf8; # Tell Perl source code is UTF-8.
use charnames qw( :full ); # For \N{}
use Unicode::Normalize qw( NFKC );
my $a = NFKC("2");
my $b = NFKC("\N{SUPERSCRIPT TWO}");
if ($a eq $b) {
print("They're equal.\n");
} else {
print("They're not equal.\n");
}