[Moscow.pm] regexp и YAML::Tiny
Evgeniy Kosov
evgeniy на kosov.su
Вт Дек 20 08:50:30 PST 2011
Здравствуйте, Николай.
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