Анимация
JavaScript
|
Главная Библионтека Почему после втполнения оператора $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 |