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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 3 вопроса по Perl 
:(
    Опции темы
Сергей
  Дата 6.8.2002, 22:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте.
1. Следуя инструкции по установке интерпритатора ActivePerl в
меню>сервис>настройки на вкладке "разное" в узле Perldoc оказывается
невозможным ввести путь файла "perldoc.bat".
2.Я написал программу:
#! perl -w
print `time`;
При её запуске с помошью интерпритатора ActivePerl отображается пустое окно
интерпритатора, а при нажатии Enter мелькает "текущее время" и программа(окно
интерпритатора)мгновенно закрывается.
3.А при запуске той же написанной мной программы с помошью встроенного
отладчика на в окне отладчика загорается "00:00:01.774". А после закрытия окна
отладчика программа APerl не желает закрываться.
Помогите!!!!!
Заранее спасибо, с уважением Сергей.
  Вверх
Wowa
Дата 6.8.2002, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Если тебе перл нужен для написания программ под веб, то советую поставить веб-сервер. Будет намного удобнее и приятнее работать.

А скрипты вообще в браузере довольно удобно смотреть.
PM WWW   Вверх
Александрр
Дата 11.6.2005, 10:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











здравствуйте! Я только начал изучать перл и у меня возник вопрос: а что бы такое написать? Не подскажите люди добрые какие-нибудь задачки, что бы я над ними посидел подумал, но написал. Может подскажите с чего вы начинали. smile
  Вверх
korob2001
Дата 11.6.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Ну если только начал, попробуй написать программу "Телефонную книгу", которая запрашивает у юзера номер телефона или его имя, находит его данные и выводит данные в STDOUT.

Условия:
1. информация должна храниться в DBM файле.

2. если вместо имени или телефона введена строка quit или exit, программа должна завершить свою работу.

3. если вместо имени или телефона введёна строка add, то программа должна запрашивать сначала имя, а затем его номер телефона и сохранять всю эту инфу в файл, после чего опять ожидать ввода.

4. если вместо имени введена строка, за которой следует символ *, то программа должна найти всех пользователей имя, фамилия или номер телефона которые начинается с указанной строки, которая находится перед звёздочкой. Например если ввели такую строку 342*, то программа должна вывести все телефоны и ихвладельцев начинающиеся с этих цифр.

Удачи.

Это сообщение отредактировал(а) korob2001 - 11.6.2005, 13:22


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Psixolog
Дата 30.10.2005, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



=)) cool

Для новечка не слишком сложнO?


PM MAIL WWW   Вверх
korob2001
Дата 30.10.2005, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Что именно? Телефонная книга?

При старте программы программа выводит в STDOUT приветствие и возможные команды.

При вводе команды add, программа запрашивает имя, телефон, затем сохраняет данные в DBM файл где телефон - это ключь, а имя - это значение.

При вводе команды all показывает все телефоны в отсортированном порядке по именам.

При вводе search ....., где точки это искомое слово или часть слова или часть номера телефона. После программа находит все соответствия и выводит их в STDOUT, опять же в отсортированном порядке.

При вводе команды quit, программа прощается с пользователем и завершает свою работу.

Вот код:
Код

#!/usr/bin/perl -w
use strict;
# Имя файла, в котором будут сохраняться данные
my $file = "phone_data";
# Этот хеш будет связан с DBM файлом
my %dbm = ();

# Открываем DBM файл
dbmopen(%dbm, "$file", 0644) or die "Can't open data file: $!\n";

# Эта подпрограмма будет создавать нужный заголовок
sub print_title {
    # Генерирует заголовок
    my $check = shift;
    my $title = " $check of " . localtime() . " ";
    print "\n";
    # Выводим заголовок
    print "=" x 3;
    print $title;
    print "=" x (79 - 3 - length($title)), "\n";
}

# Эта подпрограмма будет выводить отсортированные
# список всех данных из телефонной книги. Здесь я немного усложнил сортировку,
# если имена одинаковые, тогда сортировка будет по номеру телефона.
sub show_all {
    foreach my $phone ( sort { $dbm{$a} cmp $dbm{$b} || $a cmp $b } keys %dbm ) {
               print "$dbm{ $phone }\t$phone\n";
    }
}

# Эта подпрограмма будет искать пользователя по имени или по номеру телефона
# и в отсортированном порядке выводить данные в STDOUT, причём найденные части
# будут захвачены в треугольные скобки.
sub print_search {
    my $s = shift;
    foreach my $phone ( sort { $dbm{$a} cmp $dbm{$b} || $a cmp $b } keys %dbm ) {
            my( $ph, $nm ) = ($phone, $dbm{$phone});
            if ( $ph =~ s/($s)/<$1>/ or $nm =~ s/($s)/<$1>/i ) {
                 print "$nm\t$ph\n";
            }
    }
}

# Подпрограмма запрашивает имя пользователя и телефон, затем сохраняет их в базу
sub add_item {
    my( $name, $phone ) = ();
    while (1) {
           print "Please enter user name or \"back\" for return to general menu: ";
           chomp($name = <STDIN>);
           return if $name =~ /^back$/i;
           last if $name =~ /\w+/;
    }

    while (1) {
           print "Please enter phone number of $name or \"back\" for return to general menu: ";
           chomp($phone = <STDIN>);
           return if $phone =~ /^back$/i;
           last if $phone =~ /^\d+$/;
    }

    if ( exists $dbm{ $phone } ) {
         print "This phone number is exists in data base\n";
    } else {
         print "Phon number $phone of $name was success added in data base\n";
         $dbm{ $phone } = $name;
    }
}

# Подпрограмма удаляет запись из файла с заданным телефонным номером
sub remove_item {
       my $phone = shift;
       if ( exists $dbm{ $phone } ) {
            delete $dbm{ $phone };
            print "\nNumber $phone was successful removed from data base.\n";
       } else {
            print "\nNumber $phone is not exists.\n";
       }
}

# Начинаем бесконечный цикл, для запроса команд
while (1) {
       print "\nPlease enter command \"add\", \"all\", \"search ...\", \"delete\" or \"quit\"\n";
       print "add - for add new number in data base\n";
       print "all - for get list of all numbers from data base\n";
       print "search [substring] - for search user or phone info\n";
       print "delete [phone num] - for delete phone number from data base\n";
       print "quit - for exit\n";

       chomp(my $cmd = <STDIN>);

       # Если введена команда quit, завершаем бесконечный цикл
       last if ($cmd =~ /^quit$/i);

       # Если введена команда all выводи соответствуюший заголовок и
       # запускаем соответствующую подпрограмму.
       if ( $cmd =~ /^all$/ ) {
            print_title("All phonebook");
            show_all();
       }

       # Если введена команда search и за ней искомая часть, выводим
       # заголовок и выводим отсортированные искомые данные
       if ( $cmd =~ /^search/ ) {
            if ( my($search) = $cmd =~ /^search\s+(\w+|\d+)$/ ) {
                 print_search($search);
            } else {
                 print "\nFor search must by search substring\n";
                 print "Forexample so: search 0497\nor so: search Pupk\n";
            }
       }

       # Если была получена команда delete [phone num], вызываем соответствующую
       # подпрограмму
       if ( $cmd =~ /^delete/ ) {
            if ( my($ph) = $cmd =~ /^delete\s+(\d+)$/ ) {
                 remove_item($ph);
            } else {
                 print "\nFor delete must by phone number after delete\n";
                 print "Forexample so: delete 3545512\n";
            }
       }

       # Если получена команда add, запускаем соответствующую подпрограмму
       add_item if $cmd =~ /^add$/i;
}

# Прощаемся с пользователем и завершаем выполнение программы
dbmclose(%dbm);
print "\nBye bye...\n";
exit 0;

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


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


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

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


 




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


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

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