regular expressions in perl 5.14
DESCRIPTION
TRANSCRIPT
Регулярные выраженияв Perl 5.14
Black Perl, 2011
Модификатор /r
5.12
my @in = ( qw(alpha beta gamma) );my @out = map { s/a/Z/g } @in;
@in = ( 'ZlphZ', 'betZ', 'gZmmZ' );@out = ( 2, 1, 2 );
5.14
my @in = ( qw(alpha beta gamma) );my @out = map { s/a/Z/gr } @in;
@in = ( 'alpha', 'beta', 'gamma' );@out = ( 'ZlphZ', 'betZ', 'gZmmZ' );
/r
• Работает с копией, а не ссылкой• Возвращает результат замены, а не
количество совпадений
5.12
my $in = 'Lorem ipsum';my $out = $in =~ tr/a-z/A-Z/;
$in = 'LOREM IPSUM';$out = 9;
5.14
my $in = 'Lorem ipsum';my $out = $in =~ tr/a-z/A-Z/r;
$in = 'Lorem ipsum';$out = 'LOREM IPSUM';
Модификаторы по умолчанию
use re '/sx';no re '/s';use re '/i';
use re '/ix';use re qw(/i /x);
{ use re '/i'; say 'Black Perl' =~ qr/perl/ ? 1 : 0; outside();}
sub outside { say 'Black Perl' =~ qr/perl/ ? 1 : 0;}
10
use re '/i';say 'Black Perl' =~ qr/perl/ ? 1 : 0;say 'Black Perl' =~ qr/(?^:p)erl/ ? 1 : 0;
10
use re '/flags';
• Используются флаги, применяемыек выражению, а не оператору(нельзя /g, /c , /r)
• Ограничено лексической областью видимости
• Можно указывать несколько флагов: /ixs• Можно локально отменять в
подвыражении: (?^:)
Преобразование в строку
5.12
my $black = qr/B l a c k/x;my $perl = qr/Perl/;
my $any = qr/$black|$perl/;say $any;
(?-xism:(?x-ism:B l a c k)|(?-xism:Perl))
5.14
my $black = qr/B l a c k/x;my $perl = qr/Perl/;
my $any = qr/$black|$perl/;say $any;
(?^:(?^x:B l a c k)|(?^:Perl))
5.12 (?-xism:(?x-ism:B l a c k)|(?-xism:Perl))
5.14 (?-xismudal: . . .)
5.14 (?^:(?^x:B l a c k)|(?^:Perl))
Преобразование в строку
• Забудьте• Всё и так было хорошо, а стало ещё лучше
Модификаторы /a, /d, /l и /u
/l use locale;
/u use feature 'unicode_strings';
/a /u, кроме классов \d, \w, \s...
/d no locale;no feature 'unicode_strings';
use feature 'unicode_strings';
no feature 'unicode_strings';
Символьный класс \d
4 ௧ ੭ ٣ ૪
/a, /aa
say ('Z Я' =~ s/\w/_/urg);say ('Z Я' =~ s/\w/_/arg);
_ __ Я
Спасибо
Олег Алистратов[email protected]