Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

Введение в PERL

И, наконец, последняя, но самая сложная в нашей статье программа.

$flag=0;
print "А как вас звали в прошлой жизни? "; 
$name=<STDIN>; 
chomp($name); 
print "Здравствуйте, $name!\n";
open(FILE,"<names");
while ($_=<FILE>) {
  chomp($_);
  if ($_ eq $name) { 
    $flag=1;
  }; 
  };
close(FILE);
if ($flag eq 1) {
  print "А я Вас помню\n";
} else {
  open(FILE,">>names");
  print FILE "$name\n";
  close(FILE);
}; 

но, как говорится, у страха глаза велики. Разберемся по порядку. $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
Все права защищены