|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Bazil 2:5020/400 10 Jul 2002 20:51:38 To : Artem Chuprina Subject : Re[2]: область видимости -------------------------------------------------------------------------------- Приветствую Вас, Artem! B>> Следующий код: B>> use DBI; B>> our $_dbh = undef; B>> sub connect B>> { B>> ... B>> $_dbh = DBI->connect(...) || ...; B>> ... B>> return $_dbh; B>> } ^^^^^^^^^^^^^ здесь варнинг 'Database handle destroyed without explicit B>> disconnect' B>> DESTROY или END B>> { B>> $_dbh->disconnect() if $_dbh; B>> } B>> Вопрос: почему возникает варнинг? Переменная ведь не вышла за область B>> видимости. Как это лечится? AC> А ты уверен, что при return, а не при connect (оттого, что затирается AC> предыдущее значение)? Абсолютно AC> И потом, извиняюсь, чего там DESTROY? Объекта, методом класса которого является connect. Да это неважно, можно заменить на END. Я не стал приводить лишний код (в том числе конструктор), не имеющий отношения к вопросу. Видимо, все-таки придется уточнить детали. Есть базовый класс, реализующий интерфейс БД. И некоторое количество наследуемых от него классов. Предупреждение возникает в экземпляре любого потомка. Варнинг типа рантайм. Полный текст базового класса: package DB; use strict; use warnings; use DBI; our $_dbh = undef; sub dbh { $_dbh } sub db_errstr { $_dbh->errstr() } sub new { my ( $class, %connect_params ) = @_; my $self = {}; bless $self, $class; if( %connect_params ) { $self->connect( %connect_params ); } return $self; } sub connect { my ( $self, %connect_params ) = @_; $_dbh = DBI->connect ( 'DBI:' . $connect_params{ 'DB_DRIVER' } . ':database=' . $connect_params{ 'DB_NAME' } . ';host=' . $connect_params{ 'DB_HOST' } . ';port=' . $connect_params{ 'DB_PORT' } , $connect_params{ 'DB_USER' } , $connect_params{ 'DB_PASSWORD' } ) || die $DBI::errstr; return $_dbh; } DESTROY { $_dbh->disconnect() if $_dbh; } 1; -- Причем, интересно: опускаешь return $_dbh в connect - варнинг появляется в конструкторе. Мистика какая-то... :) Удачи! Bazil -Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5 * Origin: Talk.Mail.Ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/174413cc3feea.html, оценка из 5, голосов 10
|