Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - xmolex

Страницы: [1] 2 3 ... 5
1
Perl / mod_perl и проверка модуля
« : 22 Октября 2008, 16:21:51 »
Большое спасибо, остановился на следующем варианте:
#!/usr/bin/perl -w
use strict;
use 
CGI qw(:all);

BEGIN
 
{
   
unshift @INC$ENV{DOCUMENT_ROOT};
 }

if (eval (
"use lib::engine; 1"))
  {
    
my$text main();
    print 
header;
    print 
"|$text|";
  }
else
  {
    print 
header;
    print
"Don\'t open module \'lib/engine.pm\' in \'$ENV{DOCUMENT_ROOT}\'";
  }

2
Perl / mod_perl и проверка модуля
« : 21 Октября 2008, 12:36:25 »
Здравствуйте. Знакомлюсь с mod_perl и в связи с этим возник вопрос, как правильно сделать проверку возможности подгрузить модуль.
Есть скрипт bee.cgi, к которому обращаются через веб. Есть модуль engine.pm, который находится в поддиректории lib/, т.е. путь относительно bee.cgi ./lib/engine.pm. Хочется сделать грамотную обработку модуля и если его не возможно загрузить, чтобы в браузер вывелось мое сообщение об ошибке. Сейчас у меня есть рабочий вариант, но выглядит он крайне непрофессионально:
#!/usr/bin/perl -w
use strict;
use 
CGI qw(:all);

BEGIN
 
{
   
unshift @INC$ENV{DOCUMENT_ROOT};
 }

BEGIN {
 eval { require 
lib::engine; };
 if ($@)
  {
    print 
header;
    print
"Don\'t open module \'lib/engine.pm\' in \'$ENV{DOCUMENT_ROOT}\'";}
 else
  {
    use 
lib::engine;
    
my$text main();
    print 
header;
    print 
"|$text|";
  }}

Как видите приходится использовать два блока BEGIN. Если обойтись одним блоком, то в @INC не добавляется моя директория. Если второй блок просто убрать, то будет ошибка, т.к. "use lib::engine" выполняется на этапе компиляции (его может и не быть), а проверка на этапе выполнения. Повторюсь, пример рабочий, но хотелось бы чистоты и этичности кода. У меня не получилось добиться этого, как я не пытался.

3
Perl / open2 для Win
« : 30 Мая 2008, 14:45:06 »
Понимаете, дело в том, что мне нужно передать поток так, чтобы его потом не нужно было обрабатывать вторым скриптом.
Вообще, задача стоит следующая:
Есть скрипт человека. Есть мой скрипт. Веб сервер запускает мой скрипт, мой скрипт ловит переменные окружения. Мой скрипт получает данные от браузера (GET или POST). Мой скрипт переводит данные в POST, добавляя свои данные. Потом весь этот сформированный пакет я посылаю скрипту человека, не забывая подправить переменные окружения под метод POST. Тоесть я своим скриптом запускаю скрипт человека и во входной поток посылаю мой сформированный POST пакет, а человек уже работает с данными, как буд-то получил данные методом POST.

P.S. в моем файле кавычек не было, он так на переход строки среагировал.

4
Perl / open2 для Win
« : 30 Мая 2008, 08:25:17 »
Хм, зачем ругаться? Если вы про не использование прагмы strict или про не объявление переменных, так это сделано для уменьшения сообщений на форуме, просто чтобы отобразить суть.
Что касается вашего примера, то он работоспособен, но лично у меня он не сработал до конца.
Попробуйте передать текстовый файл, где существуют переходы строки и символы " (двойной кавычки). Лично на win платформе у меня передалась только первая строка.

5
Perl / open2 для Win
« : 29 Мая 2008, 09:55:04 »
Хорошо. Конкретизирую.
Имеется файл 1.bin. Я хочу его открыть первой программой и передать второй.
##################################
# код первой программы
##################################
#!/usr/bin/perl
open(BIN, "1.bin");
$make = $_ foreach ();
close(BIN);
$feedback = qx(2.pl $make);
print $feedback;

##################################
#  код второй программы
##################################
#!/usr/bin/perl
while (<>) { $temp .= $_; }
if ($temp ne "") {print "OK";} else {print "NO";}

# конец программ
Дело в том, что когда я передаю $make, то это передается и считается командами оболочки, а не входным потоком запускаемой программы. В любом случае, если вы возьмете какой-нибудь avi файл к примеру и попытаетесь передать его, то получите кучу ошибок.
Пояснить командной оболочке, что вы передаете входной поток можно указав символ &, вот только из программы добиться правильного его использования у меня не вышло.

6
Perl / open2 для Win
« : 20 Мая 2008, 23:08:27 »
Все верно, только мне мультиплатформенность нужна.

7
Perl / open2 для Win
« : 20 Мая 2008, 16:53:32 »
Мне нужно получать не аргументы, а полностью входной поток. К примеру, я хочу первым скриптом принять данные отправленные методом POST и передать их второму.

8
Perl / Программисты, где вы?
« : 16 Мая 2008, 15:46:38 »
Ставишь ActivePerl в C:\\usr
Ставишь Apache2 в c:\\usr\\local
Ставишь Mysql куда хочешь.
Включаешь интернет. Открываешь консоль (cmd) и пишешь ppm, затем ввод.
install DBI
install DBD-mysql
Консоль можно закрыть.
Теперь идешь и правишь /usr/local/apache2/conf/httpd.conf
DocumentRoot "C:/usr/public_html" (перед этим создай эту директорию)

ScriptAlias /cgi-bin/ "C:/usr/public_html/cgi-bin/"
AddHandler cgi-script .pl
Я тут написал как должно быть у тебя в конфиге.
Теперь перезапускаешь apache и идешь в C:\\usr\\public_html
Создаешь .htaccess и вставляешь в него
DirectoryIndex index.pl
Options ExecCGI

Все. Суешь index.pl в c:\\usr\\public_html и вводишь в браузере http://localhost

9
Perl / Программисты, где вы?
« : 11 Мая 2008, 21:28:38 »
Я почитал, но не думаю, что те кто раньше писал на Perl перешел на PHP к примеру. Спорить не буду, что для веб разработок легче использовать тот же самый парсер. Но Perl универсален, поэтому удобен. Мне вот больше кажется, что просто люди изменили своему обычаю заходить на этот форум.

10
Perl / Программисты, где вы?
« : 11 Мая 2008, 10:18:39 »
Извините за не особо интересную тему, но вот меня мучает вопрос: это либо этот форум сдал свои позиции и его теперь мало посещают, либо просто Perl умерает? Просто помню времена, когда было как-то больше людей на форуме. Можно было задать вопрос и услышать комментарии многих людей, а сейчас ... За две недели каждодневного посещения этого форума я увидел всего 7 разных людей. Как-то мало совсем.

11
Perl / Взаимодействие двух скриптов
« : 11 Мая 2008, 10:12:53 »
Лучше всего в этом случае использовать наверное сетевой обмен. Но можно еще и это почитать - http://www.balashov.san.ru/~sergey/design/perl/chapter16/16_2.htm

12
Perl / open2 для Win
« : 08 Мая 2008, 15:35:48 »
На данный момент нашел опять таки кривое решение для Win и Mac платформы (возможно и для других, просто нет возможности проверить). Поток который мне нужно направить во вторую программу записываю в файл, например в 1.txt.
А потом выполняю $text = `perl prog2.pl < 1.txt`;
Работает, но всеже хочется отойти от использования промежуточных файлов. Поэтому буду очень благодарен за полезные мысли.

13
Perl / массив переменных из HTTP
« : 07 Мая 2008, 17:15:45 »
$text = $ENV{\'QUERY_STRING\'};
$text =~ s/all_id=//g; # если "all_id=" есть конечно
$text =~ s/&//g;
$text =~ s/id=//g;

print $text;

14
Perl / open2 для Win
« : 07 Мая 2008, 17:07:20 »
Здравствуйте. Появилась проблема, которую я не могу решить самостоятельно, поэтому решил обратиться в качестве последней надежды к вам.
Имеется два скрипта. Первый скрипт запускает второй, передает ему во входной поток данные, ждет, когда данные обработаются и потом пытается получить отработанный результат.
Используя IPC::Open2 я добиваюсь нужного результата, но мне нужно, чтобы была мультиплатформенность, а он только на UNIX системах работает. Раньше я решал эту проблему для других систем просто создавав первым скриптом темповый файл, записывал туда данные и запускал второй скрипт с именем файла в параметре. Некрасиво, а что делать? Но тут возникла необходимость ловить данные POST. А это напрямую входной поток. Как я вторым скриптом смогу прочитать данные отправленные методом POST, если у меня там только имя файла. Вообщем, нужно писать во входной поток. Искал решения две недели, но похоже его просто нет. Я просто в отчаянии и в качестве последней надежды решил попросить помощи здесь.
Нашел интересную тему: http://forums.webscript.ru/showthread.php?threadid=25102. В ней советуют использовать конструкцию $text = `1.pl &`; и впринципе такая конструкция могла бы решить проблему, но как после & передать данные? Я могу их ввести только с клавиатуры.
Вообщем, очень жду совета.

15
Perl / SQL запрос (обработка строки)
« : 26 Февраля 2008, 09:34:11 »
Цитировать
vladsu:
http://search.cpan.org/~jzucker/SQL...b/SQL/Parser.pm

Большое спасибо за модуль. Для ознакомления очень полезен.
Работа ведется.

Страницы: [1] 2 3 ... 5