Forum Webscript.Ru
Программирование => Perl => Тема начата: metton от 14 Августа 2003, 00:26:43
-
Доброго времени суток.
Возникла такая необходимость разбираться с чужими perl-исходниками. А так как с perl-ом я пока знаком очень мало, по ходу дела возникают вопросы.
Получилась своеобразная FAQ-а.
(Возможно, многое есть на форуме - буду искать, но пока скинул сюда все накопившиеся вопросы).
1) Например, обнаружил в конце одного из файлов такую строчку:
1;
Что это?
2) Чем отличается fetchrow от fetchrow_array?
Смотрел в спецификации (где-то скачал в pdf) вообще ни слова о fetchrow.
В руководстве упоминается fetchrow, но как-то странно: под заголовком fetchrow_array в тексте упоминается о DBI::fetchrow. Пробовал - различий в работе не нашёл.
3) Чем отличаются local() и my(). В документации почти ничего не нашёл по этому поводу. Написано только что лучше использовать my(), и что "local isn\'t what most people think of as \'local\'" и никаких пояснений...
4) Должен ли работать такой код:
# $query_res - хэндлер выполненного запроса
$query_res->insertid;
?
Потому что в одном месте я так и писал - всё работало. В другом работает только
$query_res->{insertid};
5) Есть ли различие в скорости обработки строк в одинарных и двойных кавычках. Точнее - сильно ли замедляет работу использование двойных кавычек (которые, насколько я знаю, парсятся)?
6) Отличаются чем-нибудь файлы .pl и .cgi?
7) Есть ли минусы у многоступенчатого (скажем, ступеней 4-5) включения файлов? Т.е., например, index.html содержит два включения файла, которые, в свою очередь, также содержат включения. Некотрые из включений могут быть exec-ами. Сильно ли это тормозит выдачу документа пользователю?
8) Есть ли какие-то статьи по технологиям создания мультиязыковых сайтов на Perl?
В голову приходит только создание множества файлов с переменными с одинаковыми именами, но разными значениями (соответственно языку файла). Но даже если этот способ реально используется, хотелось бы узнать все тонкости метода.
9) Что это за конструкция:
return <$title
END_OF_TEXT
и вот эта:
print qq{
some text
}
10) Немного оффтоп: как убить процесс Perl.exe когда он после неудачного тестирования скрипта нехило начинает грузить машину (это вроде распространённая проблема).
11) Как в Perl с сессиями?
12) Где можно найти инфу по технологии шаблонного генерирования страниц в Perl?
Очевидно не учитывая каких-то тонкостей по незнанию думал о таком варианте. (Прошу прокомментировать о его эффективности(скорость и др.)!)
Основной шаблон (весь дизайн страницы без каких-либо данных: контента, пунктов меню и т.д.) читается из хтмл-файла и все особые метки заменяются в нём регулярными выражениями на соответствующие шаблоны. эти шаблоны - небольшие файлы с блоками хтмл-я также с метками. Метки в главном могут заменяться на один шаблон, а могут на много: например метка контента заменяется на сгенерённый хтмл с результатом обращения к БД, а метка меню - на много однотипных шаблонов пунктов меню, в которых только заменяются метки названия пункта и ссылки.
Заранее спасибо.
-
2. fetch alias for fetchrow_arrayref
3.
sub do_something {
print "sub=".$c."\\n";
}
if (10 > 5) {
my $c = 10;
print "if=".$c."\\n";
do_something($a);
}
print "simple=".$c;
Поэкспериментируй, замени my на local
6. зависит от настроек сервера
8. есть еще модуль для работы с gettext
11. ppm search session
насколько я знаю, Apache::Session - наиболее работоспособный модуль.
12. на этом сайте есть как минимум 2 статьи про шаблоны в перл.
-
1. вопрос закрыт
2. закрыт
3. эксперементирую
4. закрыт
5. всё ещё открыт
6. закрыт
7. открыт
8. открыт
9. открыт
10. открыт
11. Читаю.
12. открыт
2Макс
Спасибо за ответ!
-
5. Не заметил, никогда это не волновало...
7. Зависит от скорости работы, вызываемого exec-ом скрипта, а также от общего количества вложенных таблиц в HTML (IE например, пока не загрузит таблицу полностью - не покажет ее).
8. SSI, "переменная языка" в зависимости от рабочей директории (/rus/, /eng/), подгрузка соответсвующих файлов.
9. а) возвращает то что между <<"LABEL" и LABEL, вторая LABEL длжна стоять в отдельной строке.
b) тоже самое что и print "что-то и \\"в кавычках\\" например"; - удобнее написать print qq{что-то и "в кавычках" например};, можно и так qq~текст~;, qq!текст!; и т.д.
В обоих случаях в тексте можно использовать переменные.
10. Если скрипт запущен на локальном апаче, частенько помогает если убить апачь.
-
5. Есть.
perldoc Benchmark
-
metton Wyclef
10
Не совсем так... Apache как служба запускается от имени системы и даже администратор не в силах остановить дочерний процесс (если речь идет о Win2k или WinXP), Дабы не давть Apache такой уровень доступа можно запустить службу от другого пользователя системы, скажем от себя (Свойства службы -> Вход с ситему -> С учетной записью) если сервер локальный, или же от соответствующего пользователя с соответствующими правами доступа если сервер выходит в мир. После этого дочерние процессы убиваются без всяких трудностей... :)
-
2Wyclef
Спасибо :)
Тока вот если perl бить апачей, пёрла всё равно не убивается, однака...
Видимо, сработает метод Phoinix-а.
2Chs
Я, конечно, почитаю, но не уверен, что много пойму. Я ещё слишком мало знаю.
Хотелось бы поконкретней...
2Phoinix
Спасибо. Попробую.
-
Phoinix
Так уж категорично?.. Сам недавно так делал.
Правда скрипт считывал что-то с виртуального хоста или из его папки, не помню. Зависший процесс perl.exe начал кушать память неимоверно, перегружаться было лень, завершил работу Апача - висяк пикнул бипером и помер. :)
-
Wyclef
А зачем завершать работу Apache, потом заново запускать, если есть возможность просто убить процесс... Тем более изменение настройки службы занимает несколько секунд...
-
[OFF]Phoinix
Процесс не убивался.[/OFF]