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

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


Темы - Phoinix

Страницы: [1] 2 3 ... 7
1
Perl / Кто-нибудь может объяснить?
« : 17 Ноября 2006, 21:11:38 »
> perl -e \'print ($i = 1, $i = 2, $i = 3, "\\n")\'
333
>

???

2
Есть задача подключиться к БД на удаленном сервере. На удаленном сервере подключаться к Базе можно только с localhost, но есть доступ по ssh...
В ручную туннель получается создать, и все замечательно работает, но возможно ли его создать с помощью Perl?
Сервера оба не мои, поэтому настраивать их несколько проблематично, но модули установить возможно...

3
Perl / эффективность использования eval?
« : 09 Декабря 2005, 13:31:19 »
Есть основной скрипт по размеру не очень большой, который в зависимости от режима подключает определенные модули как внешние процедуры (для каждого режима свой), таких модулей достаточно много, но во время работы используется только один из них. Но, при компиляции скрипта, естественно все модули подгружаются и тоже компилятся.

Все режимы работы скрипта у меня в отдельных процедурах, поэтому я весь код процедур перенес в хеш и добавил процедуру AUTOLOAD, которая компилит процедуры через eval по мере обращения к ним. Так же я поступил и с методами модулей...

Вопрос: Насколько эффективно использование такой схемы, для уменьшения затрат ресурсов системы и увеличения скорости работы?
С одной стороны, подгружается и компилится меньше модулей, соответсвенно общий объем памяти меньше, но с другой - происходит постоянное переключение компилятор<->интерпритатор...
Разные источники говорят по-разному...

4
Веб Сервера / Как подружить SSI с PHP?
« : 17 Октября 2005, 19:38:45 »
Требуется в страницы PHP внедрять SSI например:

...
Some PHP code
...
?>



...
Some PHP code
...
?>

Доступа к конфигу Apache нет, парсятся только .shtml

Когда в .htaccess прописываю строку:

AddHandler server-parsed .shtml .php

SSI в файлах .php обрабатывается нормально, но при этом сам php не выполнятеся...

Добавление строки:

AddType application/x-httpd-php .php

Никакого эффекта не дает...

Вообще возможно использование SSI между PHP кодом?


UPD: В принципе справился...
Просто вынес php код в отдельные файлы и подгрузил через SSI






5
Perl / Объединение хешей
« : 24 Марта 2005, 15:35:17 »
Интересно, а нет встроенного в perl решения по объединению хешей или только

Hash::Merge

или


sub merge_hash 
{

    
my (@hashes) = @_;
    
    
my %merge_hash;
    
    foreach 
my $ref (@hashes) {
        while (
my ($key$value) = each %$ref) {
            
next unless $value;
            
$merge_hash{$key} = $value;
        }
    }
    
    return \\%
merge_hash
    
}

6
Базы данных / PostgreSQL FOREIGN KEY + array
« : 23 Марта 2005, 14:06:30 »
Есть таблица категорий и талица фирм

CREATE TABLE "public"."firm_category" (
  "id" SERIAL,
  "name" VARCHAR(300) NOT NULL,
  "note" VARCHAR(150),
  CONSTRAINT "firm_category_pkey" PRIMARY KEY("id")
) WITHOUT OIDS;

CREATE TABLE "public"."firm_main" (
  "id" SERIAL,
  "category" INTEGER[],
  "name" VARCHAR(250) NOT NULL,
  "note" TEXT,
  CONSTRAINT "firm_main_pkey" PRIMARY KEY("id"),
) WITHOUT OIDS;

Одна фирма может относится к нескольким категориям поэтому поле category соответсвующей таблицы - массив

Так вот хотел прикрутить к этой (фирм) таблице внешний ключ, что бы автоматически обновлялись (удалялись) элементы массива.

Естественно при создании FOREIGN KEY выдало ошибку несоответсвие типов.

Возможно ли использовать внешний ключ, или же прийдется прикручивать Триггер?

И еще, существенна потеря производительности при выборке данных
...
firm_category.id = ANY (firm_main.category);
...

Если в обоих таблицах будет не более 4000-5000 записей
Или же все-таки использовать 3-ю таблицу для определения соотвествия и установить внешние ключи?

7
JavaScript & JScript / submit формы в таблице
« : 17 Марта 2005, 22:02:24 »
Возникла такая проблема: при onChange поля select, я делаю submit формы JavaScript






Вcе работает нормально, но когда я форму "запихиваю" в таблицу, выдает ошибку, что метод не поддерживается...

выносил тег
и за таблицу и в неё и между и (вместе с тегом закрытия), все одно, ошибка...

Как её можно обойти?
8
Хочется узнать мнение остальных специалистов о новом "велосипеде" на тему обработки данных из формы (+ URI и Cookies)

Модуль получился на редкость небольшой, но при этом не проиграл в функциональности:

package My::CGI;
use strict;
use IO::File;
our $VERSION = \'1.1.0\';

sub new {
    my ($self, %common) = @_;
    $self = {
             max_upload     => 262144,  # Default 256 Kb
             data           => {},
             cookies        => {},
             tmp            => {},
            };
    $self->{\'max_upload\'} = $common{\'MAX_UPLOAD\'} if $common{\'MAX_UPLOAD\'};
    $self = &_parse_common_data($self);
    bless $self;
    return $self;
}

sub param {
    my ($self, $param) = @_;
    unless ($self->{\'data\'}->{$param}) {return undef}
    my $data = $self->{\'data\'}->{$param};
    return wantarray ? (ref $data ? @$data : ($data)) : (ref $data ? $data->[0] : $data)
}

sub file {
    my ($self, $param) = @_;
    my $data;
    unless ($self->{\'tmp\'}->{$param}) {return undef}
    $data = IO::File->new($self->{\'tmp\'}->{$param});
    return $data
}

sub cookies {
    my ($self, $param) = @_;
    return $self->{\'cookies\'}->{$param} || undef;
}

sub _parse_common_data {
    my $self = shift;
    if ($ENV{\'QUERY_STRING\'}) {$self = &_parse_QUERY_STRING($self, \'GET\')}
    if (uc($ENV{\'REQUEST_METHOD\'}) eq \'POST\') {
        if(exists($ENV{\'CONTENT_TYPE\'}) && $ENV{\'CONTENT_TYPE\'}=~m|^\\s*multipart/form-data|i) {$self = &_parse_MultiPart($self)}
        else {$self = &_parse_QUERY_STRING($self, \'POST\')}
    }
    if ($ENV{\'HTTP_COOKIE\'} || $ENV{\'COOKIE\'}) {$self = &_parse_COOKIES($self)}
   
    return $self
}

sub _parse_QUERY_STRING {
    my ($self, $type) = @_;
    my $data;
    if ($type && $type eq \'POST\') {read(STDIN, $data, $ENV{\'CONTENT_LENGTH\'})}
    else {$data = $ENV{\'QUERY_STRING\'};}
    my @pairs = split(/[\\?\\&]/,$data);
    foreach (@pairs) {
        my ($param, $value) = split(\'=\',$_,2);
        next unless $param && $value;
        $param = URLDecode($param);
        $value = URLDecode($value);
       
        $self = &_include_data($self, $param, $value);
    }
    return $self
}

sub _parse_MultiPart {
    my $self = shift;
    if ($ENV{\'CONTENT_LENGTH\'} > $self->{\'max_upload\'}) {return}
    binmode STDIN; my ($spliter, $end, $data);
    read(STDIN, $data, $ENV{\'CONTENT_LENGTH\'});
    ($spliter, $end, $data) = $data =~m /^([^\\r\\n]+)([\\n\\r]+)(.*?)\\2\\1\\-\\-\\2*$/s;
    srand;
    foreach my $block (split($end.$spliter.$end, $data)) {
        my ($header, $content) = split($end.$end, $block, 2);
        my ($param, $data);
        foreach my $line (split(/($end)|(\\s*\\;\\s*)/,$header)) {
            my ($name, $value) = split(/\\=|\\:\\s/,$line, 2);
            if ($name eq \'name\') {($param) = $value =~/^\\"(.*)\\"$/}
            if ($name eq \'filename\') {($data) = $value =~/^\\"(.*)\\"$/}
        }
        if ($data) {
            $self->{\'data\'}->{$param} = $data;
            my $temp_file = \'./COME_\'.int(rand 100000).\'.tmp\';
            open (UPL, \'>\', $temp_file);
                binmode UPL;
                print UPL $content;
            close UPL;
            $self->{\'tmp\'}->{$param} = $temp_file;
        } else {
            $self = &_include_data($self, $param, $content);
        }
    }
    return $self
}

sub _parse_COOKIES {
    my $self = shift;
    my $cookies = $ENV{\'HTTP_COOKIE\'} || $ENV{\'COOKIE\'};
    foreach my $line (split(/\\;\\s*/,$cookies)) {
        my ($param, $value) = split(\'=\',$line, 2);
        next unless $param && $value;
        $self->{\'cookies\'}->{$param} = $value;
    }
    return $self
}

sub _include_data {
    my ($self, $param, $value) = @_;
   
    $value =~s /(\\x0d\\x0a)|(\\x0a\\x0d)/\\n/sg;
    if (exists $self->{\'data\'}->{$param}) {
        if (ref $self->{\'data\'}->{$param}) {push @{$self->{\'data\'}->{$param}}, $value}
        else {$self->{\'data\'}->{$param} = [$self->{\'data\'}->{$param}, $value]}
    } else {
        $self->{\'data\'}->{$param} = $value
    }
    return $self
}

sub URLDecode {my $s = shift; $s =~tr /+/ /; $s =~s /%([0-9A-Fa-f]{2})/chr(hex($1))/esg; return $s }

sub DESTROY {
    my $self = shift;
    foreach (values %{$self->{\'tmp\'}}) {unlink $_}
    return 1
}

1;


Работа с ним, практически как с CGI:

use My::CGI;
my $query = new CGI;
my $value = $query->param(\'param\');
my $filehandle = $query->file(\'param\');
my $cookies = $query->cookies(\'name\');

Что скажете?

9
Perl / Особый FILEHANDLE из метода объекта:
« : 03 Марта 2005, 16:52:42 »
Никак не могу сделать такую фичу как в модуле CGI, что если переданный параметр файл, то метод param возвращает открытый FILEHANDLE значение которого в скалярном контенте - имя файла:

Так, не получается (в упрощенном варианте, проверки вырезал):

sub get_file {
    no strict;
    my ($self, $name) = @_;
    ...
    my $value = $self->{\'files\'}->{\'name\'};
    ...
    open ($value, \'<\', $value);
    return $value
}

T.e. значение возвращается, но не как FILEHANDLE

Пробовал использовать IO::File, но тогда возвращается имя объекта, которое можно использовать как FILEHANDLE...

10
Перевожу один интернет магазин с PHP на Perl.

Все хорошо, но нужен совет:

При подтверждении окончательной формы в которую заносится номер кредитной карточки, запрос идет не на платежную систему, а на отдельный скрипт, который пересобирает заново запрос и отправляет куда нужно.
Единственно, чем примечателен скрипт, так принудительным указанием HTTP_REFERER.
Сама платежная система переадресует на другой (результирующий) скрипт магазина. В итоге, в качестве результата запроса первого скрипта выводится результат запроса второго скрипта после переадресации платежной системы.

IMHO довольно гемморно сделано. Тем более, что мне не нравится, так это возможность дублирования запроса к платежной системе.

Неужели настолько часто отсутсвует в заголовке HTTP_REFERER, что приходится делать подобную рокировку? (Платежная система не принимает запросы при отсутсвии рефера или его не соостветсвия)

11
Perl / Разница массивов
« : 22 Января 2005, 14:36:26 »
Есть дав массива:

@array1 = (\'1\',\'2\',\'3\',\'4\',\'5\',\'6\');
@array2 = (\'2\',\'4\',\'6\',\'7\',\'8\',\'9\');

Нужно получить элементы первого массива значения элементов которого, нет во втором (\'1\',\'3\',\'5\'). У меня получилось такое:

my @array3;

map {my $i = $_; push @array3, $_ unless grep {/$i/} @array2} @array1;

Но кажется я перемудрил... %)

Может можно проще (только не циклы)?

12
Nавигатор / [perl] Новый релиз Perl 5.8.6
« : 07 Декабря 2004, 13:30:25 »
Не смотря на то, что новый релиз еще не анонсирован на http://www.perl.org, его можно уже скачать:

http://cpan.org/src/README.html

13
Есть таблица:

table my_table
-------------------------
id - INT(11) - AUTO_INCREMENT,
name - VARCHAR(100),
rank1 - INT(11),
rank2 - INT(11),
rank3 - INT(11)
...

поля rank
  • - различные типы рейтинга, при выборке списка, я произвожу сортировку по рейтингу, но при этом рейтинг вычисляется по формуле:


SELECT id, name, (rank1/10 + rank2/5 + rank3) AS rank
FROM my_table
ORDER BY rank DESC
LIMIT 10

Объединять эти поля в одно - не нужно, мне нужны отдельные цифры.
Есть ли возможность создать индекс для ускорения расчета рейтинга для сортировки или все же прийдется создать поле rank_all котором будет обновляться при изменении одного из типов рейтинга?

Эксперименты проводить пока не могу - слишком мало записей, поэтому вывод результата всегда быстрый... :)

14
Делаю в начале скрипта, одну и те же опрерации, поэтому что бы не мучатся вынес их в модуль, а что бы не передавать переменные по десять раз, использовал такой прием:

модуль:

package WM4
::Action;
use 
strict; use DBI; use Storable;
require 
Exporter;
our @ISA qw(Exporter);
our $VERSION = \'1.00\';

sub start_script {
     eval {$::site_vars = retrieve(\'./../config/variables.conf\')} || ... ;
     $::dbh = \'DBI:mysql:database=\'.$::site_vars->{\'MysqlBase\'} ... ;     
...


и просто вызываю в скрипте:
use vars \'$site_vars\', \'$dbh\', ... ;
use WM4::Action; WM4::Action->start_script;

Но когда попытался, такой финт сделать с использованием mod_perl - ошибки не дало, но при этом в модуле не присваивались никакие значения...

Интересно, что даже указание переменных как глобальных, не дало никакого результата... они постоянно "теряются"...

Объявление переменных, и их инициализация непосредственно в конфиге Apache, тоже неичего не принесло положительного...

Просто не хочется возвращать из модуля конкретные значения переменных, т.к. их инициализируется порядка 9-15 штук...


mod_perl 1.29
Apache 1.3.29... (хм, надо бы обновить...)
Perl 5.8.4

15
Perl / XBase - вставить строку
« : 25 Октября 2004, 10:36:21 »
Доброго времени суток!!!

Понадобился скрипт для переноса данных из MS Access в DBase.

Для подключения к MS Access использовал DBD::ODBC
Для подключения к DBase использовал DBD::XBase

С MS Access базой - проблем никаких нет, а вот с DBase возникла проблема при вставке строки. Выборка обновление и удаление работают на ура...

И самое интересное, что просматривая базу в текстовом режиме, видно что эти данные он записал, но в самой базе их нет...

Попробовал зацепиться к DBase через, ODBC... Insert заработал, но при этом потерялась кодировка, т.е. все кириллические символы стали знаками "?"
Использование Unicode::String - тоже результатов не дало... вопросы пропали, но текст русский не появился...

Есть еще зверь такой XBase, но дошел только до получения параметров таблицы...

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