Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поругайте на код 
:(
    Опции темы
gcc
Дата 13.11.2008, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Уважаемые, поругайте пожалуйста на код...

там допиливать еще долго, некоторые вещи может быть покажутся странными...
если использовать use strict; то все остальное все равно? как протестировать можно?
(еще надо сделать 2 модуля)
еще там добавить в запрос после WHERE надо, делал так примерно:
Код

if ($s) {push @clausers "User = $s";}
$clause = join (" AND ", @clauses );
$sth = $dbh->prepare(SELECT * FROM table WHERE $clause );


код тут:
http://x0.org.ua/perl_old.txt


Это сообщение отредактировал(а) gcc - 21.12.2008, 09:23
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 13.11.2008, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



 smile 

Это сообщение отредактировал(а) gcc - 21.12.2008, 09:22
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 13.11.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



 smile 

Это сообщение отредактировал(а) gcc - 21.12.2008, 09:22
PM WWW ICQ Skype GTalk Jabber   Вверх
dmitryk1
Дата 14.11.2008, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 10.6.2008
Где: Новосибирск

Репутация: 2
Всего: 2



А почему вызовы $dbh = DBI->connect(
в каждой процедуре? Параметры вроде одинаковые... Может стоит глобальный объект сделать? 

И ещё некоторые запросы красивые:

VALUES (?,?,?,?,?,?,NOW(),NOW(),?)

а некоторые генерятся, вроде как без особой надобности:

WHERE t1.session = \''
          . $cookies{'session'} . '\' AND...

ну и делай их 

WHERE t1.session = \'?
          \' AND...

если сервак запросы кэширует и генерируемые часто встречаются, то сервак тормозить начнёт... немного.

оПЯТЬ же безопасность повысишь. А то хз, чего они там в куки напихают... чёнить типа "0 OR 1=1; drop table;/*--" 
;)


Это сообщение отредактировал(а) dmitryk1 - 14.11.2008, 08:35
PM MAIL GTalk Jabber   Вверх
ginnie
Дата 14.11.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



gcc, согласен с dmitryk1, по поводу соединений и placeholder'ов. Соединение надо передавать в функции параметром.

Лучше код $$dd{'domain'} писать как $dd->{'domain'}, так привычнее.

s /[\W]//g - зачем скобки и почему не \W+

&create_session; - вызовы функции лучше писать как create_session();

Почему use Data::Validate::Domain qw(is_domain); в середине скрипта?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
tolkien
Дата 14.11.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 5.4.2008

Репутация: 4
Всего: 4



Вот $$dd{'domain'}  от такого способа разыменование лучше отказаться. Потому что можно тогда спутать с символьными ссылками. Лучше делать как ginnie написал
[
PM MAIL   Вверх
gcc
Дата 14.11.2008, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



спасибо, исправлю... 
Цитата(dmitryk1 @  14.11.2008, 08:31)

 Параметры вроде одинаковые... 

параметры с начало планирвались разные для несколько баз данных и транзакции делать по примеру...

Цитата(dmitryk1 @  14.11.2008, 08:31)

А почему вызовы $dbh = DBI->connect(
в каждой процедуре? Параметры вроде одинаковые... Может стоит глобальный объект сделать? 

глобальный объект, это один раз в начале скрипта подключится... или DBIx::Class?

Цитата(ginnie @  14.11.2008, 12:26)

gcc, согласен с dmitryk1, по поводу соединений и placeholder'ов. Соединение надо передавать в функции параметром.

я хотел в начале скрипта подключиться, а в конце скрипта отключиться... и еще eval{} сейчас сделал так чтобы было видно когда подлючаюсь и когда отлючаюсь


как передвать в функцию подключение, это анонимная подпрограмма? (не могу понять смысла)



Это сообщение отредактировал(а) gcc - 14.11.2008, 20:38
PM WWW ICQ Skype GTalk Jabber   Вверх
ginnie
Дата 14.11.2008, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Цитата(gcc @  14.11.2008,  19:41 Найти цитируемый пост)
как передвать в функцию подключение, это анонимная подпрограмма? (не могу понять смысла)


func($dbh);


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
gcc
Дата 14.11.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



а выключать соединение тогда наверное так:
Код

return $dbh->disconnect();

PM WWW ICQ Skype GTalk Jabber   Вверх
ginnie
Дата 14.11.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



gcc, может все-таки так логичнее?

Код

my $dbh = DBI->connect(...);
func($dbh);
$dbh->disconnect();


Добавлено через 56 секунд
Цитата(gcc @  14.11.2008,  19:41 Найти цитируемый пост)
и еще eval{} сейчас сделал так чтобы было видно когда подлючаюсь и когда отлючаюсь


можно фрагмент кода увидеть?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
gcc
Дата 14.11.2008, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Цитата(ginnie @ 14.11.2008,  20:48)
gcc, может все-таки так логичнее?

Код

my $dbh = DBI->connect(...);
func($dbh);
$dbh->disconnect();


ginnie, я понял, спасибо, буду делать...

Добавлено через 2 минуты и 6 секунд
Цитата(ginnie @ 14.11.2008,  20:48)
можно фрагмент кода увидеть?

кода нету, примерно вот так, если правильно это...
Код

eval {
my $dbh = DBI->connect(...);
func($dbh);
func($dbh);
$dbh->disconnect();
};


PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 28.11.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



 smile 

Это сообщение отредактировал(а) gcc - 21.12.2008, 20:57
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 21.12.2008, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



я вот переписал, на всякий случай может кто-то посмотрит

интересно узнать где ошибки или не правильно, там работает всё

код:
http://x0.org.ua/perl/


там интересует вопрос

1) праивльно так написать во всех классах?

Код

our(%ok_field);
for my $attr ( qw (return_create temple_hash) ) {$ok_field{$attr}++;}
sub AUTOLOAD {
my $self =shift;
my $attr =  our $AUTOLOAD;
$attr =~ s/.*:://;
return if $attr eq "DESTROY";
if ($ok_field{$attr}) {
  $self->{uc $attr} = shift @_;
 return $self->{uc $attr};
} else {
 my $superior = "SUPER::$attr";
 $self->superior(@_);
}
}


в книге было не определено $AUTOLOAD:
Код

my $attr =  $AUTOLOAD;


как проверить работаетли AUTOLOAD? если он нужен вообще

2. я нашел много информации про DESTROY (он вызывается сам), в данном случае мне нужно свой метод делать DESTROY и что в нем удалять?

3. $dbh мне удобно было написать вызвать, потмо сделаю метод который будет $dbh в начале, в удалятся в DESTROY



Это сообщение отредактировал(а) gcc - 21.12.2008, 10:20
PM WWW ICQ Skype GTalk Jabber   Вверх
KSURi
Дата 22.12.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



gcc, в вашем случае AUTOLOAD вовсе не нужен, у вас ведь всего два метода.
Обычно его используют для создания accessors/mutators для атрибутов объектов.

Как проверить AUTOLOAD? Странный вопрос... А как вы все остальное проверяете?


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
gcc
Дата 23.12.2008, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



KSURi, понятно, я хотел как раз в целом спросить, не то что мелкие ошибки, а чтобы знать куда дальше смотреть...  smile 
я так понял что если работает - значит правильно  smile 

PM WWW ICQ Skype GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0584 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.