ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ "ΠΊΡΠΈΡΡΠ°Π»Π»" Π² ΡΠΏΠΈΡΠΎΡΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΡΡΡΠΎΠΊ Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΡΠΌΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ ΡΠ°ΠΉΠ» Π² ΠΌΠ°ΡΡΠΈΠ², ΠΏΠΎΠΏΡΡΠ½ΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π² Π΅Π³ΠΎ:
@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() ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ΅ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠΈΠ»ΠΈΡΡ ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ: