ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΡΡΡΠΎΠΈΡΡΡ Π½Π° ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ. ΠΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ Π² ΠΌΠ΅ΡΠΎΠ΄ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
$hobbit->give_name('ΠΠΈΠ»ΡΠ±ΠΎ ΠΡΠ³Π³ΠΈΠ½Ρ'); # ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π²ΡΠ·ΠΎΠ²Ρ: Person::give_name($hobbit, 'ΠΠΈΠ»ΡΠ±ΠΎ ΠΡΠ³Π³ΠΈΠ½Ρ');
ΠΠ½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ ΡΡΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ. ΠΠ»Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡ, Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ.
ΠΡΠ»ΠΈ ΠΊ ΡΡΡΠ»ΠΊΠ΅ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Person ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ ref(), ΡΠΎ ΠΎΠ½Π° Π²Π΅ΡΠ½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ 'HASH', ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, Π° 'Person'! ΠΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ "Π±Π»Π°Π³ΠΎΡΠ»ΠΎΠ²Π΅Π½ΠΈΡ" ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΡΠ»ΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ bless().
print "ΠΠ»Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°: '", ref($hobbit), "'\n"; # 'Person'
ΠΡΠΎΠΌΠ΅ Π½ΠΎΡΠ°ΡΠΈΠΈ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ "ΡΡΡΠ΅Π»ΠΊΠ°" ->, ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ, Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠ²Π΅Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ ΠΈΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΡΠΎΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ΄Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΈΠ½ΠΎΠ³Π΄Π° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠΉ Π² ΠΊΡΡΠ³Π»ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΡΠ²Π΅Π½Π½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π³Π»ΡΠ΄Π½ΡΠΌ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ. ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ Π² Π½ΠΎΠ²ΠΎΠΌ ΡΡΠΈΠ»Π΅:
# ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠ²Π΅Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ use Person; # ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ Person my $magician = new Person; # "ΡΡΠΎΡ ΠΌΠ°Π³ - Π½ΠΎΠ²Π°Ρ Π»ΠΈΡΠ½ΠΎΡΡΡ" give_name $magician 'ΠΡΠ½Π΄Π°Π»ΡΡ'; # "Π½Π°Π·ΠΎΠ²Π΅ΠΌ ΠΌΠ°Π³Π° 'ΠΡΠ½Π΄Π°Π»ΡΡ'" my $name = say_name $magician; # "Π½Π°Π·ΠΎΠ²ΠΈ ΡΠ΅Π±Ρ, ΠΌΠ°Π³" print $name, "\n";
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΠΊ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π½Π° ΡΠΈΡ. 14.1 ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΠΈ ΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·ΠΈ.
Π ΠΈΡ. 14.1. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Perl
ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ - ΡΡΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΡΠΎΡΠ½ΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ Π½Π΅ΠΌΡ Π½ΠΎΠ²ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°. Π Perl ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π»Π΅Π³ΠΊΠΎ ΠΈ ΠΏΡΠΎΡΡΠΎ: Π½ΡΠΆΠ½ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ ΠΈΠΌΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ @ISA ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠΏΠΎΠ»Π½ΡΡΡΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, Π½Π΅ Π½Π°ΠΉΠ΄Ρ Π²ΡΠ·Π²Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π΅Π³ΠΎ ΠΏΠΎΠΈΡΠΊ Π² ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ , ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ @ISA. ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° Wizard, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° Person:
package Wizard; # ΠΊΠ»Π°ΡΡ "ΠΠ°Π³" our @ISA = qw(Person); # ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠΌ Person use Person; # ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅Ρ Person # ... ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠ»Π°ΡΡΠ° Wizard... 1; # Π²Π΅ΡΠ½ΡΡΡ ΠΈΡΡΠΈΠ½Ρ Π΄Π»Ρ use
Π‘ΠΌΡΡΠ» Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ - Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠΎΠ², ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΊΠ»Π°ΡΡΠ°Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΎΠΏΠΈΡΠ΅ΠΌ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° Wizard Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ 'magic' ("ΡΠΈΠΏ ΠΌΠ°Π³ΠΈΠΈ" - Π±Π΅Π»Π°Ρ ΠΈΠ»ΠΈ ΡΠ΅ΡΠ½Π°Ρ):
sub magic { # ΠΌΠ°Π³ΠΈΡ - Π²ΠΎΡ ΡΡΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅Ρ Π²ΠΎΠ»ΡΠ΅Π±Π½ΠΈΠΊΠ° my $self = shift; # ΠΈΠ·Π²Π»Π΅ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ $self->{magic} = shift if @_; # ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ return $self->{magic}; # Π²Π΅ΡΠ½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ }
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ° new() ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π» Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ²ΠΎΠΉΡΡΠ² 'name' ΠΈ 'magic'. ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π·Π°ΡΠ΅ΠΌ Π·Π°Π΄Π°Π΄ΠΈΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ², ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, "Π΄Π°Π΄ΠΈΠΌ Π±Π»Π°Π³ΠΎΡΠ»ΠΎΠ²Π΅Π½ΠΈΠ΅" ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΡΠ»ΠΊΠΈ Π±ΡΡΡ ΠΌΠ°Π³ΠΎΠΌ:
sub new { # ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² my $class = $_[0]; # ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° Π² 1-ΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ my $self = new Person; # ΠΌΠ°Π³ - ΡΡΠΎ Π»ΠΈΡΠ½ΠΎΡΡΡ $self->{name} = $_[1]; # Π·Π°Π΄Π°ΡΡ ΠΈΠΌΡ ΠΈΠ· 2-Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° $self->{magic} = $_[2]; # ΠΈ ΡΠΈΠΏ ΠΌΠ°Π³ΠΈΠΈ ΠΈΠ· 3-Π³ΠΎ bless($self, $class); # "Π±Π»Π°Π³ΠΎΡΠ»ΠΎΠ²ΠΈΡΡ" ΠΌΠ°Π³Π° return $self; # Π²Π΅ΡΠ½ΡΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ }
ΠΡΠ·ΡΠ²Π°ΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠ»Π°ΡΡ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
use Wizard; # ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠ»Π°ΡΡ # ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π³Π° - Π‘Π°ΡΡΠΌΠ°Π½Π° my $wizard = new Wizard('Π‘Π°ΡΡΠΌΠ°Π½', 'black'); my $name = say_name $wizard; # "Π½Π°Π·ΠΎΠ²ΠΈ ΡΠ΅Π±Ρ, ΠΌΠ°Π³" print $name, ' ', $wizard->magic(); # 'Π‘Π°ΡΡΠΌΠ°Π½ black' print ref($wizard); # ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΡΡΠ»ΠΊΠΈ - 'Wizard'
ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΎ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° Wizard ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π½ΠΎ ΠΈ Π»ΡΠ±ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Person.
Π ΠΊΠ»Π°ΡΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ (destructor), ΠΈ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠΌΡ - DESTROY. ΠΠ΅ΡΡΡΡΠΊΡΠΎΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ: ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π²ΡΡ ΠΎΠ΄Π΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ°, Π³Π΄Π΅ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ undef($object) ΠΈΠ»ΠΈ ΠΏΡΠΈ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠ° Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° Person, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΡΠ°Π½ΠΈΠ΅ Π² ΠΏΠΎΡΠΎΠΊ STDERR, Π½Π°Π·ΡΠ²Π°Ρ ΠΈΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ say_name():
sub DESTROY { warn('ΠΡΠΎΡΠ°ΠΉΡΠ΅, Ρ ΡΡ ΠΎΠΆΡ... ' . shift->say_name); }
ΠΠ΅ΡΡΡΡΠΊΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, Π΅ΡΠ»ΠΈ ΠΏΡΠΈ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΄Π°Π»ΠΈΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΠΈΠ»ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΡΠ°ΠΉΠ»Π΅. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π°, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ Ρ ΡΡΠΈ - ΡΡΠΎ ΡΠ°ΠΌΡΠΉ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ, Π½ΠΎ Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Ρ ΡΠ°Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΊΠ°Π»ΡΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, Π»ΠΈΡΡ Π±Ρ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΡΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π±ΡΠ»ΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠ»Π°ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ bless(). ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π»ΠΈΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° Π½Π°ΠΏΡΡΠΌΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΡΡΠΈΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ΅Π΄Ρ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΠΌΠΈ, ΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°. Π’Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, ΡΡΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ Π²ΠΎΠΎΠ±ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ (read-only attribute). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Ρ ΡΡΠ° Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΎΠ΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅:
$hobbit->{magic} = 'ΠΏΡΡΡΡΠ°Ρ'; # Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ΅, ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΊΡΡΡΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ (private attributes) Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ, Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ Private::Person. Π Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΌ Ρ ΡΡΠ΅, Π½ΠΎ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π΅ Π½Π° Π½Π΅Π³ΠΎ, Π° Π½Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ. ΠΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΠΈΠΌΡ Π°ΡΡΠΈΠ±ΡΡΠ° (ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅), Π° ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠΌΡ Π°ΡΡΠΈΠ±ΡΡΠ° ΠΊΠ°ΠΊ ΠΊΠ»ΡΡ ΠΏΠΎΠΈΡΠΊΠ° Π² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅. ΠΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
package Private::Person; # ΠΊΠ»Π°ΡΡ "ΠΠΈΡΠ½ΠΎΡΡΡ" sub new { # ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ my $invocant = shift; # ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ my $class = ref($invocant) || $invocant; my $self = { # Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²: NAME => '', # ΠΈΠΌΡ ΠΈ HEIGHT => 0.0 # ΡΠΎΡΡ }; my $closure = sub { # ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ my $field = shift; # ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π°ΡΡΠΈΠ±ΡΡΠ° $self->{$field} = shift if @_; # ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΈ return $self->{$field}; # Π²Π΅ΡΠ½Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ }; # ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ bless($closure, $class); # ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡ } # ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π°ΡΡΠΈΠ±ΡΡΡ name sub name { my $self = shift; # ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ-ΡΡΠ½ΠΊΡΠΈΡ &{$self}("NAME", @_); # Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΊΡΡΡΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ } # ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π°ΡΡΠΈΠ±ΡΡΡ height sub height { # ΡΠΎ ΠΆΠ΅, ΡΡΠΎ Π²ΡΡΠ΅, Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΡΠΎΡΠ΅: &{ $_[0] }("HEIGHT", @_[1 .. $#_ ] ) } 1;
ΠΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΅Π΅, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π΅ΠΉ ΠΈΠΌΡ ΠΏΠΎΠ»Ρ ΠΈ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ. Π Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π²ΡΠ΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Ρ ΡΠ°Π½ΡΡΡΡ Π² Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅:
package main; # Π²ΡΠ·ΡΠ²Π°ΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° use Private::Person; # ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ my $elf = Private::Person->new; # ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ $elf->name("ΠΠ΅Π³ΠΎΠ»Π°Ρ"); # Π·Π°Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ $elf->height(189); # Π΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ # ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ° print $elf->name, ' ', $elf->height, ' '; print ref($elf), "\n"; # ΡΠΈΠΏ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ°: 'Private::Person'
ΠΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΡΡΠ°Π²Π½ΡΠΌ, ΠΎΡΡΠ°ΠΆΠ°Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ»Π°ΡΡΡ - ΡΡΠΎ ΠΏΠ°ΠΊΠ΅ΡΡ, Ρ ΡΠ°Π½ΡΡΠΈΠ΅ΡΡ Π² ΡΠ°ΠΉΠ»Π΅-ΠΌΠΎΠ΄ΡΠ»Π΅, ΡΠΎ Π²ΡΠ΅, ΡΡΠΎ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π»Π΅ΠΊΡΠΈΠΈ ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΈ ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ.