|
|
ru.website- RU.WEBSITE ------------------------------------------------------------------- From : Alex Kharitonov 2:5038/7.17 23 Jan 2002 20:03:04 To : Vladislav Zlobin Subject : ? is OK if CGI == EXE -------------------------------------------------------------------------------- 21 Янв 02 02:23, Vladislav Zlobin wrote to Alex Kharitonov: VZ>> Регулярные выражения сами по себе начнут понимать мой String? VZ>> :) AK>> Конечно. Сделай свой класс на основе ссылки на скаляр. И действуй AK>> с экземпляром класса так же, как с обычной ссылкой на строку. AK>> Только что проверил - работает. VZ> Hе вижу исходника. Что-то такое ведь есть в документации. Ладно, будет в конце письма. Там демонстрируется даже наследование от такого класса. Hо это не единственный вариант, аналогичного результата можно достичь другим способом (perldoc overload, раздел "Boolean, string and numeric conversion"). Теперь исходник: === начало === use strict; use warnings; package MyString; sub new { my $proto = shift; my $class =ref($proto) || $proto; my $e = undef; my $self = \$e; bless $self, $class; if(@_ > 0) { $self->MyString::value($_[0]); } return $self; } sub value { my $self = shift; if(@_ > 0) { my $val = $_[0]; if(ref $val) { if(UNIVERSAL::isa($val, 'MyString')) { $$self = $val->value; } else { die; } } else { $$self = $val; } } return $$self; } 1; package MyTest; our @ISA = qw(MyString); 1; package main; my $k = MyTest->new('zzzz'); print $k->value, "\n"; my $s = MyString->new($k); print $s->value, "\n"; $$s =~ s/z/Z/g; print $s->value, "\n"; print $$s, "\n"; 1; === конец === С уважением, Alex! mailto:askh@go.ru http://askh.karelia.ru/ PGP key fingerprint: 183A DDC9 D784 4623 98D5 4749 4F9C E20B 47E0 769C --- GoldED/386 3.00.Beta5+ * Origin: ASKh Home (2:5038/7.17) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.website/147413c4f0e80.html, оценка из 5, голосов 10
|