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

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

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

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


@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


Для форматирования Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ примСняСтся функция printf(), которая ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² прСобразования, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ±ΡŠΡΡΠ½Π΅Π½Π½Ρ‹Ρ… Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 7 ΠΏΡ€ΠΈ описании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sprintf(). НапримСр, Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ вывСсти ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя Π² Ρ€Π°Π·Π½Ρ‹Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ:


my ($hh, $mm, $ss) = (localtime)[2, 1, 0]; # Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΈΠ· списка Π½ΡƒΠΆΠ½Ρ‹Π΅ значСния: часы, ΠΌΠΈΠ½ΡƒΡ‚Ρ‹, сСкунды my $format = "%02d:%02d:%02d\n"; # Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ‹Π²ΠΎΠ΄Π° printf $format, $hh, $mm, $ss; # Π²Ρ‹Π²ΠΎΠ΄ Π² STDOUT printf(STDERR $format, $hh, $mm, $ss); # Π²Ρ‹Π²ΠΎΠ΄ Π² STDERR printf $file $format, $hh, $mm, $ss; # Π²Ρ‹Π²ΠΎΠ΄ Π² $file


Задавая Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ прСобразования, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΌ прСдставлСнии ΠΈΠ»ΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡˆΠΈΡ€ΠΈΠ½Ρ‹. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ организуСтся срСдствами форматирования ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ.

Π’ Ρ„Π°ΠΉΠ»Π΅ с исходным тСкстом ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Perl ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ встроСнный Ρ„Π°ΠΉΠ» с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° послС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ лСксСмы __END__ (Π² основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅) ΠΈΠ»ΠΈ __DATA__ (Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅). ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· этого встроСнного Ρ„Π°ΠΉΠ»Π° доступны для чтСния ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ манипулятора DATA. Π’ΠΎ встроСнном Ρ„Π°ΠΉΠ»Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ тСстовыС Π΄Π°Π½Π½Ρ‹Π΅ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ послС Π΅Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· встроСнного Ρ„Π°ΠΉΠ»Π°:


while (my $line = <DATA>) { # Ρ‡ΠΈΡ‚Π°Π΅ΠΌ построчно Π΄Π°Π½Π½Ρ‹Π΅ print $line; # ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ } __END__ Π­Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· встроСнного Ρ„Π°ΠΉΠ»Π°


Π”Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ хранятся Π² Ρ„Π°ΠΉΠ»Π°Ρ… Π±Π΅Π· Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ записСй Π² Π±Π»ΠΎΠΊΠ°Ρ… фиксированной Π΄Π»ΠΈΠ½Ρ‹. ПослС открытия Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ open() Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ binmode().


open(my $fh, ">$file") or die("Ошибка открытия: $!"); binmode($fh);


Π—Π°ΠΏΠΈΡΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… фиксированной Π΄Π»ΠΈΠ½Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print($fh $record). Π’Π°ΠΊΠΆΠ΅ имССтся функция Π½Π΅Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° syswrite(), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ манипулятор, скалярная пСрСмСнная с Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ записываСмого Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число фактичСски записанных Π±Π°ΠΉΡ‚ (Π² случаС ошибки syswrite Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ undef), Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ записи. Π­Ρ‚ΠΎ дСлаСтся Ρ‚Π°ΠΊ:


syswrite($fh, $record, length($record)) == length($record) or die("Ошибка записи: $!");


ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ функция pack(), которая ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ Π² ΡΠΊΠ°Π»ΡΡ€Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² соотвСтствии с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ шаблоном. Π’ шаблонС ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ»Π΅ обозначаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ латинской Π±ΡƒΠΊΠ²Ρ‹. ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ шаблонов прСобразования для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ pack() ΠΈ unpack() приводится Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 9.2. Π—Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ символом Π² шаблонС ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ дСсятичноС число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ рассматриваСтся ΠΊΠ°ΠΊ ΡˆΠΈΡ€ΠΈΠ½Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ поля. Поля Π² шаблонС ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ для удобства чтСния.

Π’Π°Π±Π»ΠΈΡ†Π° 9.2. Π¨Π°Π±Π»ΠΎΠ½Ρ‹ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΈ распаковки Π΄Π°Π½Π½Ρ‹Ρ…Π¨Π°Π±Π»ΠΎΠ½ΠœΠ½Π΅ΠΌΠΎΠ½ΠΈΠΊΠ°ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅ прСобразованияaArbitraryΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ², дополнСнная Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ \0AASCIIстрока символов ASCII, дополнСнная ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈb / BBit stringстрока Π±ΠΈΡ‚ΠΎΠ² с Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠΌ / ΡƒΠ±Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ порядком Π±ΠΈΡ‚ΠΎΠ² c / CCharacterΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ символы со Π·Π½Π°ΠΊΠΎΠΌ / Π±Π΅Π· Π·Π½Π°ΠΊΠ°f / dFloat / Doubleчисло с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ / Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точностиFFloatчисло с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½ΠΎΠΉ точности Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ прСдставлСнии (NV)Dlong DoubleΠ΄Π»ΠΈΠ½Π½ΠΎΠ΅ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точностиh / HHex stringΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Π°Ρ строка с младшим / ΡΡ‚Π°Ρ€ΡˆΠΈΠΌ ΠΏΠΎΠ»ΡƒΠ±Π°ΠΉΡ‚ΠΎΠΌ (nybble) Π² Π½Π°Ρ‡Π°Π»Π΅i / IIntegerΡ†Π΅Π»ΠΎΠ΅ (>=32 Π±ΠΈΡ‚Π°) число со Π·Π½Π°ΠΊΠΎΠΌ / Π±Π΅Π· Π·Π½Π°ΠΊΠ°j / JΡ†Π΅Π»ΠΎΠ΅ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ прСдставлСнии со Π·Π½Π°ΠΊΠΎΠΌ (IV) / Π±Π΅Π· Π·Π½Π°ΠΊΠ° (UV)l / LLongΠ΄Π»ΠΈΠ½Π½ΠΎΠ΅ (32 Π±ΠΈΡ‚Π°) Ρ†Π΅Π»ΠΎΠ΅ со Π·Π½Π°ΠΊΠΎΠΌ / Π±Π΅Π· Π·Π½Π°ΠΊΠ°n / NNetworkΠ±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ (16 Π±ΠΈΡ‚ΠΎΠ²) / Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ (32 Π±ΠΈΡ‚Π°) Ρ†Π΅Π»ΠΎΠ΅ с сСтСвым порядком Π±Π°ΠΉΡ‚ΠΎΠ² (big endian)p / PPointerΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° строку, ΠΎΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽΡΡ \0 / фиксированной Π΄Π»ΠΈΠ½Ρ‹q / QQuadсвСрхдлинноС (64 Π±ΠΈΡ‚Π°) Ρ†Π΅Π»ΠΎΠ΅ число со Π·Π½Π°ΠΊΠΎΠΌ / Π±Π΅Π· Π·Π½Π°ΠΊΠ°s / SShortΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ (16 Π±ΠΈΡ‚ΠΎΠ²) Ρ†Π΅Π»ΠΎΠ΅ со Π·Π½Π°ΠΊΠΎΠΌ / Π±Π΅Π· Π·Π½Π°ΠΊΠ°uuuencodedстрока, кодированная ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ uuencodeUUnicodeстрока символов Unicode v / VVAXΠ±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ (16 Π±ΠΈΡ‚ΠΎΠ²) / Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ (32 Π±ΠΈΡ‚Π°) Ρ†Π΅Π»ΠΎΠ΅ с VAX-порядком Π±Π°ΠΉΡ‚ΠΎΠ² (little endian)wΡ†Π΅Π»ΠΎΠ΅, сТатоС Π² соотвСтствии с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ BERxвставка \0 (pack) / пропуск Π±Π°ΠΉΡ‚Π° ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Π²ΠΏΠ΅Ρ€Π΅Π΄ (unpack)Xпропуск Π±Π°ΠΉΡ‚Π° ΠΏΠΎ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Π½Π°Π·Π°Π΄ZASCIIZстрока ASCIIZ (ΠΎΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π°ΡΡΡ \0), дополнСнная \ [email protected]Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ \0 Π΄ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ

НапримСр, цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ time(), ΠΈ Π΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ rand(), ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $record с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ шаблона 'l1 d1', ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚: "ΠΎΠ΄Π½ΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число (long) ΠΈ ΠΎΠ΄Π½ΠΎ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ точности (double)".


$record = pack 'l1 d1', time(), rand(); #


Π’ΠΎΡ‚ Π΅Ρ‰Π΅ нСсколько нСслоТных ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования Ρ€Π°Π·Π½Ρ‹Ρ… шаблонов для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ pack():


$bin = pack('a5', 'Yes'); # Π² $bin Π±ΡƒΠ΄Π΅Ρ‚: 'Yes\0\0' $bin = pack('A5', 'Yes'); # Π² $bin Π±ΡƒΠ΄Π΅Ρ‚: 'Yes ' $bin = pack('a4', 'abcd','x','y','z'); # Π² $bin: 'abcd' $bin = pack('aaaa', 'abcd','x','y','z'); # Π² $bin: 'axyz' $bin = pack('C2', 65,66,67); # Π² $bin Π±ΡƒΠ΄Π΅Ρ‚: 'AB' $bin = pack('U2', 0x263A, 0x263B); # Π² $bin Π±ΡƒΠ΄Π΅Ρ‚: '??' $bin = pack ('cxxc', 65,66); # Π² $bin Π±ΡƒΠ΄Π΅Ρ‚: 'A\0\0B'


Для прСобразования Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° примСняСтся функция unpack(), которая распаковываСт ΠΈΠ· скалярной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² список ΠΈΠ»ΠΈ массив значСния Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² соотвСтствии с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ шаблоном.


@list_of_values = unpack($template, $binary_record);


ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ unpack() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· строки ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ подстроки фиксированной Π΄Π»ΠΈΠ½Ρ‹. НапримСр, Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· записи Ρ„Π°ΠΉΠ»Π° поля ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:


# Поля Π΄Π°Π½Π½Ρ‹Ρ… Π² записи Ρ„Π°ΠΉΠ»Π°: # c 1 ΠΏΠΎ 7 Π±Π°ΠΉΡ‚ - Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° # с 8 Π΄Π»ΠΈΠ½ΠΎΠΉ 30 - фамилия, имя, отчСство Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π° # с 38 Π΄Π»ΠΈΠ½ΠΎΠΉ 25 - адрСс # 1234567Π‘Π΅Π½Π΄Π΅Ρ€ ΠžΡΡ‚Π°ΠΏ Π˜Π±Ρ€Π°Π³ΠΈΠΌΠΎΠ²ΠΈΡ‡ Π Π‘Π€Π‘Π , ЧСрноморск ($phone, $name, $address)= unpack('A7A30A25', $record);


Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ поля, достаточно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² шаблонС пропуск ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ количСства Π±Π°ΠΉΡ‚ΠΎΠ². НапримСр, Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ с Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ:


($name, $address)= unpack('x7A30A25', $record);


ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС шаблонов ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ pack() ΠΈ unpack() ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² стандартной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ всС Ρ‚ΠΎΠΉ ΠΆΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ чтСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ: