[Moscow.pm] regexp и YAML::Tiny
Nikolay Mishin
mi на ya.ru
Вт Дек 20 21:40:51 PST 2011
1. попрошу не оскорблять сравнением c php3 и mason (хотя извинения и были, но это похоже,
как в собаке Баскервилей, доктор Джеймс Мортимер назвал мистера Шерлока Хомса вторым
сыщиком, но конечно первым среди практиков. что его, несомненно, задело )
2. я хотел показать ход своих мыслей, которых, как оказалось, было достаточно, что вы поняли о чем вопрос,
для меня некоторые из этих строк родились в муках и были своего рода открытием
и, поэтому мне хотелось ими поделиться
3. работающим кодом мне запрещено делиться по контракту,
кроме того я и сам еще не созрел, чтобы им делиться (уж простите)
4. писать тест с работающим кодом и отвязанным от "действительности" не было сил
5. "русский тест" в общем -то и так себя выделает, как и "perl код"
и , в данном случае, я хотел, чтобы вся фраза была не длиннее 20 строк -
излишние пробелы (как-бы меня не уверяли приверженцы python) тоже не
способствуют читаемости, если приходиться скролить страницы
6. да, пары переводов строк моему тексту не помешали бы, но они у меня (пустые строки для читаемости)
все-таки были
7. я занимаюсь рефакторингом и тестированием все время и тоже являюсь приверженцем читаемости кода до предела
(после того, как все работает и понятно - можно запустить профайлер
set PERL5DB='use Devel::NYTProf'
set NYTPROF=trace=2:start=init:file=nytprof.out:addpid=1:start=begin
perl -d:NYTProf 12_index.t
nytprofhtml
nytprof/index.html #отчет
http://blog.timbunce.org/2009/12/24/nytprof-v3-worth-the-wait/
http://www.slideshare.net/Tim.Bunce/develnytprof-200907
http://blip.tv/timbunce/nytprof-v3-ipw-2009-2860609)
моим идеалом, в частности, является https://github.com/xsawyerx/module-starter/blob/master/bin/module-starter
gratias
p.s. ora at labora
20.12.2011, 20:50, "Evgeniy Kosov" <evgeniy на kosov.su>:
> Здравствуйте, Николай.
>
> 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
> moscow-pm на pm.org | http://moscow.pm.org
--
Nikolay Mishin
Подробная информация о списке рассылки Moscow-pm