От простого к сложному
Прежде чем приступить к последовательному
ознакомлению с не знакомым для вас языком, должен
оговориться и сказать, что все примеры да и сам язык
описанию которого посвящена эта книга это Perl версии
5.003 для операционной системы FreeBSD версии 2.01. Существуют
реализации этого языка для операционных систем OS/2 ,
MS-DOS и Windows NT но они немного отстают по возможностям от
оригинала, рожденного в недрах Unix.
Пример 1.
Введите в файл test1.pl следующие строки:
#!/usr/local/bin/perl
# Содержимое файла test1.pl
print "Наше Вам с кисточкой!\n";
А теперь подробно разберем каждую строку.
#!/usr/local/bin/perl
Данная строка должна быть первой в любой Perl-программе.
Она указывает системному интерпретатору что данный
файл - это Perl-программа.
# Содержимое файла test1.pl
Эта строка называется комментарием. Она всегда
начинается символом '#' и заканчивается таким
объяснением что как говорил великий Ходжа Насреддин
"это тонкий философский вопрос", а говоря простым
языком здесь можно писать все что угодно. Даже
пожелание руководству. Уж здесь оно точно до него не
дойдет.
print "Наше Вам с кисточкой!\n";
Самая последняя ну и конечно главная. Она
просто выводит на экран надпись "Наше Вам с
кисточкой!".
Здесь слово print - это команда "вывести".
Все что в кавычках - это символы, \n - перевод строки и ';' -
признак конца команды. Он обязателен. В одной строке
может быть несколько команд и все они должны
завершаться символом ';'. После него может быть символ
'#' - это значит остаток строки считается комментарием.
Над этой строкой автору пришлось больше
всего поломать голову так как в нее постоянно лезли
какие то странные "hello", "hello all", "Построимся
и спасемся", "Строй наше спасение" и т. д. и т.п.
Если вы никогда не работали с Perl, то бьюсь на
спор в 10$, что данная программа сразу у вас не
заработает! Не потому что она не верна, а потому что "Нельзя
объять необъятное". Сразу, потом можно, да и то
частями. Сначала сделайте ваш файл test1.pl исполняемым.
Для этого введите команду:
chmod +x test1.pl
Затем проверьте где у вас Perl. Для этого введите:
which perl
Система вам выдаст что то вроде: /usr/bin/perl
Если:
perl: Command not found.
То тогда закройте книжку и ложитесь спать. У вас просто
нет Perl или он не установлен. А мне остается послать вас
к системному администратору или к man (для переводчиков-
man сокращение от manual а не то что вы подумали).
Теперь проверьте что бы строка 01 содержала то
что выдала команда which. Если совпало то введите:
test1.pl
и бьюсь на 50$, что и теперь программа не заработает, так
как правильней ввести:
./test1.pl
Если я проиграл, то не радуйтесь. Да же если
вам удалось запустить программу как test1.pl это значит,
что у вас будут неприятности в будущем.
Пример 2.
Данная программа выводит на экран все ваши секреты. А
именно файл /etc/passwd.
#!/usr/local/bin/perl
open(PASS, "</etc/passwd") || die "Файл не найден!";
while(<PASS>)
{
print;
}
close(PASS);
Пояснения:
open(PASS, "</etc/passwd") || die "Файл не найден!";
"Открыть" файл, т.е. создать указатель
файла PASS, и в случае ошибки выдать "Файл не найден!"
и закончить программу.
while(<PASS>)
Читать по одной строке файла в переменную по умолчанию
$_.
{
Открыть блок операторов.
print;
Вывести на экран переменную по умолчанию $_
}
Конец блока.
close(PASS);
Закрыть файл. Этого можно и не делать, т. к. файл
автоматически закроется после окончания программы.
Результат работы этой программы тот же что и
команды cat /etc/passwd. По экрану пробежали непонятные
строки но зато теперь перед вами открыты горизонты Perl
программирования! Все последующие примеры будут
развитием этой программы и она превратится из гадкого
утенка в прекрасного лебедя (не генерала).
Пример 3.
Разделение полей.
#!/usr/local/bin/perl
open(PASS, "</etc/passwd") || die "Файл не найден!";
while(<PASS>)
{
($login, $pass, $uid, $gid, $name, $home_dir, $shell) = split(':');
print "$login \t $name\n";
}
close(PASS);
Пояснение:
($login, $pass, $uid, $gid, $name, $home_dir, $shell) = split(':');
Присвоить указанным переменным поля входной строки,
считая разделителем символ ':'.
print "$login \t $name\n";
Вывести login - имя пользователя и его описание. Поля
разделены символом '\t' - табуляции.
Пример 4.
Вывести имена пользователей, отсортированных по
группам.
#!/usr/local/bin/perl
open(PASS, "sort -n -t : +3 -4 +0 /etc/passwd|") || die "Файл не найден!";
while(<PASS>)
{
($login, $pass, $uid, $gid, $name, $home_dir, $shell) = split(':');
print "$login \t $gid \t $name\n";
}
close(PASS);
Пояснения:
open(PASS, "sort -n -t : +3 -4 +0 /etc/passwd|") || die "Файл не найден!";
В данной строке весь фокус! Входным файлом
для нашей программы стал выход команды sort которая и
отсортирует входные данные.
Форматированный вывод.
Ну а теперь напечатаем на экране все наши
данные в удобной форме.
#!/usr/local/bin/perl
open(PASS, "sort -n -t : +3 -4 +0 /etc/passwd|") || die "Файл не найден!";
while(<PASS>)
{
($login, $pass, $uid, $gid, $name, $home_dir, $shell) = split(':');
write(); # Форматированный вывод данных.
}
close(PASS);
exit 0; # Завершение программы
############ Описание формы вывода ##################
format STDOUT =
Пользователь: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$name
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$name
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$name
----------------------------------------------------------------------
Login:@<<<<<<<< Uid:@<<< Gid:@<<< Home dir:@<<<<<<<<<<<<<<<<<<<<<
$login, $uid, $gid, $home_dir
----------------------------------------------------------------------
. # Это последняя строка программы
Фрагмент результата:
Пользователь: Калужский ликероводочный завод. Лучшие водки и
настойки. Звонить только перед праздником Кострикову
Анатолию т. 2-23-06,,,
----------------------------------------------------------------------
Login:uucryst Uid:1055 Gid:66 Home dir:/var/spool/uucppublic/
----------------------------------------------------------------------
Пользователь: Торговый Дом Дилен,,,
----------------------------------------------------------------------
Login:uudilen Uid:1075 Gid:66 Home dir:/var/spool/uucppublic
----------------------------------------------------------------------
Если вам интересно узнать как работает эта
программа, то переверните страницу и
начините свое путешествие в мире Perl. Желаю удачи!
[Содержание] [Вперед]
|