Два вопроса.
Во-первых, в вашем исходном коде есть символы юникода.Убедитесь, что вы сохранили свой файл как utf8 и , используя прагму utf8.
Также, если вы собираетесь запускать эту программу из консоли, убедитесь, что она может обрабатывать Unicode.Командная строка Windows не может и всегда будет отображаться?независимо от того, правильны ли ваши данные или нет.Я запустил это в Mac OS с терминалом, настроенным для обработки utf8.
Во-вторых, если у вас есть "."в вашем исходном списке он будет интерпретирован как «любой отдельный символ» и даст вам неправильные результаты - поэтому вам нужно избегать его, прежде чем использовать его в своем регулярном выражении.Я немного изменил программу, чтобы она заработала.
#!/usr/bin/env perl
use warnings;
use strict;
use utf8; #use character semantics
#make sure the data is re-encoded to utf8 when output to terminal
binmode STDOUT, ':utf8';
print tweet_compress('cc ms ns ps in ls fi fl ffl ffi iv ix vi oy ii xi nj/, "\. " ,", "'),"\n";
sub tweet_compress {
my $tweet = shift;
$tweet =~ s/\. ?$//;
my @orig = ( qw/cc ms ns ps in ls fi fl ffl ffi iv ix vi oy ii xi nj/, '\. ' ,", ");
my @new = qw/㏄ ㎳ ㎱ ㎰ ㏌ ʪ fi fl ffl ffi ⅳ ⅸ ⅵ ѹ ⅱ ⅺ nj . ,/;
$tweet =~ s/$orig[$_]/$new[$_]/g for 0 .. $#orig;
return $tweet;
}