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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нужно написать 2 программки на perl 
:(
    Опции темы
scion
Дата 10.6.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Прошу помочь(кто чем может) с реализацией:

1.       Реализовать набор функций для работы с временными файлами. Первая функция должна создавать
временный файл и сохранять его имя в указанной переменной, вторая удалять его. Временные файлы
должны удаляться даже если выполнение скрипта завершено принудительно или в результате ошибки.
Если файл был создан, но не удален, то в конце работы скрипта должно выводится предупреждение

 
2.       Реализовать функцию, которая проверяет, что все переменные из списка переданных ей установлены.
Количество параметров не фиксированное.

пример вызова:
SOME_VARIABLE=Test
CheckVariables SOME_VARIABLE SOME_OTHER_VARIABLE

Вывод:
SOME_OTHER_VARIABLE not assigned
PM MAIL   Вверх
ginnie
Дата 10.6.2009, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



scion, рекомендую следующий алгоритм:

1. Подумать и описать словами действия, которые будет выполнять программа
2. Заменить словестные описания блоками кода на Perl
3. Проверить работоспособность кода (на тестовых примерах)
4. Если что-то сделать не получается, задать в форуме конкретный вопрос.


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
sir_nuf_nuf
Дата 10.6.2009, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



1) Все уже сделано, до нас:
File::Temp
2) А вы знаете что такое perl ?
есть встроенная функция - defined
Код

my $a = "3"
print defined $a ? "OK" : "Not defined";



--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
ginnie
Дата 10.6.2009, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



sir_nuf_nuf, по второй задаче, мне кажется, что надо определить "установлены ли указанные переменные окружения".

Это сообщение отредактировал(а) ginnie - 10.6.2009, 16:57


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
sir_nuf_nuf
Дата 10.6.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ginnie @  10.6.2009,  16:57 Найти цитируемый пост)
sir_nuf_nuf, по второй задаче, мне кажется, что надо определить "установлены ли указанные переменные окружения".

ооо.. это в корне меняет дело. По этой теме уже можно писать научную работу =)


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
KSURi
Дата 10.6.2009, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 smile 
The Feynman Problem-Solving Algorithm:
  • write down the problem;
  • think very hard;
  • write down the answer.



--------------------
Died at Life.pl line 21
PM Jabber   Вверх
ginnie
Дата 10.6.2009, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

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



KSURi, ты пропустил важные детали:

Автор: записывает проблему
Посетители форума: старательно обдумывают варианты решения
KSURi: пишет решение (раньше всех и получает разные бонусы)  smile 

Это сообщение отредактировал(а) ginnie - 10.6.2009, 18:35


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
scion
Дата 12.6.2009, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(sir_nuf_nuf @ 10.6.2009,  16:54)
1) Все уже сделано, до нас:
File::Temp
2) А вы знаете что такое perl ?
есть встроенная функция - defined
Код

my $a = "3"
print defined $a ? "OK" : "Not defined";

за темп спс.
то что нужно. 

PM MAIL   Вверх
scion
Дата 12.6.2009, 03:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



#!/usr/bin/perl
#Create temp file;
use File::Temp qw/ :POSIX /;
  $file = tmpnam();
  $fh = tmpfile();
($fh, $file) = tmpnam();

 while (1) {};
END { unlink($file) or die  "Couldn't unlink $file : $!"}

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

PM MAIL   Вверх
KSURi
Дата 12.6.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Установите обработчик для SIGINT (^C)


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
scion
Дата 12.6.2009, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(KSURi @ 12.6.2009,  12:16)
Установите обработчик для SIGINT (^C)

но это не правильно. а если программа умрёт по каким-то другим причинам?
PM MAIL   Вверх
amg
Дата 12.6.2009, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(scion @ 12.6.2009,  12:48)
Цитата(KSURi @ 12.6.2009,  12:16)
Установите обработчик для SIGINT (^C)

но это не правильно. а если программа умрёт по каким-то другим причинам?

Да, действительно, а если по компьютеру ударят кувалдой smile  
Впрочем, если хорошенько прицелиться, то файл можно и удалить.
PM MAIL   Вверх
scion
Дата 12.6.2009, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



что-то я окончательно потерялся... ;(

PM MAIL   Вверх
scion
Дата 12.6.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



если так:

$SIG{INT} = \&sig_handler; 
print "Работаю в поте лица...\n" while (1);

sub sig_handler { 
   $SIG{INT} = \&sig_handler; 
   print "Получен сигнал INT по нажатию Ctrl+C\n"; 
   print "Заканчиваю работу!\n"; 
   exit; # завершение выполнения программы
}

сигнал от ^С обрабатывается, а от kill ID нет... =(
пробовал ловить SIG{HUP}

PM MAIL   Вверх
KSURi
Дата 13.6.2009, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



так kill вроде по умолчанию посылает SIGKILL, не? и кстати, обработчик достаточно поставить один раз

Добавлено через 3 минуты и 53 секунды
Цитата(scion @  12.6.2009,  03:24 Найти цитируемый пост)
когда я прерываю выполнения программы (то есть завершаю её аварийно)

Я подумал, что вы сами ее насильно завершаете. Обычно это как раз делают черезе ^C или ^BREAK.
Если вам нужно более универсальное решение, то пишите отдельный скрипт, который по каким-то параметрам будет мониторить сабж и делать всякие штуки после его смерти


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
scion
Дата 13.6.2009, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(KSURi @ 13.6.2009,  00:25)
так kill вроде по умолчанию посылает SIGKILL, не? и кстати, обработчик достаточно поставить один раз

Добавлено @ 00:29
Цитата(scion @  12.6.2009,  03:24 Найти цитируемый пост)
когда я прерываю выполнения программы (то есть завершаю её аварийно)

Я подумал, что вы сами ее насильно завершаете. Обычно это как раз делают черезе ^C или ^BREAK.
Если вам нужно более универсальное решение, то пишите отдельный скрипт, который по каким-то параметрам будет мониторить сабж и делать всякие штуки после его смерти

ок. т.е. в perle такого не реализовано? просто я думал что в перле есть уже нечто такое что бы мониторить...

"кстати, обработчик достаточно поставить один раз" можно подробнее... что вы имели в виду?

хочу ловить $SIG{INT}  и $SIG{KILL} 
нужно писать 

$SIG{INT} = \&sig_handler; 
$SIG{KILL} = \&sig_handler2; 

и соотв. что делают это функции. я правильно понял?

можно ли как-нибудь сделать одну универсальную функцию для сигналов INT и KILL?
PM MAIL   Вверх
shamber
Дата 13.6.2009, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(scion @  13.6.2009,  00:51 Найти цитируемый пост)
и соотв. что делают это функции. я правильно понял?

да

$SIG{INT} = \&my_Super_Function; 
$SIG{KILL} = \&my_Super_Function;

Будет Вам универсальная функция smile

Это сообщение отредактировал(а) shamber - 13.6.2009, 02:17
PM MAIL Jabber   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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