|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 11 Jun 2002 13:48:03 To : Alan Long Subject : Re: вопрос про eval и tr -------------------------------------------------------------------------------- Alan Long wrote: > Я решил эту проблему примерно так: > - -- > sub _setconvert { > my $self = shift; > my $from = $self->_get_convert_from(); > my $to = $self->_get_convert_to(); > > if( defined $from and defined $to ) { > $self->{CONVERT} = eval "sub { tr/$from/$to/; $_; }"; > } > } > sub convert { > my $self = shift; > local $_ = shift; > my ( $rc ); > > if( defined $self->{CONVERT} and defined $_ ) { > $self->{CONVERT}->(); > } > return $_; > } > - -- > Hо как мне кажется это не слишком прямое решение, может-быть как-то еще > возможно ? Вполне пормальное решение если ошибки исправить. Явная: в строке > $self->{CONVERT} = eval "sub { tr/$from/$to/; $_; }"; надо заквотить $_ иначе он подставится еще в момент интерполяции строки, что может привести к синтаксической ошибке. (А вообще-то его вообще убрать надо, поскольку данная функция меняет $_ и ничего не возвращает :-)) ). И неявная: надо квотить служебные символы в строках $from и $to, если только Вы не уверены заранее в их содержимом. См. perldoc -f quotemeta. Впрочем в оригинальном коде не квотилось... Андрей --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/5284af1a2467.html, оценка из 5, голосов 10
|