Здравствуйте, Николай.

On 20.12.2011 20:32, Nikolay Mishin wrote:
Hi MoscowPM,
коллеги что делать
лежит у меня в yml
---
tags_4_index:
         - '<?xml version="1.0" encoding="UTF-8"?>'
         - Rock
         - Vocal

я его успешно читаю
use FindBin '$Bin';
my $yaml = YAML::Tiny::LoadFile( $Bin . qq{/} . $config_name );
my @tags = @{ $yaml->{tags_4_index} };
и потом
хочу my $start_tag = shift @{$ref_tags};
1-й параметр использовать в регэкспе:
типа
while ( my $line =<$fh>  ) {
if ( $line =~ /$start_tag/ims ) {
catch($line);
   }
}

так вот так не работает, работает, если
$start_tag='\<\?xml version="1.0" encoding="UTF-8"\?\>';
но, если я его таким кладу в yaml, то он мне возвращает (YAML::Tiny)
### $start_tag: '\\<\\?xml version="1.0" encoding="UTF-8"\\?\\>'
зачем он его еще раз бекслешует?

Я, канеш, извиняюсь, но... Ваши письма мне чем-то напоминают Mason'овские компоненты. Такая же сложно читаемая "каша" из кода и текста :) Ну, или php3, чтоб далеко не ходить :)

Я это к чему?
Если бы вы отделяли примеры кода от непосредственно самих вопросов, ИМХО, остальным было бы легче понять вопрос и, как следствие, ответить.

По сути вопроса.

Используйте метасимволы \Q и \E при подстановке строки из конфига в регулярное выражение. Судя по примерам, в конфиге у вас просто строки, а не регулярки.

Как-то так:

 $line =~ /\Q$start_tag\E/;

см. perldoc perlre.

--
С уважением,
Евгений Косов
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить