|
|
|
И, наконец, последняя, но самая сложная в нашей статье программа. $flag=0; но, как говорится, у страха глаза велики. Разберемся по порядку. $flag=0; -- знак присваивания(=) -- присвоить переменной слева значение того, что стоит справа. Значит присвоить переменной $flag значение 0. Пока большего знать не надо. Далее: написать строку; а вот дальше знак космического корабля и непонятная файловая переменная STDIN, на самом деле обозначающая стандартный ввод. То есть просто произойдет чтение с клавиатуры (также как и print, при условии запуска из командной строки UNIX). Далее open открывает файл names для чтения -- помните знак ("<")? Дальше идет ключевое слово while, котороеозначает -- делать пока условие не нулевое. Условие -- это то, что записано в скобочках после слова while. Неискушенный программист подумает что условие это то, что переменная $_ равна ли значению выражения <FILE> (то есть очередной строки файла соответствующему дескриптору FILE), а человек, программировавший на C/C++ сразу поймет, где тут собака зарыта. На самом деле,
это даже не совсем условие -- это оператор
присваивания, да-да, ни что иное, как этот
самый оператор(=). А операторы сравнения мы Разберем просто оператор ($_=<STDIN>. Присвоить значение переменной по-умолчанию (переменная $_ называется переменной по-умолчанию) значение ввода (помните операцию космический корабль (<>)) с потока данных -- в данном случае этим потоком является файл, описанный дескриптором FILE -- то есть файл с названием names (смотри выше -- операция open). А с помощью космического корабля вы читаете каждый раз строку до символа (\n) новой строки. Значит прочитать очередную строку из файла names и занести ее в переменную $_. Далее, напомню, что прочитанная строка будет заканчиваться символом \n, значит даже пустая строка прочитанная из файла не будет нулевой длины. Это условие натолкнуло меня на мысль: А если в файле 5 строчек (пустых), последняя из которых не заканчивается знаком новой строки - прочитает ли ее Perl? Я написал программу и проверил ее. И действительно, как я и думал, программа насчитала только 4 строки. А, т.к. последняя строка была пустой и в конце не было символа \n, то Perl действительно счел ее пустой, и не посчитал нужным выполнять условие while далее. Значит while будет назначать переменной $_ очередную строку из файла (включая символ \n), пока та не станет равной "" то есть пустой строке (в данном случае кавычки показаны как ограничители строки. |
|
helloworld.ru © 2001-2021 Все права защищены |
|