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

����� 10

    � ���� �����:


����������� ���������

�������� last

�������� ��������� �� ���������� ����������, ��, ��������, ������ ������: "���� �� � ���� ������������ ��� �-�������� break, ��� ���� �� ���������". ���� ���� ����� ����� � �� ��������� ��� � ������ � ��� ����� ��������� ��� ���������� � Perl-��������� ��� ���������������� ������ �� ����� last.

�������� last ������������ ����� �� ������ ����������� ����� �����, � ������� ���������� ���� ��������*, ��������� ���������� ���������, ���������� ��������������� �� ���� ������. ��������:

while (���-��) ( ���-��;

���-��! ���-��;

if (�������) {

���-�� ��� ������;

���-�� ��� ������;

last; # ����� �� ����� while }

��� ���-��/ ��� ���-��;

}

# last �������� ���������� � ��� ����� ���������

* ����������� ���� do (} while/until � ����� ������ ���������� next, last � redo ������ �� ���������.

 

���� ������� �������, �� ����������� ������ ���-��_���_������, ����� ���� �������� last ��������� ���� while.

�������� last ��������� ������ �����, ���������� ����, � �� �����, ����������� ��� ���������� ������������ �������������� �����������. ��� ������, ��� ����� ��� ���������� if � else, ����� ��� � ��� ����������� do {} while/until, "�� ���������"; ����������� ������ �����, ������� �������� ����� for, foreach, while, until � "�����" �����. ("�����" ���� � ��� ����, �� ���������� ������ ����� ������� �����������, �������� �����, ������������, ��������� if/then/else.)

��������, �� ����� ����������, ���� �� �������� ���������, ����������� � �����, ������� ������������� merlyn. ����� ��������� ����� ��������� ��������� �������:

From: merlyn@stonehenge.com (Randal L. Schwartz)

To: stevet@ora.com

Date: Ol-DEC-96 08:16:24 PM -0700

Subject: A sample mail message

Here's the body of the mail message. And here is some more.

��� ����� ���� �� ����� � ���� ��������� ������, ������� ���������� ������ From:, � ����� ����������, �� �������� �� ��� ������ ��������������� ��� merlyn.

��� ����� ���� �� ������� ���:

while (<STDIN>) ( # ������ ������� ������

if (/^From: /) ( # ���������� �� ������ �� ����� From:? ���� ��... if (/merlyn/) ( # �� ��������� �� merlyn!

print "Email from Randal! It's about time!\n";

}

last; # ������ ������ ������ From: �� �����, ������� ����� } # ����� ����� "if from:" if (/^5/) ( # ������ ������?

last; # ���� ��, ������ ������ �� ��������� > } # ����� ����� while

����� ������, ������� ���������� �� ����� From:, �� ������� �� �����, ������ ��� ����� ������ ������ ������ ����� ������. ����� ����, ��������� ��������� ��������� ��������� ������������� �� ������ ������ ������, �� ����� ����� � �� ��������� �����.

�������� next

��� � last, �������� next �������� ������������������ ���������� ���������. ������� ����� ���� ������� � ���, ��� next ���������� ��������� ���������� ���������� ����� ������ ����������� ����� �����, �� �������� ���� ����*. ������������ �������� next ��������� �������:

while (���-��) ( ������_�����;

������_ �����;

������_�����;

if (�������) {

�����-�� �����;

�����-��_�����

next;

)

������_�����;

������_ ����� ;

# next �������� ���������� � ��� ����� ��������� )

���� ������� �������, �� ����������� �����-��_�����,������_����� ������������.

��� � ��� ������������� ��������� last, ���� ��������� if �� ��������� ������, ���������� ����.

�������� redo

������ ������ �������� ���������� � ����� ����� � �������� redo. ��� ����������� ������������ ������� � ������ �������� ����� (��� ���������� ���������� ������������ ���������):

while (�������) {

# redo �������� ���������� � ��� ����� ���������

���-��;

���-��;

���-��;

if {�������) {

�����-�� ��������;

�����-�� ��������;

redo;

���_���-��;

���_���-��;

��� ���-��;

}

* ���� � ������ ����� ���� �������� continue, ������� �� �� �������������, next ��������� � ������ ����� continue, � �� � ����� ����� �����. ��� ����������� ���� � �� ��.

���� if ����� ���� �� �����������; ��������� ������ ��������������� �����.

��������� ���������� redo, ���������� last � "�����" ������, ����� ��������� ����������� ����, ������������ ������ �����:

( -...,. .

���������_��������;

���������_��������;

�� ����1��_��������;

if (�������) ( last;

} ����������1�_��������;

��������1���_��������;

�����������_��������;

redo;

}

����� ����� ������� ��� while-��������� �����, ��������� ����� �������� ������ ����������� ��� ����������������� ����� ������ ���������. (� ������� "������������ ���������" �� �������, ��� ����� ������������ �������� if � ������� ������ ������ ����������.)

�����

��� ������, ���� �� ������ ����� �� �����, � ������� ���������� ����� ���������� ����, ����� �������, ����� ����� �� ���� ��������� ������? � � �� ����� �� ���������� � ������������� ����� ��������� goto. � Perl ����� �������� �� ����� � ����� �� ��������� � ������ ������������� ����� ����� ������������ ��������� last, next � redo, �������� ����� ����� ��� � ������� �����.

����� � ��� ��� ���� ��� ����� �� ��� ������ ������������ ����, ����������� ��� �� ��������, ��� � ����� ��������, ��������, ����� � �����������. �� ������, ������, ��� � ����� ��� ������������ ����������� ������� (������������ $ � ��������, ������� & � ������������� � �.�.), ������� ����� print, � �������, ������������� �� � ����������������� ������ print, � ���� ���� �� ������������� �� �����������. �� ���� ������� ����� ��������� ����� � �������, ���������� ������ �� ��������� ���� � ����, ������� � ������� ������� �� ����� �������������� � ����������������� ������. ����� ����, ��������� ����� � ����� ������ ���������� � ������ ���������, ������� ���������� � �������� � �������������� ������� ��������.

������ ��� �����, ������� ��� ����� ����� ����������, ���������� ����, � ��������� ���������:

�����: while (�������) { ��������;

��������;

��������;

if (������_�������) { last �����;

} )

�� ������� ����� ��� �������� � ��������� last. ��� ���� ����� Perl �������� ����� �� ����� � ������ �����, � �� ������ �� ������ ����������� �����. � ������ ������, ������, � ��� ���� ������ ���� ����������� ����. ������� ���������� ������� �� ���������� �������:

OUTER: for ($i=l; $i <= 10; $i++) {

INNER: for ($j=l; $j <= 10; $j++) ( if ($i * $j == 63) (

print "$i times $j is 63!\n";

last OUTER;

}

if ($j>=$i) ( next OUTER;

} } }

���� ����� ���������� ��������� ���������� ��� ���������� ������������ ��������� ����� �� ��� ���, ���� �� ����� ������� ����, ������������ ������� ����� 63 (7 � 9). ����� ���� ��� ��� ���� ����� �������, �������� ��������� ����� ������ �����, ������� ������ �������� if ������������ ����� �� ����� ������ for, ��������� ��� ����� �������� last � ������. ������ �������� if �����������, ��� ������� �� ���� ����� ������ ����� ������, �������� � ��������� �������� �������� �����, ��� ������ ������������ ������� ���������� ���� ��������. ��� ������, ��� ����� ����� ����������� ��� ��������� ���������� ($i,$j) = (1,1), (2,1), (2,2), (3,1), (3,2), (3,3), (4,1) ��.�.

���� ���� ����� ���������� ���� ����� �����, �������� ���������� last, next � redo ��� ��������������� ��������� (�����) ��� ����� ���������������� �� ����. ����� ����, � ������� ����� ������ ���������� � ���� � ����� ������ �������� �� ����. ��������� last, next ��� redo ������ ���������� ������ �����.

������������ ���������

� �������� ��� ������ ������� ������� "���� ���, ����� ��" Perl ��������� "�����������" � ���������, ��������������� ����� ��������� ��������, ����������� if.

��������� if �����������_���������;

 

� ������ ������ �����������_��������� ����������� �� ���������� (�� ��� �� ��������, ��� � ������). ���� ��� �������, �� ����������� ���������. ��� �������������� ������������ �����������

if (�����������_���������) { ���������;

}

������ � ������ ������ �������������� ����� ���������� �� �����, �������� �������� ������ ������, � ��������� ������ ���� ������� (�.�. �� ����� ���� ������ ����������). �� ������ �������, ������, ����� ��������������� ������ ����������� �������� ������������ �������� ������� �������. ��������, ��� ��� ����� ����� �� ����� ��� ������������� ������������� �������:

LINE: while (<STDIN>) (

last LINE if /"From: /;

}

������, ��������� ����� ����� ������? ����� ����, �� ���� ������ ��������� �� �� ���������� �����: "��������� ������, ���� ��� ���������� �� ����� From".

����� ��������� ����, ���������� � ������ ����� � ��������������:

�����2 unless �����!; # ��� unless (������) ( �����2; ) �����2 while �����!; # ��� while (�����!) ( �����2; } �����2 until �����!; # ��� until (�����!) { �����2; }

�� ���� ���� ������ ������� ����������� �����!, � ����� � ����������� �� ���������� ���-�� �������� ��� �� �������� � �����2.

��������, ��� ��� ����� ����� ������ �� ������� ������� ����� 2, ������� ������ ��������� �����:

chomp($n = <STDIN>) ;

$i = 1; # �������� ������������� $i *= 2 until $i > $n; # ���������, ���� �� ����� �������

��� ������, �� ����� ���������� ������� � ������� ������. ��� ����� ������ ���������� ���� � ������: ������ ������� ������ while �����2 if �����!. ��� ����������� ���, ��� ����� �����2 if �����! � ��� �� ���������, � ����������� ��������; ����� ��������� ����������� ������� ������.

�������� && � || ��� ����������� ���������

�������� & & � | | � ������ ��������� ������ �� ����� ���������� ��� ���������� ���������. ����� �� ������� �� ������������ �����������? � Perl �������� ����� ���, ������� ������� ����������, ��� �� ����� ������� � ����.

��� ����� ���������� ������������ � ���������� "���� ���, ����� ��". �� ��� ������ ��� �������� �����:

if (���) ( ��; } # ���� ������ �� if ���; # ������ ������

��� ������ (������ ������, ������ ��� � �� ���� � ������):

��� && ��;

������ ��� ��������? ����� ��� �� �������� "���������� �"? ������� ���������, ��� ����������, ����� ��� ��������� �������� "������" ��� "����".

� ���� ��� � ������, �� �������� ����� ��������� ��� ����� �� ��������, ������ ��� ��� ������� �� �������� �������� ��. ������� ����� ��������� ��.

� ���� ��� � ����, �� ��� ��������� ����� ������ � ��� �������� ������ �������� �� ��. ��������� ��������� �� ������ ���, ��� ����� ����������.

��� ��� ��� � ������ Perl � ��������� �� ���� � ��� ������, ���� ��� �������, ��� ������ ������ ����� ������������� ���� ����������.

����������� ������� "���������� ���" ��������, ��� �������� unless (��� ����������� unless). �� ������ ��������

unless (���) ( ��; )

��

��� 11 ��;

���� �� ������, ��� ������������ ��� �������� � shell ��� ���������� ��������� ��������� ����������, �� �������, ��� � Perl ��� �������� ������.

����� �� �� ���� ���� ������������? ��� ������� �� ������ ���������� (������), �� ����, ��������� ������ ����� ���������, �������, �� ����, ����� �� ��� ��������� ��������� � ������� ������ ��-�� ���������� �����������. �������� ��������� ����� ������ � ����������, ��� ��� ������. � ���, ��������, �� ���������� ������� ������� �� ���� ��������. ����� ���������� ������� ����� ������ ����� ��������� ������, ����� ������������� �� ��� ��������.

����������

������ � ����������� ��������� � ���������� �.

1. ������������� ���������� �� ���������� ����� ���, ����� �������� ����������� �� ��� ���, ���� � �������� ������ �� �������� �� ����� ������� ����� end. (�����: ����������� ����������� ����, � ����� ��������� �������� last, ���� ����� �� �������� ����� end.)

2. ���������� ���������� �� ����� 4 (������������ ����� �� ��������� ����� 999), ��������� ���� � ������� �� ��������. (�����: ����������� "�����" ���� � ���������� redo � �����, ����� �������� ����������� ����, � �������� last � ��������, ������������� ��� ���������� ������������ �������.)




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


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