Php Or Perl

Статус
Закрыто для дальнейших ответов.

RUSH

Читер
Регистрация
26.01.2006
Сообщения
230
Вот прочитал самоучитель по PERL маленький (30 листов MS WORD, 12 шрифт вроде). Так что я оттуда понял - там большее половины PHP. Точнее PHP это половина PERL, а не PERL половина PHP, т.к. первый появился раннее. у меня возникло несколько вопросов.

1. Ну и чем PERL лучше PHP, кроме скорости?
2. Где можно найти последнюю версию PERL
3. Где можно найти русскую документацию по PERL
4. Где можно почитать хорошие статьи по PERL
5. Вообще, стоит ли??? Стоит ли изучать глубже PERL или лучше дальше изучать PHP? С PHP знаком я с лета 2004, уже многое усвоил, прочитал... Язык мне нравится... Но и PERL мне нравится... Как не странно своей экзотичностью, сложностью и похожестью на PHP :)

В общем хотелось бы услышать ответ от тех, кто знаком с PERL и, желательно, с PHP.
 

DnAp

self::setDebugMode(true);
Регистрация
30.04.2005
Сообщения
490
Ну начнем...
Вот прочитал самоучитель по PERL маленький (30 листов MS WORD, 12 шрифт вроде). Так что я оттуда понял - там большее половины PHP. Точнее PHP это половина PERL, а не PERL половина PHP, т.к. первый появился раннее. у меня возникло несколько вопросов.
Еще почитай книжечку про си/си++ и скажи что это все одно и то-же...
Просто синтаксис одинаковый, чтоб не путаться..

1. Ну и чем PERL лучше PHP, кроме скорости?
perl за частую являеться не только языком для генерации веб страничек, но и языком скриптов активно использующимся в *nix системах, тоесть довольно мощьная замена "батников"(*.bat)
Еще в перле очень плотно внедрены регулярные выражения...
2. Где можно найти последнюю версию PERL
http://www.activestate.com/
или если точнее
http://downloads.activestate.com/ActivePerl/Windows/
3. Где можно найти русскую документацию по PERL
Понятия не имею, а она нужна?
5. Вообще, стоит ли??? Стоит ли изучать глубже PERL или лучше дальше изучать PHP? С PHP знаком я с лета 2004, уже многое усвоил, прочитал... Язык мне нравится... Но и PERL мне нравится... Как не странно своей экзотичностью, сложностью и похожестью на PHP :)
Лишние знания никогда не помешают, а мануалом я надеюсь ты уже научился пользоваться, так что нововвведения в php для тебя будут не проблемой..

В общем хотелось бы услышать ответ от тех, кто знаком с PERL и, желательно, с PHP.
У меня брат на perl пишет, я какое-то время вникал, ну надо же помоч младшему брату в его порывах к знаниям:)...
 

deMone

Злой страшный дядька
Регистрация
30.01.2006
Сообщения
937
Поймите, это всё-таки разные языки. На C/C++ можно тоже писать сайты. Я идиота видел, он на Visual Basic-е писал DOS-приложение, которое выводило в качестве результата HTML-код и тоже прекрасно работало.
Но ни Си, ни ВБ для сайтов не подходят.

PHP и Perl: Perl применяется гораздо шире, нежели PHP, который был создан специально для работы с сайтами. Perl — язык очень универсальный, поэтому не поддерживает напрямую того, что необходимо вебмастерам. Оттого Perl в этом плане (работы с сайтами) недостаточно удобен (возьмите хотя бы то, что PHP-код можно перемежать с простым HTML-ом, а в Perl-е так нельзя).

Так что если вы желаете писать сайт, лучше используйте PHP – он для этого был сделан и наиболее удобнен в этом плане.

Да, и насчёт скорости: последние версии PHP всё ближе и ближе по скорости подходят к Perl-у, так что говорить о сильном выигрыше Perl-а в скоросте уже нельзя.
 

Leonzsmart

Новичок
Регистрация
03.08.2009
Сообщения
1
Вот собственно мануалы и интересуют Желательно по теме: запросы и т.д.
Как я понимаю, запросы вводятся через утилитку "mysql"? А как кстати взаимодействуют с mysql базой/таблицей через html страницу?

В общем вопрос такой:

Нужен алгоритм регистрации и авторизации с помощью Perl и MySql

P.S. С удовольствием бы сам освоил, только дайте книгив смысле авторов, издательства и т.д.

P.P.S. Кстати скрипт Perl будет находится на html странице, как и PHP -шный или нет???
 

Ivan

суперМодератор
Регистрация
10.01.2007
Сообщения
316
Leonzsmart:
почитай на http://search.cpan.org/
CGI::Session - этот модуль тебе поможет общаться с сессиями и хранить в них переменные. Сессии - это такие (грубо говоря) файлики, в которые можно записывть простейшие данные. Эти файлики имеют время жизни (время жизни сессии). Так вот, поскольку самая быстрая база - это текстовый файл, то когда сессия представлена текстоым файлом, обращение к ней очень быстрое (быстрее чем к mysql). Но данных там должно быть мало.
К тебе заходит человек (запрашивается скрипт). Ты просматриваешь его куку.
CGI::Cookie - тебе очень поможет.
Код:
my %cookies = fetch CGI::Cookie; # забираем куку.
# пусть в куке, в параметре с названием _sid у тебя должен храниться идентификатор сессии
# тогда
if (exists $cookies{'_sid'} and $cookies{'_sid'}->value) {
 # т.е. в куке этот параметр есть, и у него есть значение
 # отлично! подсасываем сессию
 $session = new CGI::Session($cookies{'_sid'}->value);
 # ну и проверяем, если флаг авторизован есть - всё норм
 # поэтому условие только для не авторизованных
 unless ($session->param('_Authorize') eq '1') {
	  #вот здесь смотрим, либо просто ставим, что чел не авторизован,
	  # либо по наличию параметров из POST решаем - может его по пробовать пробить по
	  # mysql базе и проверить совпадают ли логин и пароль
	   # если параметры логи и пароль совпадают ставим
	  #$session->param(-name=>'_Authorize',-value=>'1');
 }

} else {
 # куки не было или у неё пустое значние, и мы ничего не знаем о том какую сессию подсосать,
 # т.е. нужно такому юзеру создать сессию и засунуть её идентификатор в куку
 $session = new CGI::Session(); 
 # сессию создали, отметим в ней, что чувак не авторизован
 $session->param(-name=>'_Authorize',-value=>'0'); 
}
 # чтобы внедрить куку в браузер, нужно передать её в хидерах ответа
 my $cookie_header = CGI::Cookie->new(-name=>'_sid',-value=>$session->id(),-expires=>'+2h')
 # запоминаем для дальнейшего кода - авторизован ли чувак
 my $authiruzed = $session->param('_Authorize'); 
 
 # логика программы
 if ($authiruzed) {
   # что-то для авторизованных
 } else {
   # для не авторизованных
 };
 
 # объект CGI нужен для отдачи страницы
 my $q = CGI->new();
 # отдаём страницу юзеру
 print $q->header({
		-cookie => $cookie_header,
		-type=>'text/html',
		-charset=>'utf-8',
	});
 print $html;
 exit;
Для обращения к базе данных используется как правило какя-нить из ORM (см вики).
Но, для начинающих я бы рекламендовал DBI (см на cpan).

Вот такой код даёт очень грубое представление о том. как проверить авторизацию, если пишешь на cgi.
В реале, всё разнесено по модулям, и эти вещи в коде самой cgi не видно.
На perl ты можешь писать под mod_perl и там уже будет по другому.
Или использовать фреймворк Catalyst и там будет то же по другому.

Поэтому я и написал какэто для cgi, просто чтобы ты понял основной принцип.

Зы. И для всех хотелось бы сказать, что Перл код не смешиватся c html и в этом есть преимущества. Так же как вы отделяете отображение от содержимого в html (стили и контент), как xml и xslt, так же и перл отделятс от Вашего html кода через Template::Toolkit (http://www.template-toolkit.ru/). И это очень мощный шаблонизатор.
У него есть возможность харнить и автоматически обновлять уже скомпиленные шаблоны на RAM-диске (т.е. скомпиленные, на виртуальном диске оперативной памяти). И скорости такие, что мама не горюй. PHP и рядом не валялся. Ах. ну да... вы же любите смешивать html и php... И css, думаю считает злом, и xslt то же... Ведь мешать - это так просто и правильно...
 

silverworld

New Member
Регистрация
01.08.2009
Сообщения
9
Всё это дело BerkeleyDB. Просто файлы.

Сделаи базу файл на php - через dba_open ... db4
из php работается с ней замечательно,

из perl доступа нет, пишет что повреждён доступ через модуль DB_File- DB_BTREE

и наоборот также... делаем в perl в php не открывется...

>>> Вопрос: как из Perl работать с базой cсделанной на php ?
 
K

KarpovSergei

Guest
Нужна инфа по поводу совместной работы Perl и MySQL Как управлють базой данныхдобавление пользователей и др. данных через Perl.

P.S. Можно предлагать книжные вариенты с авторами, изд. и т.д, можно электронные Главное основательные

P.P.S. Кто - нибудь объяснит примерную работу???
 

Ivan

суперМодератор
Регистрация
10.01.2007
Сообщения
316
KarpovSergei, я так понимаю и перл и мыскль база у тебя есть.
Почитай http://search.cpan.org/~timb/DBI-1.609/DBI.pm Там всё есть.
DBI хорош тем, что ты, получив объект подключения к базе, запоминаешь всего пару методов, и в остальном все запросы пишешь на SQL.
Но это же и является недостатком. Т.к. если использовать модули типа DBIx::Class, Class::DBI и т.п. то ты не используешь сами sql-запросы, а описываешь обращение к данным. Это позволяет быстро перейти с Mysql на дургую базу.
Но для начала, DBI очень хорош.
Вот это - получение объекта подключения к базе:
Код:
my $db = DBI->connect("dbi:mysql:database=ИМЯ_БАЗЫ;host=НАЗВНИЕ_ХОСТА;",
								'ЛОГИН',
								'ПАРОЛЬ',
								{'RaiseError' => 1}
	) or die $DBI::errstr;
если поключение не сработает, то получишь описание ошибки.
А дальше можешь делать всё что угодно:
Код:
# чтобы выполнить insert или update, используй метод do
$db->do("INSERT INTO table1(field1,...,fieldN) VALUES (data1,...,dataN),...,(dataN1,...,dataNN)");
# чтобы забрать данные, можно отталкиваться от того, в каком виде тебе они нужны:
my $array_ref = $db->selectall_arrayref("SELECT book,author FROM room");
# $array_ref - это ссылка на массив, каждый элемент кторого то же ссылка на массив. 
# Т.о. первая книга у нас будет $array_ref->[0]->[0], а автор для неё $array_ref->[0]->[1]
# вторая найденная книга будет $array_ref->[1]->[0], а автор для неё $array_ref->[1]->[1]
# т.е. лёгкое правило: первый указатель для номера найденной строки, второй - номер для значения что ты указал в select. Считаем с 0.

my $hash_ref = $db->selectall_hashref("SELECT book,author FROM room", 'book');
# Здесь есть после запроса доп параметр. Обычно это какой-то уникальный параметр типа id (который primary key у тебя).
# Нужен он для того, чтобы когда будут выбраны все строки, что соотв твой квере, была сформирована ссылка на хэш.
# $hash_ref - это ссылка на хэш, ключи кторого это второй параметр в выражении $db->selectall_hashref(...), а значения этого хэша - поля базы в виде сылки на хэш.
# Звучит старшно, но на практике то же просто:
# если у нас в таблице room есть 2 строки ('book1','author1') и ('book2','author2'). То, $hash_ref будет представлять из себя структуру данны вида:
#{
#  'book1' => {'book'=>'book1','author'=>'author1'},
#  'book2' => {'book'=>'book2','author'=>'author2'}
#}
# думаю, тут всё просто.

# есть возможность создавать кешированный запрос (при частом обращении - так будет быстрее):
my $query = "SELECT book,author FROM room WHERE author = ?";
# подготовливаем кеширование
my $sth = $db->prepare($query);
# выполняем запрос
$sth->execute('author1');
# и дальше, есть так же масса возможностей вытащить данные в виде разных структур данных, чтоб было тебе по удобнее.
# но я предпочитаю
my $result = $sth->fetchall_arrayref({});
# $result, полкченный таким образом - это ссылка на массив, каждый элемент кторого - ссылка на хэш. На мой взгляд - самы удобный вид данных

# если хочешь можешь продолжать:
$sth->execute('author2');
my $result2 = $sth->fetchall_arrayref({});

# а когда больше не нужен кеш на этот запрос:
$sth->finish();

# но,если не давать $sth->finish(); и не делать $db->disconnect; то по окончаении работы программы, коннекты закроются сами и всё будет в пордке.
Думаю, я немного ответил на твой вопрос. Дальше читай сам.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ