От простого к сложному

Автор: manager Пятница, Март 28th, 2008 Нет комментариев

Рубрика: Perl

Прежде чем приступить к последовательному ознакомлению с не знакомым для вас языком, должен оговориться и сказать, что все примеры да и сам язык описанию которого посвящена эта книга это 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()
{
print;
}
close(PASS);
Пояснения:
open(PASS, «</etc/passwd") || die "Файл не найден!";
"Открыть" файл, т.е. создать указатель файла PASS, и в случае ошибки выдать "Файл не найден!" и закончить программу.

while()
Читать по одной строке файла в переменную по умолчанию $_.
{
Открыть блок операторов.
print;
Вывести на экран переменную по умолчанию $_
}
Конец блока.
close(PASS);
Закрыть файл. Этого можно и не делать, т. к. файл автоматически закроется после окончания программы.
Результат работы этой программы тот же что и команды cat /etc/passwd. По экрану пробежали непонятные строки но зато теперь перед вами открыты горизонты Perl программирования! Все последующие примеры будут развитием этой программы и она превратится из гадкого утенка в прекрасного лебедя (не генерала).

Пример 3.
Разделение полей.

#!/usr/local/bin/perl
open(PASS, «</etc/passwd") || die "Файл не найден!";
while()
{
($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()
{
($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()
{
($login, $pass, $uid, $gid, $name, $home_dir, $shell) = split(‘:’);
write(); # Форматированный вывод данных.
}
close(PASS);
exit 0; # Завершение программы
############ Описание формы вывода ##################
format STDOUT =
Пользователь: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$name
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$name
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$name
———————————————————————-
Login:@<<<<<<<
Фрагмент результата:

Пользователь: Калужский ликероводочный завод. Лучшие водки и
настойки. Звонить только перед праздником Кострикову
Анатолию т. 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. Желаю удачи!

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты