| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > нужно написать 2 программки на perl |
| Автор: scion 10.6.2009, 16:44 |
| Прошу помочь(кто чем может) с реализацией: 1. Реализовать набор функций для работы с временными файлами. Первая функция должна создавать временный файл и сохранять его имя в указанной переменной, вторая удалять его. Временные файлы должны удаляться даже если выполнение скрипта завершено принудительно или в результате ошибки. Если файл был создан, но не удален, то в конце работы скрипта должно выводится предупреждение 2. Реализовать функцию, которая проверяет, что все переменные из списка переданных ей установлены. Количество параметров не фиксированное. пример вызова: SOME_VARIABLE=Test CheckVariables SOME_VARIABLE SOME_OTHER_VARIABLE Вывод: SOME_OTHER_VARIABLE not assigned |
| Автор: ginnie 10.6.2009, 16:53 |
| scion, рекомендую следующий алгоритм: 1. Подумать и описать словами действия, которые будет выполнять программа 2. Заменить словестные описания блоками кода на Perl 3. Проверить работоспособность кода (на тестовых примерах) 4. Если что-то сделать не получается, задать в форуме конкретный вопрос. |
| Автор: sir_nuf_nuf 10.6.2009, 16:54 | ||
| 1) Все уже сделано, до нас: http://search.cpan.org/~tjenness/File-Temp-0.21/Temp.pm 2) А вы знаете что такое perl ? есть встроенная функция - defined
|
| Автор: ginnie 10.6.2009, 16:57 |
| sir_nuf_nuf, по второй задаче, мне кажется, что надо определить "установлены ли указанные переменные окружения". |
| Автор: KSURi 10.6.2009, 18:27 |
| The Feynman Problem-Solving Algorithm:
|
| Автор: ginnie 10.6.2009, 18:35 |
| KSURi, ты пропустил важные детали: Автор: записывает проблему Посетители форума: старательно обдумывают варианты решения KSURi: пишет решение (раньше всех и получает разные бонусы) |
| Автор: scion 12.6.2009, 00:38 | ||||
за темп спс. то что нужно. |
| Автор: scion 12.6.2009, 03:24 |
| #!/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 : $!"} почему временный файл не хочет удалятся? Нет я понимаю что я не дохожу до последней инструкции, а как мне сделать что бы она в любом случаи исполнялась) когда я прерываю выполнения программы (то есть завершаю её аварийно).... (на цыкле) |
| Автор: KSURi 12.6.2009, 12:16 |
| Установите обработчик для SIGINT (^C) |
| Автор: scion 12.6.2009, 12:48 | ||
но это не правильно. а если программа умрёт по каким-то другим причинам? |
| Автор: amg 12.6.2009, 14:46 | ||||
Да, действительно, а если по компьютеру ударят кувалдой Впрочем, если хорошенько прицелиться, то файл можно и удалить. |
| Автор: scion 12.6.2009, 17:54 |
| что-то я окончательно потерялся... ;( |
| Автор: scion 12.6.2009, 19:39 |
| если так: $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} |
| Автор: KSURi 13.6.2009, 00:25 | ||
| так kill вроде по умолчанию посылает SIGKILL, не? и кстати, обработчик достаточно поставить один раз Добавлено через 3 минуты и 53 секунды
Я подумал, что вы сами ее насильно завершаете. Обычно это как раз делают черезе ^C или ^BREAK. Если вам нужно более универсальное решение, то пишите отдельный скрипт, который по каким-то параметрам будет мониторить сабж и делать всякие штуки после его смерти |
| Автор: scion 13.6.2009, 00:51 | ||||
ок. т.е. в perle такого не реализовано? просто я думал что в перле есть уже нечто такое что бы мониторить... "кстати, обработчик достаточно поставить один раз" можно подробнее... что вы имели в виду? хочу ловить $SIG{INT} и $SIG{KILL} нужно писать $SIG{INT} = \&sig_handler; $SIG{KILL} = \&sig_handler2; и соотв. что делают это функции. я правильно понял? можно ли как-нибудь сделать одну универсальную функцию для сигналов INT и KILL? |
| Автор: shamber 13.6.2009, 02:16 |
да $SIG{INT} = \&my_Super_Function; $SIG{KILL} = \&my_Super_Function; Будет Вам универсальная функция |