![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Danissimo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Я попытался сделать сам. Мало чего хорошего получилось. Мой вопрос к гуру следующий: как бы вы решили следующую задачу.
Вы достаете строчки из БД. Для БД значение null -- нормальная ситуация. Значение null в перле представлены значением undef. Хочется вести лог. Причем, если написать print "Result: $result\n"; то рикуем получить ошибку, типа значение $result не определено. Чтобы не получать этого сообщения и в то же самое время видеть в логе, что значение не определено, можно объявить подпрограмму definize, и вызывать вот таким образом: print 'Result: ' . definize $result . "\n"; Также видится, что можно определить базовый класс для операций с БД. Он будет хранить как минимум connection с БД. В то же время для удобства, наверное, в нем можно определить операции для логирования. Скажем debug(), info(), error() и т. д. Как бы вы задизайнили и запрограммировали бы подобную задачу. Я вот пытаюсь натянуть имеющийся у меня богатый опыт из других языков. Может я зря пытаюсь это сделать. Поэтому я и обращаюсь к вам, гуру, за советом. У вас ведь больше опыта, вы знаете, как лучше? |
|||
|
||||
| nitr |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2543 Регистрация: 10.2.2006 Где: Россия :) Репутация: 37 Всего: 84 |
что-то ты неверно делаешь, даже если нул, оно пустое будет...
к примеру объявить явно
либо это я так делаю ;) что не бывает ошибки... Добавлено @ 19:28 даже как тест
Это сообщение отредактировал(а) nitr - 13.12.2006, 19:27 |
||||||
|
|||||||
| Danissimo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Во-во, я вот как раз об это и говорю. Чтобы не писать таких вот строк:
defined $result ? print "Result: $result\n" : print "Result: null\n"; предлагается использовать вспомогательную подпрограмму, которую можно использовать вот так: print "Selected: <$id" . definize $when . ', ' . definize $ref . ', ' . definize $terminated . ">\n"; Каждая из переменных, передаваемых в definize, может быть null. При таком раскладе использовать конструкцию defined ???... можно. Но не нужно. Добавлено @ 20:22 Или даже еще проще: print 'Selected: <' . join(', ', definize($when, $ref, $terminated)) . ">\n"; Это сообщение отредактировал(а) Danissimo - 13.12.2006, 20:23 |
|||
|
||||
| korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Напиши один раз такую подпрограмму и прогоняй через неё данные полученные из базы, как через фильтр:
Можно так же заюзать значения по умолчанию, например так:
Правда в последнем случае будут все ложные значения заменяться пустой строкой. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
| Danissimo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Короб, ты гений. Действительно, можно ведь просто, передать весь прочитанный массив в подпрограмму, которая умеет обрабатывать массивы. Это хороший шаг вперед.
Однако остался открытым вопрос. Преамбула:
Собственно, вопрос -- как вызывать definize с как можно меньшим кол-вом писанины. |
|||
|
||||
| Nab |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 582 Регистрация: 25.3.2006 Где: Kiev Репутация: 26 Всего: 37 |
Ну уже ж написали, что эту функцию нужно експортировать...
Не хочешь юзать Exporter, експортируй сам, но имхо это лишнее... -------------------- Чтобы правильно задать вопрос нужно знать больше половины ответа... Perl Community FREESCO in Ukraine |
|||
|
||||
| Danissimo |
|
||||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Э-эхх, не хватает мне опыта. Смотрю на конструкции, как баран на новые ворота. В конце концов с вашей помощью сделал маленький примерчик. Вроде, заработало. Практической пользы -- никакой. Зато вот такое наблюдение: ClassA.pm
ClassB.pm
testAB.pl
Запускаем, все отлично:
Теперь делаем простейший трюк: заменяем все ClassA на просто A, ClassB -- на B. Вот результат:
У меня объяснений нету. Одни буквы |
||||||||||||
|
|||||||||||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Вот этой части не понял, поясни подробнее. Что значит заменяем ClassA на просто А? -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Zuzu |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 19.10.2006 Где: Екатеринбург Репутация: 3 Всего: 4 |
Другой вариант. Просто проигноритуй первый переданный аргумент (просто напиши shift). Только лично мне нравится вызов "без $self-> ". Всегда пишу $self-> ... перед методом. Чтобы проблемы в дальнейшем не отгребать. Хочешь еще уменьшить код - помести print внутрь процедуры. =) Это сообщение отредактировал(а) Zuzu - 18.12.2006, 16:28 --------------------
Проводить эксперименты на живом сервере опасно, а на мертвом - бесполезно. |
|||
|
||||
| Danissimo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 14.8.2006 Где: Санкт-Петербург Репутация: 1 Всего: 1 |
Я имел в виду переименовать файл ClassA.pm в A.pm, а также все упоминания класса ClassA в коде заменить на A. |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |