Предположим, у меня есть (в Bash):
txt="На берегу пустынных волн
Стоял он, дум великих полн,
И вдаль глядел."
Если я передам это в Perl, я могу напечатать без проблем:
$ echo "$txt" | perl -lnE 'say "$_"'
На берегу пустынных волн
Стоял он, дум великих полн,
И вдаль глядел.
Но у меня проблемы с различными регулярными выражениямина этом тексте.Предположим, я добавляю новые Fancy Word Boundaries :
$ echo "$txt" | perl -lnE 'while (/\b{wb}(.+?)\b{wb}/g) { print "\"$1\"" }'
"–"
"ù"
"–"
"∞"
" "
"–"
"±"
"–µ—"
"Ä"
...
# junk characters...
Границы слова не работают, а входные символы изменяются.
(Если я изменяю регулярное выражение на/\b{wb}(.+)\b{wb}/g
вывод совпадает с первым. (.+)
занимает всю строку.)
Я могу исправить эти проблемы, добавив ключ командной строки -CASD играницы причудливых слов работают так, как задумано:
$ echo "$txt" | perl -CSAD -lnE 'while (/\b{wb}(.+?)\b{wb}/g) { print "\"$1\"" }'
"На"
" "
"берегу"
" "
"пустынных"
" "
"волн"
"Стоял"
" "
"он"
","
" "
"дум"
" "
"великих"
" "
"полн"
","
"И"
" "
"вдаль"
" "
"глядел"
"."
Вопрос: Переключатели -CASD
в perlrun , похоже, подразумевают, что включенные функции Unicode предназначены для stdin
и stdout
входные потоки.Нет никаких упоминаний о каких-либо внутренних различиях, которые могли бы изменить регулярное выражение.Поскольку я могу читать и распечатывать юникод в первом случае, почему добавление -CASD
меняет регулярное выражение?
$ perl -v
This is perl 5, version 28, subversion 0 (v5.28.0) built for darwin-thread-multi-2level