����� 5� ���� �����: ����
��� ����� ��� ���* ����� �� ������, ������� �� ������������� ����, ���, ��� ������������ ����� ����� ��������� ������, ��������� �������� �������� ���������� �� ���������� ��������. � ������� �� �������, ��������� �������� ���� � �� ����� ��������������� �����, � ������������ �������. ��� ������� (���������� �������) ������������ ��� ������� �������� �� �������. �������� ���� �� ����� � �����-�� ���������� �������. ������ ������������� �� ��� ������ ����������������� ��������. ������� �������� ������ �������� � ��� ����, � ������ � ��������. ������ ���, ����� �� ��������� � ��� ��������, ��������� ����� ��������. ����� ����� �������� ��������, �� ���������� ����, � Perl ������� ����������� ��������. ������� ������� ��������, �� ���� ����, ���� �� ������. Perl ������ ��� �������� (�.�. ���� ����-��������) � ������ ���������� �������, ������� ��������� ����� ���������� ��������, ������� ��� ������ �� ���������� ������������� ��� ����. ������� �������� �������� �������� ������, ��� ��� ���� � �� ���������**. ���-���������� ��� ���-���������� ������� �� ����� �������� (%) � �����, �� ������� ����� ���� ������ �����, ����� � ����� ������������� ������ �� ���� � ������. ������� �������, ����� ����� ����� ����� �������� ������ �� * � ������ ������������ ���� ���������� �������������� ���������, �� �� ��������� ������ ��������� � ����� ����������������� ������� ����� ������������ ������, ��� ������ �������� ��� ������� ����� ������� ����������� ������. ** ������ ���� IxHash � DB_fiIe ������������ ��������� ������� ������������, �� ����� ������������� �������� ������������������.
��������������� ����� ���� ��������� ���������� � ��������. ����� ����, ����� ��� ��, ��� ��� ������� ����� ����� $fred � @fred, ���-���������� %fred �� ����� ������ ������ � ���������� ���������. ���� ����� ��� ��������� � ������������ ����� ��������� � ��� ���������, � �� �� ����� ����. ������ ������� ���� � ��������� ��������� ����������, ��������� ����� ������, �������������� ����� ��������� �������� � ���������� ������. ���, ��������� � ��������� ���� %fred ������������ ����� �������� $fred{ $����}, ��� $���� � ����� ��������� ���������. ����� ����������, ��� ��������� � �������� ���� ������� ����� ����������, ������ ��������� �� ����� ���� �������. ��� � � ������ � ���������, ����� �������� ���� ��������� ����� ������������ ��������: $fred{"���"} == "bbb"; # ������� ���� "���", �������� "bbb" $fred(234.5} = 456.7; # ������� ���� "234.5", �������� 456.7 � ������� ���� ���������� � ���� ��������� ��� ��������. ��� ����������� ��������� � ��������� (�� ��������� ������) ������������ ����� ���������� ��������: print $fred("���"); # ������� �� ����� "bbb" $fred{234.5) += 3; # ������ �������� ������ 459.7 ��� ��������� � ��������������� �������� ������������ �������� undef (��� � ��� ��������� � �������������� �������� ������� ��� � �������������� ��������� ����������). ����������� ������������� ���� � ��� ����� ���������� ������������� ���������� � ���� ������� � ��������, ����� ���������������� ��� ��� ����������� � ������ ���. ���������� � Perl �������� ������������ ������� ��� ���� �� �������������, ������� �� ������ �������������� � ���� ������. ������ ���� ��������� ����� ������ (� ������� ������ ������ ���� ������ ����� ���������) ������ ���� � ��������������� ��������. ��� ����������� ������������� ����� ���� ��������� ������� ����, ������� ����� ���������� ��� �� ����� ���. ������� �������: @fred_list = %fred; # @fred_list �������� �������� # ("���","bbb","234.5","456.7") %barney = @fred_list; # ������� %barney ��� %fred %barney = %fred; # ���������� ����� ���������� ���� ������ %smooth � ("���","bbb","234.5","456.7") ; # ������� %smooth ��� %fred �� ����������� ��������
������� ��� ����-�������� � ���� ����������� ������� ������������ � �������� �� ���������. ���� ���� �� ������� ������� �����-�� �������� ��� �������� ��� �������, ������������ ����������� ������ ��� ����� ����� ������ � ��� �������, ������� Perl ������ ��� ����������� ������������ ������� � ��������� ���������. �� �� ����� ���������� ������������������ ������������ ������. ���� �� ���������� ������ �����������-������������� � ����������� ���-�������� � ������ ���-����������: %���� = %original; # ���������� �� %original � %���� ��������� �������� reverse, ����� ������� ���, � ������� ����� � �������� ���������� �������: %backwards = reverse %normal; �������, ���� %normal ����� ��� ���������� ��������, �� � %backwards ��� ����������� � ���� �������, ������� ������ �������� ����� ����� ��������� ������ ��� ������ � ����������� ������� � ����������. ���-������� � ���� ������� ����������� ��������� �������, ��������������� ��� ��������� �����. ������� keys ������� keys( %���_����) ������ ������ ���� ������� ������, ��������� � ���� %���_����. ������� �������, ���������� ���� ������� ������������ ����������� ���� ��������� ������ � ��������� �������� (������, ������, ����� � �.�.) ����� ������������� ���� %���_���� � ��������� ���������, ������ ������� keys ���������� �� ������ � ���� �������. ���� �������� � ���� �����������, ������� keys ���������� ������ ������. �������� ��� ������� � ���� �� ���������� ��������: $fred("aaa"} = "bbb"; $fred{234.5) = 456.7; Olist = keys(%fred); # @list �������� �������� ("���",234.5) # ��� (234.5,"���") ��� � �� ���� ��������� ���������� ��������, ������� ������ �� �����������: ������� keys %fred ��������� ��������� keys (%fred). foreach $key (keys (%fred)) ( # ���������� ��� ������� �������� ���� %fred print "at $key we have $fred($key}\n"; # �������� ���� � �������� }
� ���� ������� �������� �����, ��� ��������� �������� ���� ����� ����������������� � ������ � ������� ��������. ���� ���, ������, ��������������� ����� ������� ������*. � ��������� ��������� ������� keys ������ ����� ��������� (��� ����-��������), ������������ � ����. ��������, �� ������ ��������, ���� �� ���, ���: if (keys(%xeni)) { # ���� keys() �� ����� 0: ...; # ������ �� ������ ) # ... ��� ... while (keys(%xem) < 10) { . . .; # ���������� ����, ���� ������ 10 ��������� } ��� ���� ����� ������, ���� ��� ��� ���, ����� ������ ������������ ������� %��� � ��������� ���������: if (%���) ( # ���� "������", � ��� ���-�� ���� # ���-�� ������� ) ������� values ������� values (%���_�������) ���������� ������ ���� ������� �������� ���������� ������� � ��� �� �������, � ����� ������� keys ( %���_�������} ���������� �����. ��� ������, ������� ������ �� �����������. ��������: %lastname =0; # ������� %lastname ������ $lastname("fred"} = "flintstone"; $lastname("barney"} = "rubble"; Olastnames = values(tiastname); # �������� �������� ������ @lastnames ����� ��������� ���� �������� ("flintstone", "rubble"), ���� ("rubble", "flintstone"). ������� each ��� ���������� ����� ��� ���� ����� (�.�. ��� �������� ������� ��� ��������) ����� ������������ ������� keys � �������� �������� �� ������������ �� ������. �������������, ���� ����� ������ ������������, �� ���� � ����� ����������� ������ � ������� each ( %���_����), ������� ���������� ���� ����-�������� ��� �������������� ������. ��� ������ ���������� ���� ������� ��� ������ ���� ������������ ��������� ���� ����-��������, ���� �� ����� ��������� ��� ��������. ���� ��� ������ ���, each ���������� ������ ������. * �����, � ��������, � ������� �����, �� ����� � ������ �� �� �������.
��������, ����� ������ �� ���� %lastname �� ����������� �������, ����� ������������ ����� �����: while ( ($first,$last) = each(%lastname)) { print "The last name of $first is $last\n"; } ������������ ������ �������� ����� ���� ���������� ������� each ������� � ��� ������. ���������� ��������� � ��� � �������� �� ���� ��������� � ���� ���������� ����� ������ ����� "��������" ������� each (� ���, ��������, ����). ������� delete ����, �� ������ ��������� �������� � ���, �� ���� �� ������ ������� �� (����� ��� ����� ������������ ������ �������� ����� ����). ��� �������� ��������� ���� � Perl ������������ ������� delete. ������� ���� ������� � ���-������, ����������� ���, ������� ������������ ��� ���������� ����������� �������� �� ����. Perl ������� �� ���� ��������������� ������ ���� ����-��������. ��������: %fred = ("aaa","bbb",234.5,34.56); # �������� � %fred ��� �������� delete $fred("aaa"}; # ������ � ���� %fred ������ ���� ���� ����-�������� ����� ����� ��� � � ������ � ����������-�������� (��� ��������� ���������), ����� ��������������� ������ ����, ��� ���� ����������� ���������� �� � ������ ��� ��������, � ������������ � ������ ���������. �������, � �������, ���������� ���� � �����: $score("fred"} - 205; $score("barney"} = 195; $scoref"dino"} = 30; ��� ��� ����� �������� ����� �������: ($score("fred"},$score("barney"),$score("dino")) � (205,195,30); �� ���� ��� ������� ������, ������� ������� ���������� ���� ����: $score{"fred","barney","dino"} = (205,195,30); ��� ��� ������� ������. ����� �������� ������������� ����� ���� � ������������ ����������: @players = qwffred barney dino); print "scores are: @score(@players}\n";
����� ����� ����� ����� ������������ ��� ������� ���������� ���� � ����� �������. � ���� ������� ������� ��� ����� ��������� � ��� ������, ��� ��� ������� ������-���������� ������������ �������� �� �������� ����: @league{keys %score( = values %score; ����� �������� ���� %score ��������� � ����� %league. ��� ������������ ���������� ������� ����� ��������� ��������: %league = (%league, %score); = # ����� %score � %league ���������� 1. �������� ���������, ������� ������ ������, � ����� ������� ��� ������ � ��������������� �� �������� �������� ����������� ���� �������:
2. �������� ���������, ������� ������ ��� ���� (�� ������ � ������) �� ����� �����, � ����� ������� �� ����� ������ � ���, ������� ��� ����������� ������ �����. (�������������� ������: ������������ ������������ �� ������ ����� �� �� ASCII-��������� � ������� ����������� ���������.)
|