[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