| Содержание | Предисловие | В |
Глава 6В этой главе: Базовые средства ввода-выводаВвод из STDINЧтение со стандартного ввода (через Perl-дескриптор файла stdin) — несложная задача. Мы уже делали это в операции$а = <STDIN>; # прочитать следующую строкуВыполнение в списочном контексте дает все оставшиеся строки в виде списка, каждый элемент которого представляет собой одну строку, включающую завершающий символ новой строки. Напомним: @а = <STDIN>;Как правило, при разработке программы приходится решать задачу чтения всех строк по одной с последующим выполнением над каждой из них каких-либо операций. Вот широко используемый метод решения while (defined($line_ = <STDIN>)) ( # здесь обработать $line )Пока есть непрочитанные строки, в результате выполнения операции <stdin> получается определенное значение, и выполнение цикл* До символа новой строки или того, что вы присвоили переменной $/.Операция чтения скалярного значения из <stdin> в $_ и использwhile (<STDIN>) { # как "while(defined($_ = <STDIN>_) "chomp; # как "chomp($_)" # здесь выполняются другие операции с $_ )Поскольку переменная $_ по умолчанию используется во многих операциях, таким способом вы можете значительно сократить объем набираВвод из операции "ромб" Другой способ чтения входной информации состоит в использовании операции "ромб" (О). По принципу работы она похожа на <stdin> —и вы вызываете ее так: kitty filel file2 file3 Операция "ромб" читает сначала все строки первого файла, затем все строки второго и, наконец, все строки третьего файла. Значение undef В ходе своего выполнения операция "ромб" не рассматривает аргументы командной строки непосредственно, а работает с массивом @argv. Это специальный массив, инициализируемый и@ARGV = ("aaa","bbb","ccc"); while t В главе 10 мы увидим, как можно открывать и закрывать определенные файлы в определенное время. Впрочем, мы уже использовали этот мВывод в STDOUTДля посылки каких-либо данных на стандартный вывод в Perl служат функции printФункция print — обычный выводМы уже пользовались функцией print, направляя текст на стандартный вывод. Давайте остановимся на этом вопросе несколько поФункция print получает список строк и посылает их по очереди на стандартный вывод, не добавляя никаких промежуточных или конечных символов. Возможно, не совсем очевидно, что$а = print("hello ", "world", "\n");— это еще один вариант вывода приветствия hello, world. Возвращаемое значение функции prinИногда в print нужно вводить круглые скобки, как показано в данном примере, особенно когда первый элемент, который вы хотите вывесprint (2+3),"hello"; # неверно! Выводит 5, игнорируя "hello" print ((2+3),"hello"); #* Стандартный дистрибутив Perl содержит модули getopt-подобного сФункция printf — форматированный выводВероятно, вы захотите в большей степени контролировать выводимые данные, чем это позволяет функция print. Возможно, вы приФункция printf принимает список аргументов (заключенный в необязательные круглые скобки, как и в случае использования функции print).Пример: printf "%15s %5d %10.2f\n", $s, $n, $r; Эта функция выводит $s в 15-символьном поле, затем пробел, затем $п как десятичное целое в 5-символьном поле, затем еще один пробеУпражнения Ответы к упражнениям даны в приложении А. 1. Напишите программу, которая работает аналогично команде cat, но изменяет на обратный порядок следования всех строк в2. Измените программу из предыдущего упражнения таким образом, чтобы в каждом файле, указанном в командной строке, порядок строк изменялся на обратный индивидуально. (Да-да, вы можете сделать это, пользуяс3. Напишите программу, которая читает список строковых значений (каждое из которых занимает отдельную строку) и выводит эти строки в 20-символьном столбце с выравниванием справа. Например, при вводе строк4. Измените программу из предыдущего упражнения таким образом, чтобы пользователь мог выбирать ширину столбца. Например, при вводе строк 20, hello |
| Содержание | Предисловие | В |