Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 [ 56 ] 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

Почему после втполнения оператора $a=system("команда") переменной $а не присваиваются данные, выведенные командой в стандартный выходной поток, как можно было бы предположить?

Вы перепутали функцию system с обратными кавычками. Эта функция не перехватывает выходные данные программы. Чтобы решить проблему, воспользуйтесь опера-тором$а=* команда;.

Почему при запуске внешних команд в системе UNIX с помощью обратных кавычек (~ ) не перехватываются сообщения об ошибках?

Дело в том, что всем программам в системе UNIX (в том числе г1) назначается два стандартных в1ходн1х потока: !5IECtT и STDRR. Поток !5IECtT используется для вывода обычных сообщений во время работы программы, а поток - для вывода

сообщений об ошибках. При помещении команды в обратные кавычки или открытии

конвейера с помощью функции open выполняется перехват только потока STDOUT. Чтобы решить проблему, необходимо с помощью средств командной оболочки перенаправить поток S3EISR в STDOUT, как показано ниже:

%а=конавцд. 2>il-; * Запуск анда с перехватом сообщений и ошибок

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

команду perldoc perlfaq8.

Семинар

Контрольные вопросы

1. С помощью какой команды можно постранично отобразить выводимую

программой информацию?

а) perl myprog.pl more.

б) ореп(М, " more") [j die; print M "Данные"\n"; ">more") ] die; print M "Данные.. .\n";

2 Какое значение переменной $foo будет использоваться в операторе: ?r=Mir Sfoo? -

а) значение переменной $foo системной оболочки;

б) значение переменной $foo Perl, после чего будет выполнена команда dir.

3 Решение какой из перечисленных ниже задач зависит от типа операционной системы?

а) определение свободного дискового пространства;

б) получение списка файлов каталога;

в) удаление каталога.



Ответы

1. Правильными являются варианты а) и б). Если используется вариант а), выходной поток программы myprog.pl перенаправляется на вход программы тоге. В случае варианта б) данные, записанные в файл с дескриптором М,

перенаправляются на вход программы more для отображения в постраничном режиме.

2. Правильный ответ - вариант б). Чтобы изолировать переменную $foo от Perl, необходимо воспользоваться оператором qxdir $foo.

3. Единственно правильный вариант а), поскольку для получения списка файлов каталога можно воспользоваться операторами Perl glob, <*> или opendir/readdir/closedir, а для удаления каталога служит команда Perl rmdir.

Упражнения

• С помощью функций получения статистических данных, описанных на 8-м занятии, "Функции", модифицируйте программу из листинга 11.1 так, чтобы она отображала более подробную информацию о файлах.

• Если вы работаете в системе UNIX, отличной от Linux, добавьте в подпрограмму freespace() соответствующую ветку для определения свободного пространства на диске. В качестве отправной точки воспользуйтесь примером для Linux.

1 Чть II. углубляемся e Perl




12-й час

Работа с командной строкой Perl

На предьщуших занятиях мы рассматривала Perl как обычный интерпретатор, и не более того. Другими словами, команда perl использовалась исключительно для выполнения программ на Perl, сохраненных в отдельных файлах. Однако этим далеко не исчерпываются все ее возможности. Оказывается, что в интерпретатор встроен также отладчик, который позволяет выполнять программы на Perl подобно воспроизведению видеокассеты, - вы можете "перематывать" программу в начало, выполнять ее в замедленном режиме и останавливать в любом месте для анализа содержимого внутренних переменных. В некоторых случаях отладчик просто незаменим при поиске изо-шренных ошибок в программах па Perl.

Интерпретатор Perl позволяет также запускать программы, которые не хранятся в файле. Например, вы можете ввести короткую программу прямо в командной строке и выполнить ее.

Основные темы этого занятия.

• Использование отладчика Perl.

• Запуск небольших программ на Perl прямо из командной строки.

Отладчик Perl

В Perl отладчик встроен прямо в интерпретатор. Он позволяет запустить любую программу на Perl в пошаговом режиме, просматривать и изменять значения ее внутренних переменных, прерывать выполнение программы и возобновлять ее с любого места. Нри этом, с точки зрения программы; процесс отладки происходит совершенно прозрачно, т.е. отладчик никак не влияет на ее внутреннюю структуру: входные данные по-прежнему поступают с клавиатуры, а вывод осуществляется на экран. Просто программа "не знает", работает она под отладчиком или нет, остановлена или выполняется в пошаговом режиме. Отладчик позволяет полностью контролировать поведение программы, не нарушая ее целостности.

12-й час. бота с маной стро Perl 187



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 [ 56 ] 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122