Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Есть GSM-шлюз, который может принимать и отправлять SMS. Его можно настроить таким образом, чтобы при поступлении SMS вызывалась внешняя утилита, в которую будут передаваться параметры (номер отправителя, текст сообщения, дата и т.п.). Такой утилитой будет perl-скрипт. SMS-команды разные, каждую нужно обрабатывать по своему. Я бы хотел сделать так: При поступлении SMS запускается диспетчер. Он анализирует текст сообщения и вызывает скрипт, соответствующий поступившей команде. При этом вызываемые скрипты большой объем кода могут использовать повторно, поэтому общие функции и процедуры лучше собрать в одном файле, который будет использоваться разными скриптами (и лучше всего, если этим файлом будет скрипт диспетчера). Подскажите, как подобное сделать с pl-файлами? Я видел, как в DBI подключаются pm-модули, соответствующие разным БД, но pm-модули не очень удобно запускать для отладки. Хотелось бы, чтобы вызываемыми скриптами были pl-файлы, которые при необходимости можно вызвать и автономно. Про eval я знаю, но это не лучший способ. ________________________ Мы смотрим с оптимизмом... ...в оптический прицел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.02.2014, 11:04 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
вашу задачу можно решить простым процедурным подходом, либо почитайте про ООП, если не понимаете как и где подключаются pm фаилы и отладка связанная с ними. Код: php 1. 2. 3. 4. 5. 6. фаил someFunctions.pl Код: php 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 12:34 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Спасибо, почитаю. Но в принципе, require '*.pl' будет достаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 12:54 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Хотя все-таки есть неясность. Я видел схему работы примерно такой. Есть файл disp.pl (диспетчер, а также библиотека функций) и файлы proc1.pl, proc2.pl, proc3.pl (скрипты для выполнения определенных действий). При поступлении SMS вызывается скрипт disp.pl. В этом скрипте SMS анализируется, затем вызывается соответствующий procX.pl и в него передаются параметры (номер отправителя SMS, текст сообщения и пр.). Как передать в вызванный скрипт параметры? Или нужно использовать глобальные переменные? Затем в вызванном скрипте подключается файл disp.pl. Как тут лучше избежать рекурсии? Использовать передаваемый специальный аргумент, означающий что скрипт подключен извне и ничего делать не надо, или есть какой-то штатный способ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 13:02 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Мы имеем 1. Запускаем фаил disp.pl, передаем в него данные о смс 2. В файле disp.pl запускаем фаил procX.pl на основании анализа данных 3. Подключаем в файле procX.pl фаил disp.pl Для начала вопрос, зачем нам пункт 3?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 15:09 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Для того, чтобы общий код (различные функции) писать в одном месте, а в procX.pl эти функции вызывать. Не обязательно, чтобы библиотекой функций был именно disp.pl, это может быть и другой файл (func.pl) или даже модуль (smsfunc.pm). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 17:31 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Для того, чтобы общий код (различные функции) писать в одном месте, а в procX.pl эти функции вызывать. Не обязательно, чтобы библиотекой функций был именно disp.pl, это может быть и другой файл (func.pl) или даже модуль (smsfunc.pm). Так Вы сами себе ответили, создайте фаил functions.pl, затем подключайте его в disp.pl и procX.pl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2014, 18:31 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
В каком файле будут лежать функции, это дело второе. Я думаю, что такой вариант тоже рабочий: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Я пока застрял на другом. Я не могу сообразить, как из диспетчера вызвать другой скрипт procX.pl. Через require ( if ($action eq 'proc1') {require "proc1.pl"} )? Или можно как-то более грамотно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 11:47 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Я вот никак не могу понять, что Вы имеете под "вызвать". Смотрите, скрипт можно подключать , через require/use, либо запускать как отдельный процесс через ``/system/exec. Вам нужно решить, нужно ли его запускать как отдельный процесс, на мой взгляд, в рамках текущей задачи - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 12:19 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Да, термины я использую неправильно. Скрипт мне нужно подключить. И видимо использовать нужно require, т.к. у меня не модуль. Под "вызвать" я имею ввиду возможность передачи аргументов вызванному скрипту. То есть чтобы скрипт одинаково отработал в следующих способах запуска: 1. perl proc1.pl arg1 arg2 2. require "proc1.pl" ('arg1' 'arg2') Ну а в скрипте proc1.pl обрабатываются @ARGV. Но поскольку синтаксиса 2 не существует, придется делать как-то так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 13:44 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Модули тоже можно подключать через require, разница между use в том, что подключаться они на разных стадиях исполнения. Вам нужно передавать параметры не в подключаемые файлы, а в функции, которые хранятся в них Код: php 1. 2. 3. functions.pl Код: php 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 14:31 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Отвечу в одном треде... Вот я не понимаю КАК вы умудряетесь делать ТАКИЕ костыли?.. Нормальные люди пользуют Class::Load допустим и pm'ники... Они пользуют lib::abs для относительных путей и т.д. и т.п. ОТКУДА у вас ТАКОЕ лезет. Большего быдлокода я не видел в Перле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 15:51 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
WarstoneОтвечу в одном треде... Вот я не понимаю КАК вы умудряетесь делать ТАКИЕ костыли?.. Нормальные люди пользуют Class::Load допустим и pm'ники... Они пользуют lib::abs для относительных путей и т.д. и т.п. ОТКУДА у вас ТАКОЕ лезет. Большего быдлокода я не видел в Перле. Относитесь проще, давно не обращаю внимания, человек задал вопрос, я ответил, тут ведь сразу видно, что человек, к сожалению, не знаком с основами программирования совсем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.02.2014, 15:57 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Да, термины я использую неправильно. Скрипт мне нужно подключить. И видимо использовать нужно require, т.к. у меня не модуль. Под "вызвать" я имею ввиду возможность передачи аргументов вызванному скрипту. То есть чтобы скрипт одинаково отработал в следующих способах запуска: 1. perl proc1.pl arg1 arg2 2. require "proc1.pl" ('arg1' 'arg2') Ну а в скрипте proc1.pl обрабатываются @ARGV. Но поскольку синтаксиса 2 не существует, придется делать как-то так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. require или do тут никак не прицепишь, только через вызов подпроцесса, увы Код: perl 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2014, 19:00 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Ну я все же пришел к такому варианту: Код: php 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. 29. 30. Обнаружил такой баг. У меня скрипты сохранены в UTF-8, в основном скрипте указано use utf8. Вызываемый скрипт (файл $rsub) также сохранен в UTF-8. Но если в нем не указать use utf8, то Perl его кодировку интерпретирует не как UTF-8 и кириллица (строковые константы) нечитаемая, в вызываемом файле также нужно использовать use utf8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 12:18 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Обнаружил такой баг. У меня скрипты сохранены в UTF-8, в основном скрипте указано use utf8. Вызываемый скрипт (файл $rsub) также сохранен в UTF-8. Но если в нем не указать use utf8, то Perl его кодировку интерпретирует не как UTF-8 и кириллица (строковые константы) нечитаемая, в вызываемом файле также нужно использовать use utf8. Ну так исправь свою ошибку и укажи use utf8 и в вызываемом файле тоже - на каком основании интерпретатор должен сделать предположение об utf-8 природе отдельно компилируемой единицы? ( хотя пару лет назад читал, что таким основанием может стать метка BOM в начале файла и даже проверил под виндусом - тогда не сработало ). а вот Код: perl 1. должен по-моему сработать и без доп. use utf8 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 17:27 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
volodin661на каком основании интерпретатор должен сделать предположение об utf-8 природе отдельно компилируемой единицы? Я это предположил из-за общего адресного пространства и областей видимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 19:15 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
Alibek B., вот как раз лексических переменных вызываемый через do модуль не увидит, так что обмениваться значениями переменных нужно путём объявления этих переменных через our ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 19:42 |
|
||
|
(Perl) Как можно организовать include pl-файла?
|
|||
|---|---|---|---|
|
#18+
используя Benchmark , %ENV и заменив if на тернарный оператор в столбик: Код: perl 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. 29. 30. 31. 32. 33. 34. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 19:57 |
|
||
|
|

start [/forum/topic.php?fid=23&fpage=91&tid=1462972]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
3ms |
| others: | 259ms |
| total: | 416ms |

| 0 / 0 |
