2015-05-07 3 views
6

Я новичок в PERL и пытается разработать лексера, где я встречал:Что такое значение дг // в Perl

my @token_def = 
(
     [Whitespace => qr{\s+},  1], 
     [Comment => qr{#.*\n?$}m, 1], 
); 

и даже после прохождения через несколько сайтов, которые я не понял имея в виду.

+3

http://perldoc.perl.org/functions/qr .html – Mat

ответ

4

qr// документально подтвержден в perlop в разделе «Операции, похожие на Regexp».

Точно так же, как aka "..." позволяет построить строку, qr/.../ позволяет вам построить регулярное выражение.

$s = "abc";  # Creates a string and assigns it to $s 
$s = qq"abc"; # Same as above. 
print("$s\n"); 

$re = qr/abc/; # Creates a compiled regex pattern and assigns it to $x 
print "match\n" if $s =~ /$re/; 

квотирования правила qr/.../ очень похожи на qq"..." «с. Единственное отличие состоит в том, что \, за которым следует символ без слов, передаются без изменений.

7

qr// является одним из операторов, подобных котировкам, которые применяются к сопоставлению шаблонов и связанным с ними действиям.

От perldoc:

Этот оператор кавычки (и, возможно, компилирует) его STRING как регулярное выражение. STRING интерполируется так же, как PATTERN в m/PATTERN /. Если в качестве разделителя используется ', интерполяция не выполняется.

От modern_perl:

ор // оператор создает первый класс регулярных выражений. Интерполяция их в оператор матча, чтобы использовать их:

my $hat = qr/hat/; 
say 'Found a hat!' if $name =~ /$hat/; 

... или объединить несколько регулярных выражений объектов в сложные узоры:

my $hat = qr/hat/; 
my $field = qr/field/; 

say 'Found a hat in a field!' 
if $name =~ /$hat$field/; 

like($name, qr/$hat$field/, 
      'Found a hat in a field!'); 
Смежные вопросы