����� 8� ���� �����:
����� ���������������� ������� ������������ �������� ��������� ��������� ���������� � �������� ������������� ����������, ��������� ��� ������ ������� local ����������� ��������� my() ���������� ��������� ������ ���������� ��������� ��� ������� �� ����������� ����������������� ���������, �������� chomp, print � �������, � ������������ ���. ������ ������� ���������� �������, ������� �� ������ ���������� ����. ����������� ���������������� ������� ���������������� �������, ���� ���������� �������������, ������������ � Perl-��������� � ������� ��������� �����������: sub ��� { ��������_1; ��������_2 ; �������� 3; } ����� ��� � ��� ��� ������������, ������� ����� ���� ����� ������ ����� ���, ������� �� ������ ��������� ����������, �������� � �����. ����� ����������, ��� ��� ����� �������� � ������ ������������ ����, ������� � ��� ����� ���� ��������� ���������� $fred, ������ @fred, ��� %fred, � ������ � ������������ fred*. * ����� ��������� ��� ������������ ��������� �� ������� sfred, �� ������������ ������ ���� ������� ���������� �����.
���� ����������, ��������� �� ������ ������������, ���������� �� ������������. ����� ��� ������������ ����������, �� ���� ����������, �������� � ���, �����������, � ����������� ������� �������� ��������������� ������������ �������� (��� ����� ������� ����). ���, ��������, ������������, ������� ������ ���������� �����: sub say_hello ( print "hello, world!\n"; } ����������� ����������� ����� ������ � ����� ����� ������ ��������� (��� ���������� ��� ������������), �� ������ �� ��������� � ����� ����� ���������, ����� �������� ����� ��������� ���������� � ������. (���� ��� ����� ����������� ������ ��������� �� ����� �������, ������ �� �������� ��������� ���� ������������ � ������, � ����������� ��������� � � �����. ��� ���� ����.) ����������� ����������� ���������*; ��������� ����������� �� ������. ���� � ��� ����� ��������� ��� ����������� ����������� � ���������� ������, �� ������ ����������� �������� ������ ��� ��������������**. � ���� ������������ �� ������ ���������� � ����������, ������������ � ������ ������ ��������� (���������� ����������), � ����������� �� ��������. �� ��������� ����� ������ �� ���������� � ���� ������������ ��������� � ���������� ����������. �� ����������� �� ����� ������� �� ��������� � ������� "��������� ���������� � ��������". � ��������� �������: sub say_what { print "hello, $what\n"; } ���������� $what �������� ���������� ����������, ������� ����� �������������� ����� � � ������ ������ ���������. ����� ���������������� ������� ��� ������ ������������ �� ������ ��������� ���������� ��������� ����� �� ����� ������� ������, ��������: say_hello(); # ������� ��������� $� = 3 + say_hello() # ����� ����� �������� ��������� for ($� = start_value(); $� < end_value(); $� += increment �) ( } t ����� ���� ����������� ��� ����������� �������� * ������, ��������� ��� �������� ������, �� ��������� � ���� ����� ��������� ������ �� ���������������, �� ������ ������� ����������� ����������� ����������� ��� ���� ���������. ** ���� ������ �� �� ���������� ��������� � ������ -w.
���� ������������ ����� �������� ������ ������������, �������, � ���� �������, ����� �������� ������ ������������ � �.�., ���� ��� �������� ������ �� ����� ��������� �������� �������� � �� ��������� ������������ �����������. (���� ���������� ������������ ���� �� ������������ �����-�� 8 ��� 32 ������ ����������� �����������.) ������������ �������� ����� ������������ ����� ������ �������� ������ ���������� ���������. ���������, ���������� ����� ���������� ������������, ���������� ������������ ���������. ������������ �������� ������������ ����� ��������� ���������� ��������� return ��� ���������� ���������, ������������ � ������������. �������, ��������, ��������� ����� ������������: sub sum_of_a and_b ( return $a + $b; } ��������� ���������, ����������� � ���� ���� ������������ (���������� ������������ ����������� ���������), � ����� ���������� $� � $�, ������� ��� ����� � ����� ������������ ���������. ��� ��� ��� ��� ��������: $� = 3; $b = 4; $� = sum_of_a_and_b(); # $� ������������� �������� 7 $d = 3 * sum_of_a_and_b(); # $d �������� �������� 21 ��� ���������� � ��������� ��������� ������������ ����� ���������� ������ ��������. ���������� ����� ������������ � �� �����: sub Ii st_o f_a_and_b { return($a,$b) ; } $a = 5; $b = 6; @c = list_of_a_and_b(); # @c ������������� �������� (5,6) ��������� ����������� ��������� ������������� �������� ��������� ����������� ���������, � �� ��������� ���������, ������������ � ���� ������������. ��������, ��������� ������������ ���������� $�, ���� $� > 0; � ��������� ������ ��� ���������� $�: sub gimme a_or_b ( if ($a > 0) ( print "choosing a ($a)\n"; returns $a; ) else ( print "choosing b ($b)\n"; returns $b; } }
��� ��� �������� ����������� �������. ������ ����� ������� �����, ���� ������ ����, ����� ���������� �� ���������� ����������, �� ������ ���������� � ������������ ��������, ������ ��� ������� ������. ������ � ����� �� ������ � ��������. ��������� ����������, ������������, ����������� ���� ������������ ��������, �������, ������ ����� ���� ��������� ���������� ����� ���������, ����� �� ������� ���������� � ������������ ���������. � Perl ����� ������ ������������ ������� ������, ����������� � ������� ������, ������� ������������ �������������� ������������ ��������� ������� ������ �� ������ ���������� ���� ������������ ����������� ���������� � ������ @_. ������������ ����� ���������� � ���� ���������� � �������� ����� ���������� � �� ��������. ��������: sub say_hello_to ( print "hello, $_[0]!\n" # ������ �������� } ����� �� ����� ������ �� $_[0] � ������ ������� ������� @_. �������� ��������: �������� �� ������� ��������, �������� $_ [ 0 ] (������ ������� ������� @_) �� ����� ������ ������ � ���������� $_ (��������������� ��������� ����������). �� ������� ��! �� ����� ���� �����, ��� ������������ ������������ ����, ��� ��� �� ��������� � �������� ������� ���������. ��� ������, ��� �� ����� ������� ���: say_hello_to("world"); # ������ hello, world $� = "somebody"; say_hello_to($x); # ������ hello, somebody say_hello_to("me")+say_hello_to("you"); # � ������ ������������ ���� � ��� � ��������� ������ ������������ �������� ���� ������������ �� ����, ������ ��� ����������� ����� Perl ������� ������ ��������� ��� �� ���������, ������� ������������ ���� ������� ������. ��� ������ � �������������� ����� ������ ���������: sub say ( print "$_[0], $_[!]!\n"; } say("hello","world"); # ����� hello world say ("goodbye", "cruel world"); # goodbye cruel world - ���������� ����� �� ������� ���������� ��������� ������������, �.�. ���� �� ������� �� ������������ � $_ [ 3 ], ����� Perl ��� ��������� ��� �����. ����������� ��������� ����� ������������, � ���� �� ����������� ���������� �� ������� ������� @_, ��� � ������ ������� �������, �� ������ �������� � ����� undef. ���������� @_ �������� ��������� ��� ������������. ���� ��� @_ ����������� ���������� ��������, �� ��� ����� ������� ������������ �����������, � ����� �������� �� ������������ �����������������. ��� ����� ��������, ��� ������������ ����� ���������� ��������� � ������ ������������, �� ����� "��������" ����������� ���������� @_; ��������� ����� ������������ ����� ��� �� �������� ����������� ���������� @_. ������� �������� � ��������� �������� � � b �� ����������� �������. ��� ������������, ������� ���������� ����� ��� ��������, � ������ ��� ��������, ������������ � ��� ��� ���������: sub add_two { return $_[0] + $_[!]; 1 print add_two(3,4); # ������� �������� 7 $� = add_two(5,6); # $� �������� �������� 11 ������� ������� ��� ������������. ���, ���� ��� ����� ������� 3, 4 ��� 100 ��������? ��� ����� ���� �� ������� � ������� �����, ��������: sub add ( $sum = 0; # ���������������� ����� foreach $_ (@_) { $sum += $_; # ��������� ��� �������� } return $sum # ��������� ����������� ���������: ����� ���� ��������� } $� = add(4,5,6); # ���������� 4+5+6=15 � ����������� ���������� $� print add(1,2,3,4,5); # ������� 15 print add (1..5); # ���� ������� 15, ������ ��� ������ 1..5 ������������ ���, ���� �� ���������� � ������ $sum �������������� � ��� ������? ��� ������ ������������ add �� ������ �������� �� �� ��������. � ��������� ������� �� ������, ��� �������� �����. ��������� ���������� � �������� �� ��� �������� � ���������� @_ � � ���, ��� ��� ������ ������������, ���������� � �����������, ��������� ��������� ����� ���� ����������. �� ������ ��������� ����������� ��������� ����������, ����������-������� � ���-����������, ������� ����� �������� ����� ��� ��. ��� �������� � ������� �������� ��, ������� �������� ������ ���� ���������� � ������� �� ��������� ������ (��� ����������, ���� ��� ��� ������ ��������). ��� ����� ������� add, �� ���� ��� ����������� �� ������ �������� ��: sub add { �� ($sum); # ������� $sum ��������� ���������� $sum =0; # ���������������� ����� * foreach $_ (@_) ( $sum += $ ; # ��������� ��� �������� } return $sum # ��������� ����������� ���������: ����� ���� ��������� } ����� ����������� ������ �������� � ���� ������������, ������� �������� ���������� ���������� $sum ����������� � ��������� ���������� ����� ���������� � ������ $sum (� ��������� undef). ��� ������ �� ������������ Perl ����������� ��� ��������� ���������� � ��������������� ���������� (����������) ��������. ��� ����� �������� ���� � ��� ������, ���� ���������� $sum � ������� ������ �������� ��������� ����������, ������ �� ������ ������������ (���, ������� �������� ������ ������������, ��� ���, ������� �������� ��, ������� �������� ������ ������������, � �.�.). ���������� ����� ����� ����� ��������� ��������� ������, �� ������������ ����������� ���������� ������ � ����� �� ���. ��� ������ �������� ������ ���� ��������� �������, �������� ������� ��������� ����� 100: sub bigger_than_100 ( my (Oresult); # ��������� ��� �������� ������������� �������� foreach $_ (@_) ( # ������ �� ������ ���������� if ($_ > 100) ( # ��������? push(@result,$_); # ��������� } ) return Oresult; # ���������� ������������� ������ } ���, ���� �� ��� ������������ ��� ��������, �������� ������� ��������� 50, � �� 100? �������� �� ��������������� ���������, ������� 100 �� 50. � ���� �� ��� ���� ����� � ��, � ������? � ���� ������ ��������� �� �������� 50 ��� 100 ������� �� ����������. ����� ��������� ��������� �� ���: sub bigger_than ( my($n,@values); # ������� ��������� ���������� ($n,@values) = @_; # �������� �� ������ ���������� �������� ������� # � �������� ������� my (@result); # ��������� ���������� ��� �������� ������������� 4 �������� foreach $_ (@values) ( # ������ �� ������ ���������� if ($_ > $n) { # ��������? push(Oresult,$_); # ��������� } ) @result; t ���������� ������������� ������ } # ������� ������: @new = bigger_than(100,@list); # @new �������� ��� �������� Olist > 100 @this " bigger_than(5,l,5,15,30); # @this �������� �������� (15,30)
�������� ��������: � ���� ��� �� ������������ ��� ��� ��������� ����������, ����� ��������� ����� ����������. ��� � ������ ���������������� ��������, ������ ��� ������� ������� (�� � ����������) ������������ ���������� $� � $values, ��� ��������� $_[0] � @_[1. . $#_]. � ���������� ���������� �������� my ��������� ������, ������� ����� ������������ � ����� ����� �������� ������������. ����� ������ ����� ����������� ��������� �������� ��� ������ �� ����� ��������� ����������. (���� �������� ������ �� ���������, �� ����� ���������� ������� ������� �������� undef, ��� � ����� ������ ����������.) ��� ������, ��� �� ����� ���������� ������ ��� ��������� ���� ������������, �.�. ��������� my($n,@values) ; ($n,@values) = @_; # �������� �� ������ ���������� �������� ������� # � �������� ������� �������� �� my($n,@values)= @_; ���� ����� ����� ������������� � Perl. ��������� ����������, �� ���������� �����������, ����� ����� �� �������� ����������� ����������� ��������, ��������: my($sum) = 0; # ���������������� ��������� ���������� ������ � ����, ���, �������� �� ������� ����������, my � ���������������� ������������ ����� ����������� ��������. ��������� ���������� ������ � Perl ������� � ���, ��� ��� �������� my ������ ���� ��������� � ������ ����������� ������������, �� ����, ��� ���������� ���������� �������� ����������� � ��� ��������. ������������� ����������, ��������� ��� ������ ������� local � Perl ���������� ��� ���� ������ �������� "�������" ��������� ���������� � � ������� ������� local. ����� ������ �������� ����� my � local. ��������: $values = "original"; tellmeO ; spoof() ; tellmeO ; sub spoof ( local ($value) = "temporary"; tellmeO ; > sub telime { print "Current value is $value\n"; } �� ������ �������� ���������: Current value is original Current value is temporary Current value is original ���� �� ������ local �� ������������ my, �� ��������� ������� ���������� $value ��� �� �������� ������ � �������� ������������ spoof (). ��� ������������� ������� local, ��� ����� �� ����������� ���������, ��� ��������� �������� �� ������ ���������; ��� �������� � �� ���� ��������� �������������, ���������� �� spoof (). ����� ������� ������: ��������� ���������� �������� ��� �������, ���������� �� ���� �����, � ������� ��� ������� ���������. �������� my ����� ������������ ������ ��� ���������� ������� ��������� ����������, ����������-�������� � ���-���������� � ������-��-��������� �������, ����� ��� ��� ���������� local ����� ����������� �� �����������. ����� ����, ���������� ���������� Perl, ����� ��� $_, #1 � @argv, � ������� my ��������� ������, � ��� � local ��� �������� ���������. ��������� $_ ������������ � ����������� Perl-��������, �� �����, ��������, �������� �������� ������ local $_; � ������ ����� ������������, ������� ���������� $_ ��� ����������� ����. ��� ����������� ����������� ����������� �������� � ��� �������������� �������������� ��� ������ �� ������������. �� ����� ��������� ������ ���������������� ���, ��������, ����� ����� �����, ��� ����������, ����������� �������� local, � ���, �� ���� ����, ��������������� ���������� ����������, �.�. �������� ���������� ���������� ����������� � �������� ���������� �������� ����������� ���������. � ����������� ������� ����������� ������������ �� local, a my, ������ ��� ��� �������� ��������� ������� � ��������. ����������� ��������� my() ���������� ��������� ������ �������� my () ����� ����� ������������ �� ������� ������ ���������, ��� ���� ����������� � ������. ���� � ���������� �� ����� �������� "���������" ���������� � ��������� ���� ������, ��� ����� ��������� ���������� ��������, �������� ��� ������������� � ��������� � ���\-�������* use strict; * ������ � ��� ��������� �����������. ����� ���� �������� � ��������� ������� ������������� �������������� ��������, ���������� �������� ��������, ������������ �������������� ��������� �������������� � ��������� �� �������. ��� ��������� ������� � ����� 7 ����� Programming Perl � �� man-�������� perlmodlib(l).
���� ��������� ��� ������ � ������ �����, �� �� ������ �� ������� ������������ ���������� (���������, ������� � ����), ������� �� "�������" ��. ����������� ��� � ������� �������� my () ��������� �������: use strict; my $�; # ������� �������� undef my @b = qw(fred barney betty); # ��������� ��������� �������� push @b, qw(wilma); # ����� ����� ������ ��� ������? @� = sort @b; # HE ������������� �� ����� ���������� ��������� �������� ����� ������� ������ ������, ������ ��� �� ��������� � ����������, �� ����������� ����� � ������� �������� my (�.�. @�). ������� �������, ���� ��������� ���� �� ������ �������� �� ��� ���, ���� �� ����� ��������� ��� ������������ ����������. ������������ ��������������� ���������� ���������� ������: 1. ���� ��������� ����� �������� ��������� ������� (��������� � ����������, ��������� � ������� my, ������������ ��������� �������, ��� � ������� ����������).* 2. ������� ������� ����� ���������� ������ ������, ������ ��� �� ������ �� ������� �������� ���������� � �������������� ���������� $ freed, ����� ��� ����� ����� ���������� $fred. �� ���� ������� ������ ������������, ������� �� Perl, ������������� �������� ������ ����� ��������� ������� use strict. ���������� ������ � ����������� ���� � ���������� �. 1. �������� ������������, ������� ����� ��������� � �������� ��������� �������� �������� �� 1 �� 9 � ���������� ���������� �������� ����� ����� (�.�. one, two � �.�.). ���� �������� �� ����������� ���������� ���������, ������������ ������ ���������� ������ ����� �������� �����. ��������� ������ ������������, ����� �����-������ ������. ��� ������ ���� ������������ ���, ��������, �������� �������� �����-�� ���. (�����: ��� ������������ �� ������ ��������� �������� �����-������.) 2. ���� ������������ �� ����������� ����������, �������� ���������, ������� ����� ����� ��� ����� � ���������� ��, ������� ��������� � ������� Two plus two equals four. (He �������� ������ ������ ����� � ��������� �����!) 3. �������������� ��� ������������ ���, ����� ��� ���������� �������� �� negative nine �� negative one � zero (�.�. ��������� ����� �� ��������� �� -9 �� -1 � ����). ���������, ��� ��� ����� �������� � ��������� �� ���������� 2. * "������� ����������" � ���� ������ � ���������� ������ (������� $� � ���, �� ���� ����, $main:: �). ����������, ��������� � ������� my (), �� � ���� ����� �� ������. |