Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Последовательный запуск двух функций в скрипте, Проблемы новичка мигрирущего с awk 
V
    Опции темы
solarmyth
Дата 17.3.2011, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.3.2011

Репутация: нет
Всего: нет



Здравствуйте.

В течение долгого времени я пытался обрабатывать html-файлы при помощи языка awk. Потратив год времени и написав 400строчный код (не отличающийся особой читаемостью) я начал переходить на perl, пойдя светлой дорогой тов. Уолла.
В процессе перехода обнаружилось, что awk-овые привычки к реализации программ остаются, но в perl не работают, а учебник Рендела и Шварца не даёт советов по моей вымученной ситуации.

Суть проблемы следующая - я пытаюсь последовательно запустить  две функции, дабы работать с возвращаемыми ими массивами.

Первая функция:


Код

use 5.010;
use strict;
my @numbers = '';# Объявляем пустой массив
my $num = '';
#Поиск номеров параграфов в html-файлов
sub paragraf{
    while(<>){
        if (m/(\§.*?\<a\sname=\")(?<num>.*?)(\".*$)/){
            $num = $+{num};
            push (@numbers, $num);
        }
    }
}



Вторая функция
Код

my @morph_lines = //;
#Реализуем функцию, выделяющие сами морфемы
sub morph{
    while (<>){
        if (m/(Глаголы с преф\.|Глаголы с суф\.)(.*?)(называют.*|имеют.{1,30}знач.*|мотив)/ig){
            if ($_){
                push (@morph_lines, $2)
            };
        }
         @morph_lines;
    }
}

Т.е. первая функция выдаёт массив с номерами параграфов, а вторая вырезает нужные мне строчки. По отдельности обе функции работают, в режиме

perl perl_script.pl Verbs.html

Однако, по awk-шному образцу запустить их просто написав
Код

&paragraf();
&morph();

foreach(@numbers){
        say "$_";
}

foreach(@morph_lines){
        say "$_";
}


не получается, т.к. программа, по всей видимости, уходит в бесконечный цикл и её приходится выключать Ctrl-C.
Если одну из функций не запускать то всё работает.

В связи с этим вопрос - как можно запустить несколько функций подряд? 
Или сама реализация методом "запусти эту, эту и эту функцию, а потом сделай с результатами то-то" неверна и еретична?
Буду благодарен за советы и подсказки.

PM MAIL   Вверх
arto
Дата 17.3.2011, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



первой функцией вы выэитываете весь входной поток.

либо читайте в промежуточный массив и его обрабатывайте функциями, либо совместите всю обработку в одной.

Добавлено через 1 минуту и 7 секунд
ну и, естественно, проще использовать какой-либо парсер хтмля
PM MAIL ICQ   Вверх
solarmyth
Дата 17.3.2011, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 17.3.2011

Репутация: нет
Всего: нет



arto, большое Вам спасибо! 
Вопрос решён.

З.Ы.
В переписанном коде функций должно быть значительно больше, и основную проблему представляют не теги html (хотя и они несколько хаотичны в обрабатываемом документа), а нерегулярности в описаниях на русском языке.  Но perl-парсеры html я поищу. smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0917 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.