DBM-HASH и exists();
Пишу:
print 'такой ключик имеется!';
}
а мне error.log говорит:
AnyDBM_File doesn't define an EXISTS method at test.cgi...
Что это ещё такое? Хеш открыл, читаю, пишу, всё путём, а exists() не работает. Причем defined() вместо него идёт на ура, но я хочу разобраться в чём же дело с exists().
Ну и что?! Господа профессионалы? Вы куда подевались? Что, ни кто с хешами не встречался?
Я никогда, не работал, просто как то не доелось..
и поискав твою фу-цию xists пхп мануале ничего не нашел
http://ru2.php.net/manual-lookup.php?pattern=exists
Я никогда, не работал, просто как то не доелось..
и поискав твою фу-цию xists пхп мануале ничего не нашел
http://ru2.php.net/manual-lookup.php?pattern=exists
Да, я видимо забыл оговориться, что имеется ввиду именно Perl.
PS: 2Joker сапсибо хоть на этом ;о)
AnyDBM_File - это что?
Слишком мало сведений.
AnyDBM_File - это что?
=))
Это уж, товарищи специаллисты, вы сами должны знать.
DESCRIPTION
This module is a ``pure virtual base class''
--it has nothing of its own. It's just there
to inherit from one of the various DBM
packages. It prefers ndbm for compatibility
reasons with Perl 4, then Berkeley DB (See
DB_File), GDBM, SDBM (which is always there
--it comes with Perl), and finally ODBM. This
way old programs that used to use NDBM via
dbmopen() can still do so, but new ones can
reorder @ISA
Какие ещё могут быть сведения? Скрипт на Перле не может применить exists(); к файловому dbm-хешу.
Версия perl?
exists() не работает только с этим хешем?
http://www.google.com.ru/search?q=cache:bDYf1chWR6MJ:www.j2.ru/frozenfido/ru.perl/79497f89cb13.html+AnyDBM_File+doesn%27t+define+an+EXISTS+method&hl=ru&lr=lang_ru&ie=UTF-8&inlang=ru
Где хостишся?
Версия perl?
exists() не работает только с этим хешем?
[url]http://www.google.com.ru/search?q=cache:bDYf1chWR6MJ:j2.ru/frozenfido/ru.perl/79497f89cb13.html+AnyDBM_File+doesn%27t+define+an+EXISTS+method&hl=ru&lr=lang_ru&ie=UTF-8&inlang=ru[/url]
Хостинг на maxnet.ru
Perl версии 5.00503
exists() не работает со всеми dbm-хешами, причём с обычными хешами работает как надо.
Вопрос к всем:
Скажите мне, а у вас работает?
Это уж, товарищи специаллисты, вы сами должны знать.
Тут кто-то специалистами назывался?
Я, например, не ставлю перед собой целью выучить названия всех тысяч модулей, содрежашихся в CPAN. Не сталкивался пока с таким.
Скрипт на Перле не может применить exists(); к файловому dbm-хешу.
Это вопрос или утверждение? Если утверждение, то какие ещё вопросы?
Попробуй присвоить $input{'id'} какой-нибудь переменной, а потом проверяй ключ. А может что-то с правами доступа напутал к dbm?
Я, например, не ставлю перед собой целью выучить названия всех тысяч модулей, содрежашихся в CPAN. Не сталкивался пока с таким.
Этот модуль содержится в каждой поставке Perl. И, как я понимаю, используется неявно при общении с dbm-базами. Т.е. вы делаете dbmopen, хоть модуль и не объявляли, но он используется. Это СТАНДАРТНЫЙ способ общения с dbm.
Ты что, смеешься? Читай предыдущие посты.
Попробуй присвоить $input{'id'} какой-нибудь переменной, а потом проверяй ключ. А может что-то с правами доступа напутал к dbm?
Мы потестировали с Alone это дело - ни у меня ни у него ни под виндой ни под юнихом не работает. Похоже, что это глюк. Права доступа впорядке. Да и чего только и чему только не присваивали. Ты уверен, что у тебя это работает и ИМЕННО с dbm-хешем?
У меня такая конструкция работает прекрасно.
Попробуй присвоить $input{'id'} какой-нибудь переменной, а потом проверяй ключ. А может что-то с правами доступа напутал к dbm?
При чем здесь вообще конструкция? Какую конструкцию ты имеешь ввиду? Хеш, вложенный в хеш? Так это ясное дело работает. Я спрашиваю СОВСЕМ ДРУГОЕ. А именно: работает ли у вас функция exists() с dbm-хешем? Я уже не знаю как спросить, чтобы вы наконец поняли. Пожалуйста, читайте посты внимательнее.
На всякий случай, если не знаешь как работать с дебагером
perldoc perldebug
1. Убеждаемся что мы все говорим об одном и томже
http://blackman.wp-club.net/web/learn/g17.php
2. Сам факт существования проблеммы не подвергается сомнению.
2.1. В гугле много раз встречается упоминания об проблемеме использования exists() для dbm-хешев
2.2. vitorg и я обнаружели эту проблемму на не зависимых хостингах (я тестил у себя на машине, на VDS, на агаве и на hostonfly)
2.3. http://search.cpan.org/author/MJD/Memoize-1.01/Memoize/AnyDBM_File.pm наличае этого модуля указывает на распространенность проблеммы...
Методы решения
1. Поставить преведенный выше модуль(может поможет)
2. Когда мы тестили обнаружели интересную особенность, применимо к dbm-хешам defined() отлично заменяет exists()
3. Любые проблеммы рано или поздно решают... так что весьма вероятно установка свежей версии perl или свежей версии интерфейсного модуля решит проблему (из слов Flogger-а можно сделать предоположение что данная проблемма действительно разрешенна)
4. Самая печальная... возможно мы делали все не правильно и далать нужно совсем подругому... былобы полезно еслибы у тех у кого exists() работает нормально привели примеры как они работают с dbm-хешем (через какие модули и как открывают) и версию perl и если возможно версию модуля
Открываю так: dbmopen(%hash,file,0666);