Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PerlΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 28

Автор ΠœΠΈΡ…Π°ΠΈΠ» Π¨ΠΎΡ…ΠΈΡ€Π΅Π²

Иногда ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½Π° Π±Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Bin, устанавливаСмая Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ FindBin ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, содСрТит имя ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


use FindBin; # ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ FindBin my $program_start_dir = $FindBin::Bin; # стартовый ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³


Perl Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ записСй Ρ„Π°ΠΉΠ»Π°. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ (ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ) ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ (ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅ΠΌΡ‹ΠΉ двумя Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ).

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ содСрТимого ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ. Ѐункция opendir() ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ассоциируСт Π΅Π³ΠΎ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ манипулятором ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число 1 ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ, undef - ΠΏΡ€ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅. Π’ΠΎΡ‚ Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, открываСтся ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈ создаСтся манипулятор ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° DIR_HANDLE:


$ok = opendir DIR_HANDLE, $directory_name;


Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ программирования Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ манипулятор ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² скалярной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΅Π³ΠΎ видимости Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π±Π»ΠΎΠΊΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ случайноС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ манипулятора Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… частях ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НапримСр, Ρ‚Π°ΠΊ:


$ok = opendir my $dir_handle, $directory_name;


Ѐункция closedir() Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ opendir(), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ манипулятор ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число 1 ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΈΠ»ΠΈ undef - ΠΏΡ€ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅. Π₯отя ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ автоматичСски Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, рСкомСндуСтся всС ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ это явно:


$ok = closedir $dir_handle; # Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³


Ѐункция readdir() Π² скалярном контСкстС Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ элСмСнт ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, возвращая Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ undef, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ послСдний элСмСнт. НапримСр:


my $file_name = readdir $dir_handle;


Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ всСх элСмСнтов ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ:


while (my $file_name = readdir $dir_handle) { if ($file_name ne '.' && $file_name ne '..') { print "ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ $file_name\n" if -d $file_name; print "Ρ„Π°ΠΉΠ» $file_name\n" if -f $file_name; } }


Π’ списочном контСкстС функция readdir() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список всСх элСмСнтов ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Ρ‡Ρ‚ΠΎ часто Π±Ρ‹Π²Π°Π΅Ρ‚ вСсьма ΡƒΠ΄ΠΎΠ±Π½ΠΎ:


@file_names = readdir $dir_handle; # ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ вСсь ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³


Иногда трСбуСтся, Π½Π΅ закрывая ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, Π½Π°Ρ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ сначала. Ѐункция rewinddir() устанавливаСт ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ чтСния Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, послС Ρ‡Π΅Π³ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ начнСтся с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта:


rewinddir $dir_handle; # 'ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚Π°Ρ‚ΡŒ' Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°


Ѐункция telldir() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для пСрСмСщСния Π² эту ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ seekdir():


$dir_position = telldir $dir_handle; # позиция чтСния


Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ telldir() Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, встроСнная функция seekdir() устанавливаСт Π½ΠΎΠ²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ для чтСния ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ readdir():


seekdir $dir_handle, $dir_position; # Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ


ПослС изучСния прСдставлСнных Π² этой Π»Π΅ΠΊΡ†ΠΈΠΈ срСдств Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Perl. Но ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΏΡƒΡ‚ΠΈ: Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… лСкциях курса Π±ΡƒΠ΄Π΅Ρ‚ рассказано ΠΎ Π²Π°ΠΆΠ½Ρ‹Ρ… конструкциях ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… систСмы программирования Perl, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ соврСмСнныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

ЛСкция 10. ΠžΡ‚Ρ‡Π΅Ρ‚Ρ‹

Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ срСдства создания Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΈ тСхнология формирования Π² Perl ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ², которая позволяСт ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ΅, ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ для просмотра Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ ΠΈΠ»ΠΈ для Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€.

ЦСль Π»Π΅ΠΊΡ†ΠΈΠΈ: Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° страницы ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ строк ΠΎΡ‚Ρ‡Π΅Ρ‚Π°, Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с тонкостями описания ΠΏΠΎΠ»Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² Π² Ρ€Π°Π·Π½Ρ‹Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ.

Вся информация, хранящаяся Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… систСмах, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для людСй, Π° людям нравится Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΅Π΅ упорядочСнной ΠΈ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎ прСдставлСнной. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ для просмотра Π½Π° экранС ΠΈΠ»ΠΈ Π½Π° Π±ΡƒΠΌΠ°Π³Π΅, принято Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠΌ. ΠžΡ‚Ρ‡Π΅Ρ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ для отобраТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΌ для восприятия Π²ΠΈΠ΄Π΅, поэтому ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΎΠ±ΠΎΠ±Ρ‰Π°ΡŽΡ‚ΡΡ, ΡΠ½Π°Π±ΠΆΠ°ΡŽΡ‚ΡΡ ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΈ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΏΠΎ возмоТности ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ ΠΈ эстСтично. ВсС ΠΌΡ‹ постоянно сталкиваСмся с ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π² "причСсанном" ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅: это списки, рССстры, Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Ρ„ΠΎΡ€ΠΌΡ‹, ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Одной ΠΈΠ· Ρ†Π΅Π»Π΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Perl Π±Ρ‹Π»ΠΎ созданиС ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ инструмСнта для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ². Perl прСдоставлял ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для создания простых ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ² ΠΈ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ, начиная с самых Ρ€Π°Π½Π½ΠΈΡ… вСрсий, ΠΈ ΠΎΠ½ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ измСнился с Ρ‚Π΅Ρ… ΠΏΠΎΡ€. Π₯отя ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π² Π½Π΅ΠΌ срСдства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ вСсьма Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹, ΠΎΠ½ΠΈ достаточны, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ситуаций ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ постраничного Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран, ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΡŽΡ‰Π΅Π΅ устройство ΠΈΠ»ΠΈ Π² Ρ„Π°ΠΉΠ». ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΎΡ‚Ρ‡Π΅Ρ‚Π° начинаСтся с описания Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°.

Π’Π½Π΅ΡˆΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΈ располоТСниС Π΄Π°Π½Π½Ρ‹Ρ… Π² Π½Π΅ΠΌ описываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. Π€ΠΎΡ€ΠΌΠ°Ρ‚ - это шаблон ΠΎΡ‚Ρ‡Π΅Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… строк (Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… надписСй, констант) ΠΈ описания ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ значСния Π΄Π°Π½Π½Ρ‹Ρ…. Π€ΠΎΡ€ΠΌΠ°Ρ‚ описываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова format, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ указываСтся имя Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΈ Π·Π½Π°ΠΊ равСнства. Π”Π°Π»Π΅Π΅ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки располагаСтся описаниС строк Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΎΡ‚Ρ‡Π΅Ρ‚Π° (хотя ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ). ОписаниС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° заканчиваСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкой, состоящСй ΠΈΠ· СдинствСнной Ρ‚ΠΎΡ‡ΠΊΠΈ. НапримСр, описаниС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ FORMAT_NAME Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:


format FORMAT_NAME = описаниС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΎΡ‚Ρ‡Π΅Ρ‚Π° .


Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡΠ²Π»ΡΡŽΡ‚ΡΡ описаниями, ΠΊΠ°ΠΊ ΠΈ опрСдСлСния ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, поэтому ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² любом мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ†Π΅ исходного тСкста ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Имя Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° прСдставляСт собой ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π•Π³ΠΎ принято Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ, ΠΈ ΠΎΠ½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ совпадаСт с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ дСскриптора Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΡƒΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚Ρ‡Π΅Ρ‚. ИмСна Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² хранятся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ пространствС ΠΈΠΌΠ΅Π½, поэтому ΠΎΠ½ΠΈ Π½Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‚ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΌΠ΅Ρ‚ΠΎΠΊ ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… манипуляторов. Имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° хранится Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $~ (ΠΈΠ»ΠΈ $FORMAT_NAME ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΡ€Π°Π³ΠΌΠ΅ use English). Если имя Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π² описании Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, подразумСваСтся STDOUT.

ΠšΡ€ΠΎΠΌΠ΅ основного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, часто трСбуСтся описаниС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° для шапки страницы, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ страницы ΠΎΡ‚Ρ‡Π΅Ρ‚Π°. Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° страницы ΠΎΡ‚Ρ‡Π΅Ρ‚Π° отличаСтся ΠΎΡ‚ основного Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° добавляСтся '_TOP'. Он описываСтся Ρ‚Π°ΠΊ:


format FORMAT_NAME_TOP = описаниС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° шапки ΠΎΡ‚Ρ‡Π΅Ρ‚Π° .


Имя Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° для шапки страницы, связанного с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ, хранится Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $^ ($FORMAT_TOP_NAME). ΠŸΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°, Ссли очСрСдная строка Π½Π΅ помСщаСтся Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ страницС, Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ выводится символ ΠΏΡ€ΠΎΠ³ΠΎΠ½Π° страницы, счСтчик страниц увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, ΠΈ Π² Π½Π°Ρ‡Π°Π»Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ страницы Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ выводится Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ страницы ΠΎΡ‚Ρ‡Π΅Ρ‚Π°.

Π’ описании Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΎΡ‚Ρ‡Π΅Ρ‚Π° примСняСтся нСсколько Π²ΠΈΠ΄ΠΎΠ² строк. Π‘Ρ‚Ρ€ΠΎΠΊΠ° шаблонов (ΠΈΠ»ΠΈ строка ΠΏΠΎΠ»Π΅ΠΉ) описываСт поля ΠΎΡ‚Ρ‡Π΅Ρ‚Π° для заполнСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π—Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкой шаблона слСдуСт ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ нСсколько строк Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (ΠΈΠ»ΠΈ строк Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ), содСрТащих список источников Π΄Π°Π½Π½Ρ‹Ρ… (Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ², ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми) для заполнСния ΠΏΠΎΠ»Π΅ΠΉ. Π›ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Π°Ρ строка содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π±Π΅Π· измСнСния Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π² ΠΎΡ‚Ρ‡Π΅Ρ‚. ПослС Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ строки строка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ указываСтся. Π‘Ρ‚Ρ€ΠΎΠΊΠ° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π°ΡΡΡ с символа #, слуТит для записи Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠΉ ΠΈ Π½Π΅ выводится Π² ΠΎΡ‚Ρ‡Π΅Ρ‚. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ приводятся ΠΎΠ±Ρ€Π°Π·Ρ†Ρ‹ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² строк Π² описании Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°:


format STDOUT = 1. Π‘Ρ‚Ρ€ΠΎΠΊΠ° шаблонов содСрТит поля: @<<<<< ΠΈ @###.## 'ΠΏΠΎΠ»Π΅1', $field2 # 3. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ: Π²ΠΎ 2-ΠΉ строкС Π΄Π°Π½Π½Ρ‹Π΅ для вставки Π² 1-ю 4. Π›ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Π°Ρ строка выводится "ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ". .


Π’ коммСнтариях ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… строках Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ особСнного, самоС интСрСсноС содСрТится Π² строках шаблонов, содСрТащих описания ΠΏΠΎΠ»Π΅ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚Π°.