2015-01-09 3 views
0

В приведенном ниже скрипте я использую шаблон замены, который хранится в переменной. Я, кажется, не могу получить обратную косую черту в своем конечном результате. У меня нет ни одного, ни другого. Это как-то связано с утверждением eval Может ли кто-нибудь дать мне представление об этом, пожалуйста.perl regex: как избежать символа обратной косой черты

test.pl:

use Data::Dumper; 

@arr = ("a", "b", "c"); 
$re = '$1 \|'; 
@arr = map { $_ =~ s/($_)/eval qq{"$re"}/e && $_ } @arr; 
print Dumper(\@arr); 

@arr = ("a", "b", "c"); 
$re = '$1 \\|'; 
@arr = map { $_ =~ s/($_)/eval qq{"$re"}/e && $_ } @arr; 
print Dumper(\@arr); 

@arr = ("a", "b", "c"); 
$re = '$1 \\\|'; 
@arr = map { $_ =~ s/($_)/eval qq{"$re"}/e && $_ } @arr; 
print Dumper(\@arr); 

$ test.pl

$VAR1 = [ 
      'a |', 
      'b |', 
      'c |' 
     ]; 
$VAR1 = [ 
      'a |', 
      'b |', 
      'c |' 
     ]; 
$VAR1 = [ 
      'a \\|', 
      'b \\|', 
      'c \\|' 
     ]; 

ответ

4

Хранитель данных показывает выход таким образом, чтобы могли быть интерпретированы назад Perl. Два слеша одинарные кавычки действительно означают один символ:

print '\\'; # Output: \ 

Для справки, perlop

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

+0

Действительно. Большое спасибо. – user3289872

Смежные вопросы