[Moscow.pm] Где в модуле писать use utf8

Vladimir Timofeev vovkasm на gmail.com
Пн Июн 17 06:16:45 PDT 2013


2013/6/17 Ruslan Zakirov <ruz на bestpractical.com>:
>
>
>
> 2013/6/17 Vladimir Timofeev <vovkasm на gmail.com>
>>
>> 2013/6/17 Ilya Chesnokov <chesnokov.ilya на gmail.com>:
>> >
>> > 16 июня 2013 г., 8:44 пользователь Иван Бессарабов <ivan на bessarabov.ru>
>> > написал:
>> >
>> >> > Мой типичный boilerplate такой:
>> >> > ...
>> >> >  use autodie qw<:all>;
>> >>
>> >> Вот тут пишут что это сильно замедляет работу:
>> >>
>> >>
>> >>
>> >> http://blogs.perl.org/users/vyacheslav_matjukhin/2013/06/dont-copy-use-autodie-in-every-module.html
>> >>
>> >
>> > Насколько я понял, не работу, а скорость запуска приложения.
>>
>> Ага, тогда померяйте сами ;-)
>> #!perl
>> use Benchmark ':all';
>>
>> {
>>     use autodie;
>>     timethese(-2, { 'autodie on' => sub { chdir '/tmp' } });
>> }
>>
>> {
>>     no autodie;
>>     timethese(-2, { 'autodie off' => sub { chdir '/tmp' } });
>> }
>>
>> У меня результат такой:
>> Benchmark: running autodie on for at least 2 CPU seconds...
>> autodie on:  3 wallclock secs ( 1.96 usr +  0.15 sys =  2.11 CPU) @
>> 155649.29/s (n=328420)
>> Benchmark: running autodie off for at least 2 CPU seconds...
>> autodie off:  2 wallclock secs ( 0.29 usr +  1.78 sys =  2.07 CPU) @
>> 3220760.39/s (n=6666974)
>>
>
> Нужно мерять:
>
> no autodie; chdir '/tmp' or die "can't change dir";
>
> А иначе получается, что сравниваем код с проверкой ошибок и без проверки. Я
> результат вам и без бенчмарка скажу.

Я не очень доверяю предположениям такого рода, уж извините ;-)
Поэтому вот скрипт и результаты (я даже добавил реальную смену
директорий на всякий случай):
#!perl
use Benchmark ':all';

my $dir = '/tmp';
sub dir { $dir eq '/tmp' ? '/usr' : '/tmp'; }

{
    use autodie;
    timethese(-2, { 'autodie on' => sub { chdir dir(); } });
}

{
    no autodie;
    timethese(-2, { 'autodie off' => sub { chdir dir() or die "Can't: $!"; } });
}
Benchmark: running autodie on for at least 2 CPU seconds...
autodie on:  3 wallclock secs ( 1.92 usr +  0.17 sys =  2.09 CPU) @
149655.50/s (n=312780)
Benchmark: running autodie off for at least 2 CPU seconds...
autodie off:  1 wallclock secs ( 1.18 usr +  0.89 sys =  2.07 CPU) @
1755538.65/s (n=3633965)

>
>>
>> >
>> >>
>> >> 13 июня 2013 г., 14:14 пользователь Maxim Vuets <maxim.vuets на gmail.com>
>> >> написал:
>> >>
>> >>> 2013/6/13 Ruslan Zakirov <ruz на bestpractical.com>:
>> >>> >
>> >>> > 2013/6/13 Maxim Vuets <maxim.vuets на gmail.com>
>> >>> >>
>> >>> >> 2013/6/13 Dmitry L. <dim0xff на gmail.com>:
>> >>> >> > Привет!
>> >>> >> >
>> >>> >> > Возник вопрос, а где правильно (не с точки зрения синтаксиса, а
>> >>> >> > вообще)
>> >>> >> > и
>> >>> >> > нагляднее писать use utf8 в файле с модулем?
>> >>> >> > 1. до package My::Module;
>> >>> >> > 2. после package My::Module;
>> >>> >>
>> >>> >> Прагма utf8 имеет лексическую область видимости. Объявите до ---
>> >>> >> будет
>> >>> >> на файл. После --- на пакет.
>> >>> >
>> >>> >
>> >>> > По этому все лексические прагмы нуно писать до пакета, в том числе
>> >>> > strict,
>> >>> > warnings... Один файл - один пакет - это хорошо, но иногда надо два
>> >>> > и
>> >>> > более
>> >>> > и вот тогда может быть неприятный сюрприз.
>> >>>
>> >>> Говоря в общем, да, я согласен (-: Мой типичный boilerplate такой:
>> >>>
>> >>>     use strict;
>> >>>     use warnings;
>> >>>     use autodie qw<:all>;
>> >>>     use utf8;
>> >>>     use open qw<:utf8 :std>;
>> >>>
>> >>>
>> >>>
>> >>>
>> >>> ##############################################################################
>> >>>     package My::Package;
>> >>>
>> >>>     use Something;
>> >>> ...
>> >>> --
>> >>> Moscow.pm mailing list
>> >>> moscow-pm на pm.org | http://moscow.pm.org
>> >>
>> >>
>> >>
>> >> --
>> >> Moscow.pm mailing list
>> >> moscow-pm на pm.org | http://moscow.pm.org
>> >>
>> >
>> >
>> >
>> > --
>> > Best regards,
>> > Ilya Chesnokov
>> >
>> > --
>> > Moscow.pm mailing list
>> > moscow-pm на pm.org | http://moscow.pm.org
>> >
>>
>>
>>
>> --
>> Vladimir Timofeev <vovkasm на gmail.com>
>> --
>> Moscow.pm mailing list
>> moscow-pm на pm.org | http://moscow.pm.org
>
>
>
>
> --
> Best regards, Ruslan.
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



--
Vladimir Timofeev <vovkasm на gmail.com>


Подробная информация о списке рассылки Moscow-pm