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

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


Темы - xmolex

Страницы: [1]
1
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" выполняется на этапе компиляции (его может и не быть), а проверка на этапе выполнения. Повторюсь, пример рабочий, но хотелось бы чистоты и этичности кода. У меня не получилось добиться этого, как я не пытался.

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

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

4
Perl / SQL запрос (обработка строки)
« : 22 Февраля 2008, 12:05:47 »
Здравствуйте уважаемые. Пишу серьезный проект и понадобилось сделать небольшой модуль понимающий урезанный SQL для легкой замены баз данных.
Требуется разобрать команду:
SELECT `name` FROM table WHERE name = 1
Вы понимаете, что name может быть и без кавычек, а 1 может быть как в одинарных, так и в двойных кавычках, а также могут использоваться экранированные кавычки. Т.к. версия облегченная, то OR и т.п. использоваться не будет. Сделал разбор строки нижеуказанным кодом. Хотелось бы спросить у других, кто что думает. Можно ли облегчить алгоритм? Может кто знает другой алгоритм? Может как-то можно сэкономить ресурсы при выполнении?


$command = "SELECT `name` FROM table WHERE name = 1 ";
# разобрал с помощью регулярок. В $temp3 попало все после WHERE
          my$length = length($temp3);
          my($i,$flag,$pos_beg,$pos_end,$pos_beg_val,$pos_end_val);
          my$step = 0;
          my@temp3 = split(/|/, $temp3);
          for ($i = 0; $i < ($length+1); $i++)
           {
             if ($step == 0)
               {
                if ($temp3[$i] ne " ")
                 {
                   if ($temp3[$i] eq "`")
                     {
                       $flag = "`";
                       $pos_beg = $i;
                       $step = 1;
                       next;
                     }
                   else
                     {
                       $flag = " ";
                       $pos_beg = $i-1;
                       $step = 1;
                       next;
                     }
                 }
               }
             if ($step == 1)
               {
                if ($flag eq "`")
                  {
                    if ($temp3[$i] eq "`" && $temp3[$i-1] ne "\\\\")
                      {
                        $pos_end = $i;
                        $step = 2;
                        next;
                      }
                  }
                elsif ($flag eq " ")
                  {
                    if ($temp3[$i] eq " " || $temp3[$i] eq "=")
                      {
                        $pos_end = $i;
                        $step = 2;
                        next;
                      }
                  }
                }
             if ($step == 2) {if ($temp3[$i-1] eq "=") {$step = 3;}}
             if ($step == 3)
              {
                if ($temp3[$i] ne " ")
                 {
                   if ($temp3[$i] eq "\'")
                     {
                       $flag = "\'";
                       $pos_beg_val = $i;
                       $step = 4;
                       next;
                     }
                   elsif ($temp3[$i] eq "\\"")
                     {
                       $flag = "\\"";
                       $pos_beg_val = $i;
                       $step = 4;
                       next;
                     }
                   else
                     {
                       $flag = " ";
                       $pos_beg_val = $i - 1;
                       $step = 4;
                       next;
                     }
                 }
              }
             if ($step == 4)
              {
                if ($flag eq "\'")
                 {
                   if ($temp3[$i] eq "\'" && $temp3[$i-1] ne "\\\\")
                     {
                       $pos_end_val = $i;
                       last;
                     }
                 }
                if ($flag eq "\\"")
                 {
                   if ($temp3[$i] eq "\\"" && $temp3[$i-1] ne "\\\\")
                     {
                       $pos_end_val = $i;
                       last;
                     }
                 }
                elsif ($flag eq " ")
                 {
                   if ($temp3[$i] eq " " || $temp3[$i+1] eq "")
                    {
                      $pos_end_val = $i;
                      last;
                    }
                 }
              }
           }          
          my$temp4 = substr($temp3, $pos_beg_val+1, ($pos_end_val - ($pos_beg_val+1)));
          $temp3 = substr($temp3, $pos_beg+1, ($pos_end - ($pos_beg+1)));
# в $temp3 у нас название аргумента, в $temp4 значение аргумента.

5
Здравствуйте. Прошу помочь с написанием правильного выражения. Пишу на Perl, но думаю, что правильнее задать вопрос в этом разделе.
Имеется строка:
`name`=\'value\',  `name2`   =    \'value , \\\'  value\'
Как я могу вырезать все пробелы, кроме тех которые заключены между ` или \' Перепробовал уже массу вариантов, но находятся случаи, при которых работа будет выполнена не верно. Очень надеюсь на помощь.

6
Perl / $$$
« : 29 Июня 2007, 17:25:46 »
Скажите уважаемые, а что сие значит: $$$a. Просто как-то проходил тест и был вопрос с куском кода в котором было сие. Извините, если вопрос ламерский, но узнать очень хочется.

7
Perl / perl и база 1C
« : 16 Мая 2007, 13:28:04 »
Здравствуйте. Собственно вопрос, а есть ли модули позволяющие работать с базой 1С или это не реально? Может кто подскажет где почитать или у кого опыт был?

8
Perl / Параметр T и LWP::Simple
« : 21 Ноября 2006, 18:23:29 »
Приветсвую. Возможно ли как-то обойти ограничение? LWP::Simple скрипт нормально подгружает, а вот LWP/Simple.pm сам пытается подгрузить IO/Socket.pm и не может. Почему, ведь в @INC прописаны пути D:/usr/lib и D:/usr/site/lib? Может я что-то не понятно спросил? Вы тогда переспросите. Уж очень интересно. Может в @INC нужно полный путь до модуля прописать?

Вот лог сервера:
[Tue Nov 21 18:04:57 2006] [error] [client 127.0.0.1] Can\'t locate IO/Socket.pm in @INC (@INC contains: D:/usr/lib/LWP/Simple.pm D:/usr/site/lib/LWP/Simple.pm) at D:/usr/site/lib/LWP/Simple.pm line 160, line 8.

9
Здравствуйте. Подскажите как при помощи регулярных выражений обнаружить конструкцию вида: (не число и не текст)переменная(не число и не текст). Сколько варианто в не пробовал - не хочет работать? Может вы подскажете.

10
Perl / процессы в windows
« : 20 Июля 2006, 18:50:43 »
Опять флужу на вашем форуме, но найти ничего хорошего не могу. Можно ли средствами perl получить список процессов в windows? Я знаю есть модуль Proc-ProcessTable, но он вроде на Windows не работает.

11
Perl / Поиск (определение контента)
« : 12 Июля 2006, 18:16:38 »
Здравствуйте уважаемые коллеги.
 Работаю сейчас над разработкой поисковой машины. Когда анализируешь страницы на ссылки, попадаются адреса скриптов, которые кидают тебя на скачивание файлов. Но качать файлы программа не должна. Существует ли какой-нибудь метод для определения, что мы качаем текст (html) или бинарник?
Не знаю даже где искать (наверное слова не те подобрал для поисковика), может кто ссылочку подкинет или опытом поделится. Заранее благодарен.

12
Perl / print header
« : 27 Апреля 2006, 14:23:18 »
Здравствуйте. Хочется узнать, можно ли когда выводишь заголовок, явно указать в какой он кодеровке. Сделать что-то вида print header(charset->windows1251). Просто по умолчанию выводится iso, а как поменять не нашел. Даже в мане не нашел. Может кто знает.

13
Perl / chmod
« : 11 Апреля 2006, 13:49:02 »
Здравствуйте. Возникла проблема. Я из скрипта получил три различных значения, три числа. (они нужны для изменения прав доступа).

Собрал в одну переменную
$temp = "0".$temp1.$temp2.$temp3;

Пытаюсь, поменять права
chmod ($temp, "test.txt");

И ничего не происходит или права меняются на совершенно левые. Я так понял, что $temp считается как строка и из-за этого глюки.

Набрал простой тестовый скриптик
#!/usr/bin/perl
use CGI qw(:all);
print header;
$q = "0666";
$w = "index.pl";
chmod($q, $w);
print "$q $w";

Когда $q = "0666"; - не работает
Когда $q = 0666; - все работает

Что можно сделать, чтобы работало, ведь данные я получаю из браузера?

14
Perl / Информация о файле
« : 10 Апреля 2006, 10:53:12 »
Здравствуйте уважаемые. Поискал по интернету. Ничего полезного не нашел. Может вы подскажете. Вопрос такой: каким способом можно узнать имя владельца и группу? Как я понял, благодаря stat можно узнать только uid,gid. А нужны имена. Заранее благодарен.

Страницы: [1]