Michael Ilyin (
yorool_gui) wrote2005-03-14 05:10 pm
о Perl
Перл замечательный язык, когда на нем пишу Я. Когда на нем пишут другие -- это кошмар. И подозреваю, что это взаимно.
use strict;
...
no strict 'refs';
...
$self->{LABELS}->{$title} = $3;
$self->{LABELS}->{$title}->{NUM} = $num++;
Это работатет. Но я не понимаю, ради чего надо так извращаться. Это не тот Перл, на котором пишу я. На моем Перле ref $self->{LABELS}->{$title} будет либо SCALAR, либо HASH, но никак не то и другое одновременно. А вот на Перле этого человека в $self->{LABELS}->{$title} хранятся сразу два значения и ему это удобно. Но это другой язык.
use strict;
...
no strict 'refs';
...
$self->{LABELS}->{$title} = $3;
$self->{LABELS}->{$title}->{NUM} = $num++;
Это работатет. Но я не понимаю, ради чего надо так извращаться. Это не тот Перл, на котором пишу я. На моем Перле ref $self->{LABELS}->{$title} будет либо SCALAR, либо HASH, но никак не то и другое одновременно. А вот на Перле этого человека в $self->{LABELS}->{$title} хранятся сразу два значения и ему это удобно. Но это другой язык.
no subject
Хотя, производительность так должна страдать...
no subject
no subject
no subject
и можно без хлебаа ещё я где-то слышал, что после эвала можно просто хранить ссылки на code references, только не знаю пока ещё, как :)no subject
var code = new Function( "some code; goes; here;" );
А про Perl -- Я как раз только что думал, как бы получить CodeV из eval'а... Вот так, сходу, способа не вижу... Т.е. вижу, но кривой до невозможности:
sub getCode { my $code = $_[0]; local *F; my $name = sprintf( "__getCode_unique_name_0x%08x_%s", $$, md5_hex($code) ); open(F, "> /var/tmp/$$.pl"); print F "sub ", $name, " { "; print F $code; print F "}"; close(F); require "/var/tmp/$$.pl"; ### # DAMN! { no strict 'ref'; $code = \&{$name}; } ### unlink("/var/tmp/$$.pl"); return $code; } Но ведь крииииво... И будет ли работать... Ччерт, давно на перле не писал...no subject
no subject
no subject
my $codeRef = eval "sub { $codeStr } ";
ВСЕ! Работает!
no subject