Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

DBM-HASH и exists();

455
28 августа 2003 года
vitorg
55 / / 20.05.2000
Люди, у меня какой-то глюк...
Пишу:
 
Код:
if (exists($gb_messages{$input{'id'}})){
 print 'такой ключик имеется!';
 }

а мне error.log говорит:
AnyDBM_File doesn't define an EXISTS method at test.cgi...
Что это ещё такое? Хеш открыл, читаю, пишу, всё путём, а exists() не работает. Причем defined() вместо него идёт на ура, но я хочу разобраться в чём же дело с exists().
455
29 августа 2003 года
vitorg
55 / / 20.05.2000
Ну и что?! Господа профессионалы? Вы куда подевались? Что, ни кто с хешами не встречался?
250
29 августа 2003 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by vitorg
Ну и что?! Господа профессионалы? Вы куда подевались? Что, ни кто с хешами не встречался?


Я никогда, не работал, просто как то не доелось..
и поискав твою фу-цию xists пхп мануале ничего не нашел

http://ru2.php.net/manual-lookup.php?pattern=exists

455
29 августа 2003 года
vitorg
55 / / 20.05.2000
Цитата:
Originally posted by Joker

Я никогда, не работал, просто как то не доелось..
и поискав твою фу-цию xists пхп мануале ничего не нашел

http://ru2.php.net/manual-lookup.php?pattern=exists



Да, я видимо забыл оговориться, что имеется ввиду именно Perl.

PS: 2Joker сапсибо хоть на этом ;о)

4.1K
30 августа 2003 года
metton
13 / / 02.08.2003
Слишком мало сведений.
AnyDBM_File - это что?
455
30 августа 2003 года
vitorg
55 / / 20.05.2000
Цитата:
Originally posted by metton
Слишком мало сведений.
AnyDBM_File - это что?


=))
Это уж, товарищи специаллисты, вы сами должны знать.

Код:
AnyDBM_File - provide framework for multiple DBMs
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-хешу.
283
30 августа 2003 года
Alone
910 / / 20.11.2002
Где хостишся?
Версия 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
455
30 августа 2003 года
vitorg
55 / / 20.05.2000
Цитата:
Originally posted by Alone
Где хостишся?
Версия 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-хешами, причём с обычными хешами работает как надо.

Вопрос к всем:
Скажите мне, а у вас работает?

4.1K
30 августа 2003 года
metton
13 / / 02.08.2003
Цитата:
Originally posted by vitorg


Это уж, товарищи специаллисты, вы сами должны знать.




Тут кто-то специалистами назывался?
Я, например, не ставлю перед собой целью выучить названия всех тысяч модулей, содрежашихся в CPAN. Не сталкивался пока с таким.



Цитата:

Скрипт на Перле не может применить exists(); к файловому dbm-хешу.



Это вопрос или утверждение? Если утверждение, то какие ещё вопросы?

4.9K
30 августа 2003 года
Flogger
5 / / 29.08.2003
У меня такая конструкция работает прекрасно.
Попробуй присвоить $input{'id'} какой-нибудь переменной, а потом проверяй ключ. А может что-то с правами доступа напутал к dbm?
455
01 сентября 2003 года
vitorg
55 / / 20.05.2000
Цитата:
Тут кто-то специалистами назывался?
Я, например, не ставлю перед собой целью выучить названия всех тысяч модулей, содрежашихся в CPAN. Не сталкивался пока с таким.


Этот модуль содержится в каждой поставке Perl. И, как я понимаю, используется неявно при общении с dbm-базами. Т.е. вы делаете dbmopen, хоть модуль и не объявляли, но он используется. Это СТАНДАРТНЫЙ способ общения с dbm.

Цитата:
Это вопрос или утверждение? Если утверждение, то какие ещё вопросы?


Ты что, смеешься? Читай предыдущие посты.

Цитата:
У меня такая конструкция работает прекрасно.
Попробуй присвоить $input{'id'} какой-нибудь переменной, а потом проверяй ключ. А может что-то с правами доступа напутал к dbm?


Мы потестировали с Alone это дело - ни у меня ни у него ни под виндой ни под юнихом не работает. Похоже, что это глюк. Права доступа впорядке. Да и чего только и чему только не присваивали. Ты уверен, что у тебя это работает и ИМЕННО с dbm-хешем?

455
01 сентября 2003 года
vitorg
55 / / 20.05.2000
Цитата:
Originally posted by Flogger
У меня такая конструкция работает прекрасно.
Попробуй присвоить $input{'id'} какой-нибудь переменной, а потом проверяй ключ. А может что-то с правами доступа напутал к dbm?


При чем здесь вообще конструкция? Какую конструкцию ты имеешь ввиду? Хеш, вложенный в хеш? Так это ясное дело работает. Я спрашиваю СОВСЕМ ДРУГОЕ. А именно: работает ли у вас функция exists() с dbm-хешем? Я уже не знаю как спросить, чтобы вы наконец поняли. Пожалуйста, читайте посты внимательнее.

455
02 сентября 2003 года
vitorg
55 / / 20.05.2000
Ну и что все вдруг замолчали? Ответов не будет?
300
04 сентября 2003 года
ReDrum
689 / / 20.04.2000
Посмотри в отладчике какое значение храниться в хеше $input по ключу id.

На всякий случай, если не знаешь как работать с дебагером

perldoc perldebug
4.9K
04 сентября 2003 года
Flogger
5 / / 29.08.2003
У меня точно работает. На винде работает под апачем и на серваке на majordomo работает. У них freebsd и тоже апач.
283
05 сентября 2003 года
Alone
910 / / 20.11.2002
Пора раставить все точки над "i" иначе этот топик будет разростатся до бесконечности...

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 и если возможно версию модуля
4.9K
05 сентября 2003 года
Flogger
5 / / 29.08.2003
По-моему defined применять не совсем верно, т.к. проверяется существование данных, связанных с ключом, но допускается связывать с ключом хэша undef. Про версию перла посмотрю. У меня подключен только модуль CGI.
Открываю так: dbmopen(%hash,file,0666);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог