On Mon, Nov 04, 2002 at 02:53:29PM +0600, Alexey Morozov wrote: > Кто б спорил. Но, я так понимаю, коль скоро дистрибутив создается в расчете на некоторую > целевую аудиторию, имеет смысл прислушиваться к чаяниям этой целевой аудитории, как > минимум не меньше, чем к собственным идеологическим установкам :-). > В общем, я за AnyDBM в отдельном модуле и отдельных *DB* провайдеров. Дело, конечно, не в идеологии. Нужно принимать не условно верные, а безусловно верные решения. Я достаточно ясно выражаюсь? > > use 5.006_001; > > our $VERSION = '1.00'; > > -our @ISA = qw(NDBM_File DB_File GDBM_File SDBM_File ODBM_File) unless @ISA; > > +our @ISA = qw(DB_File) unless @ISA; > > > > my $mod; > > for $mod (@ISA) { > Гхм... Ну, эти правки должны, как минимум, включать в себе правку соответствующей > документации :-). А зачем? :-) Модули (и пользователи), которые просто будут использовать AnyDBM_File без всяких дальнейших уточнений, никак не пострадают (наоборот, они -- бонус! -- начинают использовать лучший из доступных модулей-backend'ов в дистрибутиве). Те же из них, которые явно пропихивают @AnyDBM_File::ISA через BEGIN{}, 1) знают (или не знают) что делают; простим им... 2) первым в таком списке чаще всего идет DB_File (как это и изображено в AnyDBM_File(3)). Пострадают только те, кто раньше использвовал AnyDBM_File->NDBM_File, а теперь будут использовать AnyDBM_File->DB_File. Но, с учетом глобального перехода на perl 5.8, я думаю, что это не главное и не единственное, от чего они могут пострадать. Здесь "под шумок" есть возможность принять безусловно верное решение. :) > Но, вообще-то, я не очень понимаю, что исправляет данный патч, > кроме усечения "функциональности по умолчанию" и возможности натравливать на все на это > perl.req без получения нерезолвящихся (ODBM_File) зависимостей. По-моему, "овчинка > выделки..." Объясняю популярно: использование AnyDBM_File фактически означает использование первого попавшегося (по списку) *DB*_File модуля в хост-системе. Это порождает поблему несовместимости: установка другого *DB*_File модуля, который в списке находится раньше, означает, что автоматически отваливаются все ранее созданные с помощью AnyDBM_File базы. Разработчики софта не имеют возможности предотвратить такой ситуации. Однако дистрибутив имеет возможность предотвратить такую ситуацию. Для этого модуль AnyDBM_File и ещё один модуль, который идёт у него первым в списке @ISA, должны находиться в одном пакете. Если это так, то необходимость в продолжении списка отпадает. -- Exit Music (for a Film) / OK Computer / Radiohead