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

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

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

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

ЛСкция 9. БрСдства Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°

Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ разбираСтся организация Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² Perl. РассмотрСны срСдства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ, Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ содСрТимым Ρ„Π°ΠΉΠ»ΠΎΠ². ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ этой Π»Π΅ΠΊΡ†ΠΈΠΈ позволят Π²Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, "ΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с внСшним ΠΌΠΈΡ€ΠΎΠΌ".

ЦСль Π»Π΅ΠΊΡ†ΠΈΠΈ: ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с возмоТностями подсистСмы Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π² Perl ΠΈ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ основныС ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ чтСния ΠΈ записи Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со срСдствами манипулирования Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌΠΈ.

БистСма Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Perl основана Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ…, Π·Π°Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² систСмС Unix ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΠΈΠ²ΡˆΠΈΡ…ΡΡ Π½Π° всС соврСмСнныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы. Одним ΠΈΠ· основных понятий Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ с внСшними Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΡƒ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° производится Ρ‡Π΅Ρ€Π΅Π· Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ манипулятор (file handle), ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ дСскриптором Ρ„Π°ΠΉΠ»Π°. ΠŸΡ€ΠΈ запускС любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ автоматичСски открываСтся Ρ‚Ρ€ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°: стандартный Π²Π²ΠΎΠ΄ (stdin), стандартный Π²Ρ‹Π²ΠΎΠ΄ (stdout) ΠΈ стандартный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» (stderr). ΠŸΠΎΡ‚ΠΎΠΊ стандартного Π²Π²ΠΎΠ΄Π° Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ срСдС связываСтся с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½ΠΎΠΉ, Π° ΠΏΠΎΡ‚ΠΎΠΊΠΈ стандартного Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ стандартного ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° - с дисплСйной Ρ‡Π°ΡΡ‚ΡŒΡŽ консоли ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π‘ΠΎ стандартными ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π² Perl ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… манипулятора: соотвСтствСнно STDIN, STDOUT ΠΈ STDERR. БвязываниС ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ манипулятором Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ open(), ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ. ВрСбования надСТности Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² случаС возникновСния ошибки ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ die(), которая ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ диагностичСскоС сообщСниС Π² стандартный ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. НапримСр, Ρ‚Π°ΠΊ открываСтся Ρ„Π°ΠΉΠ» ΠΈ создаСтся Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ манипулятор FILE_HANDLE:


# ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ для чтСния Ρ„Π°ΠΉΠ» ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, взятом ΠΈΠ· $file_name open(FILE_HANDLE, $file_name) # ΠΈΠ»ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ с Π²Ρ‹Π΄Π°Ρ‡Π΅ΠΉ сообщСния or die("Ошибка открытия Ρ„Π°ΠΉΠ»Π° $file_name: $!\n"); #


Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ открытия Ρ„Π°ΠΉΠ»Π° функция open() ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊ использованию Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ манипулятор. Имя Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ манипулятора записываСтся Π±Π΅Π· Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ прСфикса ΠΈ ΠΏΠΎ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΈ выдСляСтся Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ. РСкомСндуСтся ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ манипулятор Π² скалярной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎ позволяСт Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ манипулятор для использования Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΡΠΊΠ°Π»ΡΡ€Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ с Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ манипулятором ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для выполнСния Π² Π½ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. Π˜Ρ‚Π°ΠΊ, Π²ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ способ открытия Ρ„Π°ΠΉΠ»Π°:


open my $file_handle, $file_name or die "Ошибка открытия Ρ„Π°ΠΉΠ»Π° $file_name: $!\n";


(Как ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Perl, Ссли Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ нСоднозначности, программист Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π‘Ρ€Π΅Π΄ΠΈ ΠΏΠΈΡˆΡƒΡ‰ΠΈΡ… Π½Π° Perl ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСн ΡΡ‚ΠΈΠ»ΡŒ программирования Π±Π΅Π· использования ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок.)

ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ манипулятора ΠΈ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС (Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ), указываСтся Ρ€Π΅ΠΆΠΈΠΌ открытия Ρ„Π°ΠΉΠ»Π°. Он обозначаСтся Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ символами, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ открытия ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 9.1.

Π’Π°Π±Π»ΠΈΡ†Π° 9.1. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ открытия ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°ΠžΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π Π΅ΠΆΠΈΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΡΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования<Π§Ρ‚Π΅Π½ΠΈΠ΅ (ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π° с Π½Π°Ρ‡Π°Π»Π°)open($fh, '</temp/buffer.txt')>ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ (с Π½Π°Ρ‡Π°Π»Π° Ρ„Π°ΠΉΠ»Π°)open($fh, '>/temp/buffer.txt')>>Π”ΠΎΠ·Π°ΠΏΠΈΡΡŒ (Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°)open($fh, '>>/temp/buffer.txt')+<Π§Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись (Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ)open($fh, '+</temp/buffer.txt')+>Π—Π°ΠΏΠΈΡΡŒ ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (Ρ„Π°ΠΉΠ» усСкаСтся)open($fh, '+>/temp/buffer.txt')+>>Π”ΠΎΠ·Π°ΠΏΠΈΡΡŒ ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅open($fh, '+>>/temp/buffer.txt')

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π΄Π²Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ записи Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open(): старая с двумя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅ΠΆΠΈΠΌ открытия указываСтся ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°, ΠΈ новая - с трСмя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π΅ΠΆΠΈΠΌ открытия указываСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ. Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅:


open $fh, '</temp/buffer.txt'; open $fh, '<', '/temp/buffer.txt';


ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Ρ‹, Π·Π½Π°ΡŽΡ‰ΠΈΠ΅ язык C, ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для открытия ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ sysopen(), которая Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ открытия ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π² C, ΠΈ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ позволяСт Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΎ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌΡ‹ открытия Ρ„Π°ΠΉΠ»ΠΎΠ². А Π²ΠΎΠΎΠ±Ρ‰Π΅ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с Perl ΠΈΠ΄Π΅Ρ‚ Ρ†Π΅Π»Ρ‹ΠΉ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ чтСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:


perldoc perlopentut


Бвязь Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ манипулятора Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ с ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ разрываСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ закрытия ΠΏΠΎΡ‚ΠΎΠΊΠ° close(), Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. Π•ΠΉ пСрСдаСтся Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ манипулятор ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:


close(FILE) or die("Ошибка ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°: $!\n"); close $handle or die "Ошибка закрытия Ρ„Π°ΠΉΠ»Π°: $!\n";


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


open my $in, "<:encoding(UTF-8)", 'utf8.txt' or die; open my $out, ">:encoding(cp1251)", 'cp1251 .txt' or die; while(<$in>){ print $out $_; } close $in or die; close $out or die;


Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² MS-DOS), послС открытия Ρ„Π°ΠΉΠ»Π°, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… трСбуСтся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ манипулятора Ρ€Π΅ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ binmode($file_handle). ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… установки этого Ρ€Π΅ΠΆΠΈΠΌΠ°, Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ binmode() Π½Π΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ дСйствия.

Π’ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌ числС случаСв Π²Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… Π² Perl-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ ΠΈΠ· Π½Π΅Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² производится построчно, Π° для раздСлСния строк Ρ„Π°ΠΉΠ»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… записСй, хранящийся Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ $/ ($INPUT_RECORD_SEPARATOR). Для чтСния ΠΎΠ΄Π½ΠΎΠΉ строки ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ опСрация "кристалл" (diamond), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° пСрСдаСтся Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ манипулятор ΠΈΠ»ΠΈ пСрСмСнная, содСрТащая манипулятор. Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ· стандартного Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.


$input = <>; # Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ строки Π² $input ΠΈΠ· STDIN $line = <FILE>; # Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ строки Π² $line ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° FILE $in = <$handle>; # Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ строки Π² $in ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° $handle


ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ чтСния "кристалл" Π² скалярном контСкстС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ строку вмСстС с Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ записСй, Π° ΠΊΠΎΠ³Π΄Π° достигаСтся ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°, ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ undef, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ воспринимаСтся ΠΊΠ°ΠΊ Π»ΠΎΠΆΠ½ΠΎΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» построчного чтСния Π΄Π°Π½Π½Ρ‹Ρ… провСряСт ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ заканчиваСтся, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ становится Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ:


open my $fh, "< $file" or die "Ошибка открытия: $!"; while (my $line = <$fh>) { # Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ строки Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $line chomp $line; # ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ раздСлитСля строк print length $line, " $line\n"; # ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° строки } close $fh or die "Ошибка закрытия: $!";


ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ чтСния "кристалл" Π² списочном контСкстС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список всСх строк с раздСлитСлями записСй. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² массив, ΠΏΠΎΠΏΡƒΡ‚Π½ΠΎ отсортировав Π΅Π³ΠΎ:


@lines= sort(<$fh>); # Π² @lines отсортированныС строки ΠΈΠ· $fh


ΠŸΠΎΡΡ‚Ρ€ΠΎΡ‡Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… выполняСт функция print(), которая ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - Π² STDOUT. Если трСбуСтся Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ списком Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… указываСтся Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ дСскриптором ΠΈ списком Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ запятая Π½Π΅ ставится. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ…:


print($list, $of, $output, $values); # Π²Ρ‹Π²ΠΎΠ΄ Π² STDOUT print STDOUT $list, $of, $output, $values; # Π²Ρ‹Π²ΠΎΠ΄ Π² STDOUT print(STDERR $list, $of, $output, $values); # Π²Ρ‹Π²ΠΎΠ΄ Π² STDERR print FILE $list, $of, $output, $values; # Π²Ρ‹Π²ΠΎΠ΄ Π² FILE print($file $list, $of, $output, $values); # Π²Ρ‹Π²ΠΎΠ΄ Π² $file