[Moscow.pm] Perl Socket application
Eugene Kaltashkin
zhecka на gmail.com
Сб Ноя 10 09:05:09 PST 2007
> use constant плох тем, что ему нужны barewords. Readonly манипулирует
> обычными лексическими переменными.
>
> Второе отличие - ограничение области видимости:
>
> do {
> use constant PM => 'Moscow 1.0';
> };
> print PM; # печатается без вопросов
>
> do {
> use Readonly;
> Readonly my $group => 'Moscow 2.0';
> };
> print $group; # Use of uninitialized value in print
хм. на самом деле всё очень грустно.
use Benchmark qw( cmpthese ) ;
use Readonly;
my $xy = 3;
Readonly my $xx => 3;
use constant XY => 3;
sub XX() { 3 }
cmpthese( 5000000, {
simplevar => sub{my $a=$xy**2}
} );
cmpthese( 5000000, {
readonlyvar => sub{my $a=$xx**2}
} );
cmpthese( 5000000, {
constant => sub{my $a=XY**2}
} );
cmpthese( 5000000, {
subfunc => sub{my $a=XX**2}
} );
simplevar 734788/s --
readonlyvar 71902/s --
constant 1441441/s --
subfunc 1447964/s --
Вроде как subfunc выигрывает.
Ниже сравнительный benchmark для разных переменных разных типов.
Тупое присвоение было совсем не интересно, решил наложить на разные
типы данных regexp.
вот что получилось.
readonlystr_rovar 25549/s
readonlystr_constvar 35955/s
readonlystr_subvar 36158/s
readonlystr_var 36261/s
subfuncstr_rovar 36261/s
constantstr_rovar 36364/s
simplestr_rovar 36364/s
simplestr_constvar 77576/s
subfuncstr_var 77576/s
simplestr_subvar 77576/s
subfuncstr_subvar 78049/s
simplestr_var 78049/s
subfuncstr_constvar 78049/s
constantstr_subvar 80503/s
constantstr_var 80503/s
constantstr_constvar 81529/s
вызов был вот такого вида.
STRING_VAR => sub{my $a = reg(STRING,VAR);},
sub reg
{
my $a = shift;
my $r = shift;
$a =~ s/$r//;
return $a;
}
что самое интересное, обычные переменные определенные как my $var,
ненамного медленнее чем constant, чего не скажешь о readonly.
--
Best Regards
ZHECKA-RIPN
Подробная информация о списке рассылки Moscow-pm