| ���������� | ����������� | �������� | ������
| ����� 1 | ����� 2 | ����� 3 | ����� 4 | ����� 5 | ����� 6 | ����� 7 | ����� 8 | ����� 9 | ����� 10
| ����� 11 | ����� 12 | ����� 13 | ����� 14 | ����� 15 | ����� 16 | ����� 17 | ����� 18 | ����� 19
| ���������� � | ���������� � | ���������� � | ���������� � |

����� 8

    � ���� �����:


�������

�� ��� ������� �� ����������� ����������������� ���������, �������� 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 (), �� � ���� ����� �� ������.




|     �����     |     ������     |


| ���������� | ����������� | �������� | ������
| ����� 1 | ����� 2 | ����� 3 | ����� 4 | ����� 5 | ����� 6 | ����� 7 | ����� 8 | ����� 9 | ����� 10
| ����� 11 | ����� 12 | ����� 13 | ����� 14 | ����� 15 | ����� 16 | ����� 17 | ����� 18 | ����� 19
| ���������� � | ���������� � | ���������� � | ���������� � |