Поскольку расширенные ASCII символы имеют значение 128 и выше , вы можете просто вызвать ord для отдельных символов и обработать их со значением> = 128. Следующий код читает из стандартного ввода и печатает только расширенные символы ASCII:
while (<>) {
while (/(.)/g) {
print($1) if (ord($1) >= 128);
}
}
В качестве альтернативы, распаковать вместе с chr также будет работать. Пример:
while (<>) {
foreach (unpack("C*", $_)) {
print(chr($_)) if ($_ >= 128);
}
}
(Я уверен, что некоторые Perl-гуру могут сжать их до двух однострочных ...)
Чтобы напечатать номера строк вместо этого, вы можете использовать следующее (это не удаляет дубликаты и будет иметь странное поведение при передаче юникода):
while (<>) {
while (/(.)/g) {
print($. . "\n") if (ord($1) >= 128);
}
}
(Спасибо Якову Белчу за подсказку $.
.)