2016-02-08 3 views
3

Является ли unicode-свойство \p{Space} расширением Perl5?Unicode свойство «Space» в Perl 5 и Perl 6

В 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 

ответ

2

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

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

7

Табуляторы относятся к категории Управление, а не Пробег. В отеле вы заинтересованы в самом деле называется White_Space, и это то, что вам нужно использовать в Perl 6:

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

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

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

+0

Я уже его заменил '<: White_Space>', но мне было любопытно, почему 'Space' ведет себя по-другому в Perl5/Perl6. –

+2

@sid_com: это просто, что Perl5 выбрал псевдоним '\ p {Space}' to '\ p {White_Space = Y}' вместо '\ p {General_Category = Space}' – Christoph

+2

или, скорее, '\ p {General_Category = Zs } ' – Christoph