Автор Тема: Почти личное FAQ в связи с необходимостью разбираться с чужими исходниками  (Прочитано 4369 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн metton

  • access granted
  • Старожил
  • ****
  • Сообщений: 320
  • +0/-0
  • 2
    • Просмотр профиля
    • http://bluejack.ru/
Доброго времени суток.
Возникла такая необходимость разбираться с чужими 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?
Очевидно не учитывая каких-то тонкостей по незнанию думал о таком варианте. (Прошу прокомментировать о его эффективности(скорость и др.)!)
Основной шаблон (весь дизайн страницы без каких-либо данных: контента, пунктов меню и т.д.) читается из хтмл-файла и все особые метки заменяются в нём регулярными выражениями на соответствующие шаблоны. эти шаблоны - небольшие файлы с блоками хтмл-я также с метками. Метки в главном могут заменяться на один шаблон, а могут на много: например метка контента заменяется на сгенерённый хтмл с результатом обращения к БД, а метка меню - на много однотипных шаблонов пунктов меню, в которых только заменяются метки названия пункта и ссылки.


Заранее спасибо.
 BlueJacking среди нас

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
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 статьи про шаблоны в перл.
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн metton

  • access granted
  • Старожил
  • ****
  • Сообщений: 320
  • +0/-0
  • 2
    • Просмотр профиля
    • http://bluejack.ru/
1. вопрос закрыт
2. закрыт
3. эксперементирую
4. закрыт
5. всё ещё открыт
6. закрыт
7. открыт
8. открыт
9. открыт
10. открыт
11. Читаю.
12. открыт


2Макс
Спасибо за ответ!
 BlueJacking среди нас

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
5. Не заметил, никогда это не волновало...

7. Зависит от скорости работы, вызываемого exec-ом скрипта, а также от общего количества вложенных таблиц в HTML (IE например, пока не загрузит таблицу полностью - не покажет ее).

8. SSI, "переменная языка" в зависимости от рабочей директории (/rus/, /eng/), подгрузка соответсвующих файлов.

9. а) возвращает то что между <<"LABEL" и LABEL, вторая LABEL длжна стоять в отдельной строке.
b) тоже самое что и print "что-то и \\"в кавычках\\" например"; - удобнее написать print qq{что-то и "в кавычках" например};, можно и так qq~текст~;, qq!текст!; и т.д.
В обоих случаях в тексте можно использовать переменные.

10. Если скрипт запущен на локальном апаче, частенько помогает если убить апачь.
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
2B OR NOT 2B = FF

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
metton Wyclef
10
Не совсем так... Apache как служба запускается от имени системы и даже администратор не в силах остановить дочерний процесс (если речь идет о Win2k или WinXP), Дабы не давть Apache такой уровень доступа можно запустить службу от другого пользователя системы, скажем от себя (Свойства службы -> Вход с ситему -> С учетной записью) если сервер локальный, или же от соответствующего пользователя с соответствующими правами доступа если сервер выходит в мир. После этого дочерние процессы убиваются без всяких трудностей... :)

Оффлайн metton

  • access granted
  • Старожил
  • ****
  • Сообщений: 320
  • +0/-0
  • 2
    • Просмотр профиля
    • http://bluejack.ru/
2Wyclef
Спасибо :)
Тока вот если perl бить апачей, пёрла всё равно не убивается, однака...
Видимо, сработает метод Phoinix-а.

2Chs
Я, конечно, почитаю, но не уверен, что много пойму. Я ещё слишком мало знаю.
Хотелось бы поконкретней...

2Phoinix
Спасибо. Попробую.
 BlueJacking среди нас

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
Phoinix
Так уж категорично?.. Сам недавно так делал.
Правда скрипт считывал что-то с виртуального хоста или из его папки, не помню. Зависший процесс perl.exe начал кушать память неимоверно, перегружаться было лень, завершил работу Апача - висяк пикнул бипером и помер. :)
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Wyclef
А зачем завершать работу Apache, потом заново запускать, если есть возможность просто убить процесс... Тем более изменение настройки службы занимает несколько секунд...

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
[OFF]Phoinix
Процесс не убивался.[/OFF]
It\'s nice to be important, but it\'s more important to be nice!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28