Свойство Unicode Space в Perl 5 и Perl 6

Является ли свойство unicode \p{Space} расширением Perl5?

В Perl5 Space соответствует всем пробелам

my $s = "one\ttwo\nthree";
$s =~ s/\p{Space}/*/g;
say $s;

# one*two*three

в то время как в Per6 он может соответствовать только простому пробелу

my $s = "one\ttwo\nthree";
$s.=subst( /<:Space>/, '*', :g );
say $s;

# one     two
# three

person sid_com    schedule 08.02.2016    source источник


Ответы (2)


На самом деле это не расширение, а сокращенное название другого свойства Unicode, \p{White_Space}. Это подробно описано на справочной странице perluniprops.

Я понятия не имею, что здесь делают разработчики Perl6.

person Calle Dybedahl    schedule 08.02.2016

Табуляторы относятся к категории Control, а не Пробел. Интересующее вас свойство на самом деле называется White_Space, и именно его вам нужно использовать в Perl 6:

say so "\t" ~~ /<:White_Space>/

По-видимому, также доступны несколько альтернативных вариантов написания, включая WhiteSpace, WSpace и его строчные варианты, но не WS.

Существует также встроенное правило <ws>, которое соответствует нулю или более пробельным символам вместо одного, и, конечно же, \s, которое уже использует семантику Unicode.

person Christoph    schedule 08.02.2016
comment
Я уже заменил его на <:White_Space>, но мне было любопытно, почему Space ведет себя по-разному в Perl5/Perl6. - person sid_com; 08.02.2016
comment
@sid_com: просто Perl5 выбрал псевдоним \p{Space} для \p{White_Space=Y} вместо \p{General_Category=Space} - person Christoph; 08.02.2016
comment
а точнее \p{General_Category=Zs} - person Christoph; 08.02.2016
comment
О, Боже. Это своего рода тонкое исправление, которое принесет годы удовольствия от отладки. - person darch; 09.02.2016