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

����� 7

    � ���� �����:


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

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

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

���������� ��������� ������������ ������� �����������, � ���������, UNIX-���������, ����������� grep, sed, awk, ed, vi, emacs � ���� ���������� shell. � ������ ��������� ������������ ���� ����� ������������ (������� ������ ��� ���������). Perl � ������������� ������������ ���� ���� �������: ����� ���������� ���������, ������� ����� �������� � ����� �� �������� ��������, ����� ���� �������� � �� ����� Perl, �� �� ����������� ���� �� ���������.

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

���� �� ��� ����� ���� ����� � �����-�� ����� ��� ������, ���������� ������ abc, �� ����� �� ������������ ������� grep:

grep abc somefile >results

� ���� ������ abc � ���������� ���������, ������� ������� grep ������� � ������ ������� �������. ������, ��������������� ����� ����������� ���������, ���������� �� ����������� ����� � �������� � ���� results (��� ��� � ��������� ������ ����� �������� �������������).

� Perl �� ����� ���������� ������ abc � ���������� ���������, �������� �� ����� ������:

if (/abc/) ( print $_;

}

�� ��� �� ��������� � ���������� ���������� abc � ������ ������? �� ���� ������ �������, ���������� $_! ���� ���������� ��������� ��������� ����� ������ (��� � ���� �������), �� ���������� $_ ��������� � ���������� ����������. ���� �������� ���������� ��������� � ���������� ����������, �������� ������������� ���������� �������� "������". � ��������� ������ ��� ���������� "����".

� ������ ������� ��������������, ��� ���������� $_ �������� �����-�� ������ ������ � ���������, ���� � ����� ����� ���� ������ �������������� ������������������ �������� abc (����������� �������� ���������� ����������� ���� ������� grep. ������ � ������� �� grep, ������� ��������� ����� �������� �����, ������ �������� Perl-��������� ������������� ������ ���� ������). ����� �������������� ��� ������, �������� �������� �����:

while (�) (

if (/abc/) { print $_;

> )

� ���, ���� �� �� �����, ������� �������� b ����� ����� � � �? �� ���� ��� ����� ������, ���� �� ����� ������� �� ����� ������ ������ � ��� ������, ���� ��� �������� ������ �, �� ������� ������� �� ������ ��� ����� �������� b � ������ �? ������� � grep, �� �������� �� ���:

grep "ab*c" somefile >results

(��������, ���������� ���������, �������� � �������, ������ ��� �� �� �����, ����� shell ��������� ��� ���, ��� ����� ��� ����������, ������������� � ����� �����. ����� ��������� ���������, �� ����� �������� � grep ��� ����.) � Perl �� ����� ������� �� �� �����:

while (�) {

if (/ab*c/) ( print $_;

) >

 

��� � � grep, ����� ������ ���������� ������������������, ���������� ������ �, �� ������ ��� ����� �������� b � ������ �.

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

��� ���� ������� ��������, � ������� ������������ ���������� ���������, � �������� ������, ����������� ������� ����� ������, ��������������� ����������� ���������, ���������� ������ �������. �������� ������ ������ �� ������� s UNIX-������� sed: ��� ������� �� ����� s, ����� �����, ����������� ���������, ��� ����� �����, ���������� ������ � ������� ����� �����:

s/ab*c/def/;

���������� (� ������ ������ $_) �������������� � ���������� ���������� (ab*c). ���� ������������� ��������� ��������, �� ��������������� ����� ������ ������������� � ���������� ������� (def). ���� ������������� ��������, ������ �� ����������.

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

�������

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

�������, ������������ ���� ������

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

��������� �� ����� ��������� �������� ������������� � ����� ("."). ����� ���������� ����� ��������� ������, ����� ������� ����� ������ (\�). ��������, ������� /�. / ������������� ����� ������������� ������������������, ������� ���������� � ����� � � �� �������� ������������������� "�\�".

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

/[abode]

������������� ������, ���������� ����� �� ������ ���� �������� ���� ��������, ����� ��� �������

/[aeiouAEIQU]

������������� ����� �� ������ ���� �������, ������ ��� ��������, ��� � ���������. ���� �� ������ �������� � ������ ������ ���������� ������ (]), ��������� ����� ��� �������� ����� ��� �� ��������� ��� ������ �� ������ ����� � ������. ��������� �������� (��������, �� � �� z) ����� ��������� � ����������� ������, ������ �������� ����� ��������� ����� ����� (-). ����� �������� � ������ ����� ��� �������, ��������� ����� ��� �������� ����� ��� ��������� ��� � �����. ��� ��� ��������� ��������:

[0123456789] # ���������� ����� �����

[0-9] # �� �� �����

[0-9\-] # ���������� ����� 0-9 ��� ���� �����

[a-z0-9] # ���������� ����� �������� ����� ��� �����

[a-zA-ZO-9_] # ���������� ����� �����, ����� ��� ���� �������������

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

["0-9] # ���������� ����� ���������� ������

["aeiouAElOU] # ���������� ����� ��������� �����

["\"] # ���������� ����� ������, ����� ������� "

��� �������� ������������ ��������� ���������������� ������ �������� ���������� �������. ��� ������������ � ������� 7.1.

������� 7.1. ���������������� ������ ��������

�����������

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

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

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

\d (�����)

\w (������� ������)

\s (���������� ������)

[0-9] [a-zA-ZO-9] [ \r\t\n\f]

\d (���������� �������)

\w (����������� �������)

\s (������������ ������)

^0-9] [^a-zA-ZO-9] [" \r\t\n\f]

 

������� \d ������������� ���� �����. ������� \w ��������� ������������� ���� ������� ������, �� �� ����� ���� ��� ������������� ����� ������, ������� �������� � ������ ���������� Perl. ������� \s ������������� ���� ���������� ������. � ���������� �������� ��������� ������, ������� ������� (����� ������������ � UNIX), ������ ���������, ������� �������� �� ����� ������ � �� ����� ��������. �������� ����������� � '�������������� ��������� ���� ������������� ����������� (����������) ���� �������. ���, \w ���������� ���� ����������� ������, \s � ���� ������, ������� �� �������� ���������� (�.�. �������� ������, ������ ����������, ����������� �������� � �.�.), a \D � ���� ���������� ������.

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

[\da-fA-F] # ������������� ����� ����������������� �����

�������, ������������ ������ ��������

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

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

������ (�, ��������, ����� �����������) ������� ������� ���� � ������������������. ��������, ������� abc ������������� ����� �, �� ������� ������� ����� �, �� ������� ���� ����� �. ����� �� ������, �� �������� ����� ���� ������� ��� ����� ����� ����, ����� � ���������� �����, � ��� ���� ����.

���������

�� ��� ����������� �� ���������� (*) � ���� �������, ������������� ������ ��������. ��������� ���������� �� ������ ��� ����� ����������� �������� ��������������� ����� ��� ������� (��� ������ ��������).

���� ��� ��� �������, ���������� �������� �������: ���� "����" (+), ������� ���������� ���� ��� ����� ����������� �������� ��������������� ����� ��� �������, � �������������� ���� (?), ������� ���������� �� ������ ��� ���� ��������� �������� ��������������� ����� ��� �������. ��������, ���������� ��������� /fo+ba?r/ ���������� ������ f, �� ������� ������� ���� ��� ����� �������� �, ����� ������ �, ����� �� ������ ��� ���� ������ � �, �������, ������ �.

������ ��� ��������� ���� ������� (���������) ��������������� "��������������". ��������, ���� ��������� ����� ��������������� 5-10 ��������, �� ������ ��� �� ����� �������� ���������������� ������. ��������,

$_ = "fred xxxxxxxxxx barney";

s/x+/boom/;

������ �������� ������ boom ��� ������� � (��� � ���������� ���� fred boom barney), � �� ������ ���� ��� ���, �������� �� ��, ��� ����� �������� ����� ����� �������������� �� ����� �� ����������� ���������.

���� ����� ������� "�� ���� �� ������" �������� �, ����� ��������� ���� �����, � ����� ��� ����, ��� ����� ������� �� ��������� ���� �������������� ����. ���, ������, �������� ��������. ���� ����� ������� ������ � ���������� ������ ���������. ����� ��������� ������� �� ���� �������� ������, ����� �������� ��������� ����-��� �����, �������� /�{5,10}. ���������� ����� ������, ������� ��������������� ����� �������� (� ������ ������ ��� ����� �), ������������� ��������� ����� ��� (� ��������������� ������ � �� ���� �� ������)*.

���� ������ ����� �� ������� (��������, /� {5, } /), ��� �������� "������� ��� ������" (� ������ ������ ���� � �����), � ���� �������� � ������� (��������, /�{5}/), ��� �������� "����� �������" (� ������ ������ ���� �������� �). ����� �������� ���� ��� ����� �������� �, ����� ����� ������� ��������� ����: /� {0, 5} /.

���, ���������� ��������� /�. {5} b/ ������������� ����� �, ���������� �� ����� b ������ ����� ���������, ����� �������� ����� ������, � ��� ��� ����� ���� � ����� ����� ������. (���������, ��� ����� ������������� ������ �������, ����� ������� ����� ������, � ��� ����� ����� ���� ����� ��������.) ��� ���� �������� �� ����������� ������ ���� �����������. (� ��������� ������� �� ������, ��� ��������� �� ���� �����������.)

����� ���� �� ������ �������� ��� *, + � ?, ������ ��� ��� ������� ��������� ������������ �������� {0,},(!,} � {0,1}, �� ����� ������ ���� ������������� ���� ����������, � ���� �� ��� ����� ��������.

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

$_ = "� ��� � �������� � ��� d";

/a.*c.*d/;

� ���� ������ ������ ���������� ".*" � ���������� ��������� ������������� ���� �������� �� ������ ����� �, �������� �� ��, ��� ������������� ��������� ��� �� ��������� ���� ��� ���������� ������ ��������, ������� �� ������ ����� �. ������ ��� ������� ���� �� ������, �� �������, ����� ��� ����������� ������������� �����, ��������� � ���������� ����������, ��� ����� ����� �����.

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

$_ = "� ��� � �������� � ��� d";

/a.*?c.*d/;

����� �. * ? � ������ ������������� ������������ ����� �������� ����� � � �, � �� �������������. ��� ������, ��� � �������� ��������� �����

* �������, /\d(3}/ ������������� �� ������ ����������� ������, �� � ������ ����� � ����������� ������ ������ ����. ����� ������ ������ ����������� �����, ����� ������������ ����������� �����, ������� ��������������� ���� � ������� "����������� �������".

������ �� ������ ����� �, � �� �� ������. ����� ����������� ����� ������� ����� ������ ��������� (?,+,* � {m,n}).

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

$_ � "� ��� �� �������� ci xxx d";

/a.*ce.*d/;

������� .* � ���� ������ ������������� ����������� ���������� ����� ��������, ������� �� ��������� ����� �, �� ��������� ������ ����������� ��������� (�) �� ��������� � ��������� �������� ������ (i). � ���� ������ �� �������� �������������� ����� � ���������: ����� ���������� ������� � ����������� ���������� � ��������� ������� �� ��������� �� ������ ����� (� ����� ������ � � ������� ���������� �, ����� � �)*. ������� ���������� ��������� ����� �������� ��������� ������� ������ � ���������, � ���������� ���� ����� ���������� ����������� �������������. � ������ ������ ����������� ��������� � "�������" (� ������� ��������������� �����) �������� ������, ������� ������ ��������� Perl, ������� ����������� ������ ������� ���� �����.

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

��������� ��������� �������� � ���� ������� ������, � ������� ����������� ����� �������. ��� ���������� � �������� ������� ��������� �� ����������, ������ ��������� ����� ������ ������������, � � ��� ����� ������������ ����������. ��������, (�) ���������� ��������������� ����� �, � ([a-z] ) � ����� �������� �����.

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

/fred(.)barney\l/;

������������� ������, ��������� �� ����� fred, ������ �������, ����� ������� ����� ������, ����� barney � ��� ������ ������ �� �������. ����� �������, ������� ������� ������������� ������������������ �������� fredxbarneyx, a �� fredxbarneyy. �������� ��� �

/fred.barney./;

��� ��� ������������ ������� ������� ����� ���� ����������� ��� �������; ���� ��� �� ������.

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

* �� ����� ���� ��� ������ ����� � � ������ ������� ����������� ������� ����� ������ � ��������� � �������� *, �� �������� ����� �������� �� ������������ ��������, � �������� �� �� ������ �� ��������.

�� ������ ����� (������ ����� ������� ������ ����� �������) ������������ ��� \2, ������ � ��� \3 � �. �. ��������,

/a(.)b(.)c\2d\l/;

���������� �, �����-�� ������ (������� ��� #1), b, ��� ���� ������ (������� ��� #2), �, ������ #2, d � ������ #1. ����� �������, ���� ������� �������������, � ���������, ������ axbycydx.

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

/�(.*)�\1�/;

���������� �, ����� ���������� �������� (���� ����), b, �� �� ������������������ �������� �, �������, �. �������������, ���� ������� �������� �� ������� aFREDbFREDc � ���� �� ������� abc, �� �� �� ������� ��������.

����������

��������� ��������� ����������� � ����������, �.�. � | b | �. ��� ������, ��� ������ ������� ������������� ������ ������ �� ��������� ��������� (� ������ ������ � �, b ��� �). ����� ����������� �������� ���� � ��� ������, ���� �������� �������� ��������� ��������, ��� � ������� /song | blue/, ��� ������������� ���� song, ���� blue. (��� �������������� ����������� ����������� ����� ����� ������������ ����� ��������, ��������, / [ abc ] /.)

���, ���� �� �� ������ ����� songbird ��� bluebird? �� ����� �� �������� /songbird | bluebird/, �� ����� bird �� �������� �� ��������� ������. �� ����� �������� ���� �����, ������ ������� ��� ������� ���������� � ���������� ������������ ��������, ������� ��������������� ����, � ������� "���������".

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

��������� ������ ���� ������ ��������� ����������� ������� ������������ ������� � ������, � ������� ������ ������������. ������ ��� ������������� ������� "������������" �� ������ ����� �������; ��������� � ���������� ������ ��� ������ �� �����������. ����������� ����� ��������� �������������, ��� � �������� ��������� ������������ ����� ������������ ������.

������ ���� ����������� �������� �������, ����� ������������ ����� ��������, ��������������� �������, ���� ����������� ���� �� ������� �����, ���� �� �� ������� �����. ����������� ��������� \� �������, ����� ���������� � �������� b ����������� ������ �� ������� �����. ������� ����� � ��� ����� ����� ���������, ������� ������������� ���������������� ������� \w ��� \w, ���� ����� ���������, ������� ������������� ������ \w, � ����� ������ ��� ��������� ������. �������, ��� ��� ��� ������ ������������� ��� ������ � �, � �� � ����������� �������, �� ������ ��������� � � ������. ��������:

/fred\b/; # ������������� ����� fred, �� �� Frederick /\bmo/; # ������������� ������ ��� � mole, �� �� Eimo /\bFred\b/; # ������������� ����� Fred, �� �� Frederick ��� alFred /\b\+\b/; # ������������� "�+�", �� �� "++" ��� " + " /abc/bdef/; # ������� �� ���� ����������(������� ��� ���� �� �����)

����������� ������� \� �������, ����� � ��������� ����� ������� ����� �� ����. ��������:

/\bFred\B/; # ������������� "Frederick", �� �� "Fred Flintstone"

��� ������ ����������� ����� �������, ����� ������������ ����� ������� ������ ����� � ������ ������. ������ ���������� ������ ������, ���� ����� � �����, ��� ������������� � ������� ������ ����� �����. ��������, "� ������������� ������� � � ��� � ������ � ��� ������, ���� � � ������ ������ � ������, a ������������� ���� ��������, � � , ������� � ����� ����� ������. ������� �������, ������ ������� ���� ����������� ��������. ���� �� ������, ����� �� ���� ���������� ����� � � ������ ������, ��������� ����� ��� �������� ����� �����.

������ $, ��� � , ��������� �������, �� �� �� ������, � �� ����� ������. ������� �������, �$ ������������� ������� � ������ � ��� ������, ���� �� ����� � ����� ������*. ���� ������� � ����� ������ ����� �������, ��������, ����� ������������������ ��� ������������� ���������� ��������, ������� ��� ����, ����� ������������ ��� � ������ ���������, ����� ��� ������� ��������� �������� �����.

�������������� � ������ ����������� �����, ������� \�, \2 � ����������� ����������� �����, ����������� � ������� ���������� (?=...) � (?!...). ��� �������� ������� � ����� 2 ����� Programming Perl � �� man-�������� perlre(Y).

���������

��� ����������, ���� ���������� � | �*? ��� ����� ������������ � ����� ���������� �������� � ��� � ��� ���� ������ � � ����� ���������� �?

��������� � ������������� �������, ��� � ��������, ����� ���������. ��������� �������� (�� ������� � �������) �������� � ������� 7.2.

������� 7.2. ��������� ��������� ���������� ���������**

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

�����������

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

( ) (?: ) ? + * {m,n} ?? +? *? (m,n}? abc $ \� \Z (?= ) (?! )

 

* ��� ����� ����� �������� ����� ������ � ����� ������.

** ��������� �� ���� �������� � ����� ����� �� �����������. ��. ����� Programming Perl ��� man-�������� perlreii(l).

 

�������� ���� �������, ����������� ������ * ����� ����� ������� ���������, ��� |. � ���� ����� /� |�*/ ���������������� ��� ���� ������ � ��� ����� ����� �������� �.

���, ���� ��� ����������� ������ � ��������, "����� ����� �������� � ��� �"? � ���� ������ ����� ������ ������������ ���� ������� ������. � ����� ������� � ������ ����� ��������� �� ����� ���������, � ������� ������ ���������� *, �.�. (�|�)*. ���� �� ������ �����������, ����� ��������� ����������� ������, ����� ���� ���������� ������� ������:

� (�*).

��������� ���������� � ������� ������� ������ ������������ ������������ ����� ����������� ��� ������� �������, ��� �� ������������ ����. �� ���� ��� ������� ������ �����������, ����� �� �����������, ������������� �� �����-�� ������� \2, \3 � �.�. ���� �� ������ ������������ ������� ������ ��� ��������� ������ �����������, ���������� ����� (?:...), � �� (...). ��� ���� ��������� ��������� ���������, �� �� �������� �������� �������� ���������� ����������� ������, ���������, ��������, ���������� $4 � �.�. ��������,/(?: Fred |Wilma) Flintstone/ ������ �� ���������� � ���������� $ 1; ����� ������ �������������� �������������.

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

abc* # ������������� ab, abc, abcc, abccc, abcccc, � �.�. (abc)* # ������������� "", ab, abc, abcabc, abcabcabc, � �.�. ^� |� # ������������� � � ������ ������ ��� � � ����� ����� ^x.^y) # ������������� � ��� � � ������ ������ �|be Id # ���� �, ���� be, ���� d (alb)(� Id) # ��, ad, be ��� bd (song|blue)bird # songbird ��� bluebird

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

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

����� ������� ������� ��� ������������� (�������� :='�)

������ ������, ������� ����� ����������� � ��������, �� ��������� � ���������� $_, � �������� �� ���� �������� �����������. (����� ����, � ���������� $__ ��� �������� ��������, ������� ��� �� ������� ������.) ������ ��������� � ����� ��� ������� �������� =~. � �� ������� �� ������ ��������� ��� ���������� �������� ������������� ������, ���������� � ����������, �������� �� $_.

��� ���������� ����������� ������ �� ����� ��������. �������� ��� ���:

$� = "hello world";

$� =~ /^he/; # ������

$� =~ /(.)\1/; # ���� ������ (������������� ���� 1)

if ($� =~ /(.)\1/) ( t ������, ������� ���������� ���������� ��������

1

������ �� ����� �������� =~ ����� ������ ����� ���������, ������� ���� � ���������� ��������� ��������� ��������� ��������. ��������, <stdin> ��� ������������� � ��������� ��������� ���� ��������� ��������� ��������, �������, ��������� ��� �������� � ��������� =~ � ��������� ������������� � ���������� ����������, �� ������� ���������� ��������� �������� ������� ������:

print "any last request? ";

if (<STDIN> ==~ /[y1}/) { # ���������� �� ������� ������ � ����� �? print "And just what might that request be? ";

# � ����� ��� ��� ���� �� ������? <STDIN>; # �������� ������ �� ������������ ����� print "Sorry, I'm unable to do that.\n";

# ����� ��������, �� � �� ���� ����� ������� )

� ������ ������ ��� ������ <stdin> ������� ��������� ������ �� ������������ �����, ������� ����� ����� �� ������������ ��� ������, �������������� � �������� [ yY ]. �������, ��� �� �� ��������� ������� ������ � ����������, ������� ���� �� ������� ����������� ��� ������ � ������ �������� ��� �� ������� �� � ��������� �� ������, �� � ��� ������ �� ������. ��� �� ����� ��� ����� ����� ����������� �������.

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

� ���������� ������� �� ��������� ������� [yY] ��� ����������� �������� � ��������� ����� �. ���� ���� ���� �� ����� �������� �������, ��������, � ��� fred, �� ������ ������ ����������� ���������� ������, ������, [fF] [rR] [eE] [dD]. � ��� ������, ���� �������������� ������ � ��� ����� procedure � ������ ��� ������� ��������?

� ��������� ������� grep ���� -i �������� "������������ �������". � Perl ���� ���� ����� �����. ����� �� ���������������, ����� �������� �������� i � ����������� ����� �����, �.�. �������� / �������/i. ����� ������ ������� � ���, ��� ����� ������� ����� ��������������� ������ ������ � ����� ��������. ��������, ����� ����� ����� procedure � ����� ��������, ������� � ������ ������, �������� /^procedure/i.

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

print "any last request? ";

if (<STDIN> =~ /"y/i) { # ���������� �� ������� ������ � ����� �? # ��! ��������� �����-�� ��������

}

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

����� ����� ������, ������� �������� ��������� ����� (/), � ��������������� ���������� ��������� ����� ����� ������ �� ��� ��������� �������� ����� ����� (\). ��������, ����� ����� ������, ������� ���������� � �������� ���������� /usr/etc, ����� ��������:

$path = <STDIN>; # ��������� ������� ��� (��������, �� find?) if ($path =~ /"VusrVetc/) {

# ���������� � /usr/etc... }

��� ������, ���������� "�������� ����� � �����" ������� ����� ���������� ������ ������������ "�������". ���� ����� ����� �����, ��� ������� ����� ����� ������ ������������, ������� � Perl ������������� ����������� ������������� ������� ����������� (delimiter). ��������� ����� ����� ����������� ��������* (��������� ���� � �������� �����������) ����� �, ������� ���� ������� � ����� ��� ���� ����� �� �����������:

/''�VusrVetc/ # ������������� ������������ ����������� � ����� ����� m@^/usr/etc@ # ������������� � �������� ����������� ������� @ m#^/usr/etc# # ������������� � �������� ����������� ������� # # (��� ��� ������� ������)

���� ������, ������ ����� ������������ �����, ��������, m/fred/. ����� �������, m � ������������ ����������� �������� ������������� � ���������� ����������, �� ���� � �������� ����������� ������� ����� �����, �� m �� �����������.

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

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

$what = "bird";

$sentence = "Every good bird does fly.";

if ($sentence =~ /\b$what\b/) {

print "The sentence contains the word $what!\n";

>

����� �� ������������ ������ �� ���������� ��� ���������� �������� ������������� � ���������� ���������� \bbird\b/.

* ���� ���� ����������� � ����� ������� ���� (�������, ��������, ������� ��� ���������� ������), �� ����������� ������������ ����� ��������������� ������ ������� ����. � ��������� ������� ������ � ������ ����������� ����� ���������.

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

$sentence = "Every good bird does fly.";

print "What should I look for? ";

$what = <STDIN>;

chomp($what) ;

if ($sentence =~ /$what/) ( # �����! print "I saw $what in $sentence.\n";

} else (

print "nope... didn't find it.\n";

)

���� �� ������� ����� bird, ��� ����� �������, � ���� ����� scream � �� �����. ���� ������ [bw] ird, ���������� ������ ���� ����� ���������. ��� ������� � ���, ��� ���������� ������ � ������ ������ �������������� ��� ������� ������������� � ��������.

����� �������� �����, ������� ��������� ����� ����� ��������� �������� �����, ������� ��������� �� � ������� ����������� �������������. ��� ������� �������, ���� � ����� ������������ ��� �������������� ����������� ������������������ \Q:

$what = "[box]";

foreach (qw(in([box] out [box] white [sox] ) ) { if (/\Q$what\E/) {

print "$_ matched!\n";

1 }

����� ����������� \Q$what\E ������������ � \[box\], � ���������� ���� �������� ������������� ���� ���� ���������� ������, � �� ������������� ��� ����������� ��� ����� ��������.

����������� ����������, ���������� �� ������

����� ��������� ������������� � �������� ���������� $1, $2, $3 � �.�. ������������� �� �� ��������, ��� � \1, \2,\3 � �.�. ��� ����� ������������ ��� ������ ������������ � ����������� ����. ��������:

$_ = "this is a test";

/(\w+)\W+(\w+)/; # ������������� ������ ���� ����

# $1 ������ �������� this, � $2 � is

������ � ��� �� ��������� ($1, $2, $3 � �.�.) ����� ����� ��������, ����������� �������� ������������� ��� ��������������� �������. ���� ���������� ������������� �������� ��������������, ����� ������� ������ �������� �� $1 �� $� (��� n � ���������� ���������� � ������ ���������). � ��������� ������ �������� �� ����������. ������� ��������� ������ ��-�������:

$_ = "this is a test";

($first, $second) = /(\w+)\W+(\w+)/; # ������������� ������ ���� ���� # $first ������ �������� this, a $second - is

 

� ������ ���������������� ���������� �� ������ ���������� ���������: $& (����� ������, ��������� � ���������� ����������); $' (����� ������, ������� ����� ��������� ������); $ ' (����� ������, ������� ����� ��������� �����). ��������:

$_ = "this is a sample string";

/sa.*le/; # ������������� ����� sample ������ ������

# $' ������ �������� "this is a "

# $& ������ �������� "sample"

# $' ������ �������� "string"

��������� �������� ���� ���������� ������������� ��� ������ �������� �������������, �� ����� ���-������ ���������, ���� ��� ��� ������������ �����������*.

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

�� ��� �������� � ���������� ����� �������� ������: s/ �������-���_���������/�����_������/. ���� ����������� ��������� �������������� ���� ��������.

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

$_ = "foot fool buffoon";

s/foo/bar/g; # $_ ������ �������� "bart barl bufbarn"

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

$_ = "hello, world";

$new = "goodbye";

s/hello/$new/; # �������� hello �� goodbye

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

$_ = "this is a test";

s/(\w+()/<$l>/g; # $_ ������ �������� "<this> <is> <a> <test>"

���������, ��� � $1 ��������� ������, ���������� ��� ���������� � ������ ����������� � ������� ������ ������ �������.

������� i (����� ������ g ��� ����� ���, ���� ��� ����) ���������� ������������ � �������� ������ ���������� ��������� ������������ �������, ��� � ����������� ����� � ����� ������������� ���� �������� �������������.

* � ������� ���� ���������� �� ������������������ �������������� � ����� Mastering Regular Expressions (������������ O'Reilly).

 

� ; ��� � � �������� �������������, ����� ������� ������ �����������, ���� ����� ����� ��������. ��� ����� ������ ����� ������������ ���� ������ ��� ����*:

s#fred#barney#; # �������� fred �� barney, ��� � s/fred/barney/

��� � ��� �������������, ����� � ������� �������� =~ ������� ������ ������ ��� ���������� ������. � ���� ������ ������ ������ ���� �����, �������� ����� ��������� ��������� ��������, � ��������, ��������� ���������� ��� ��������� �������:

$which = "this is a test";

$which =~ s/test/quiz/; # $which ������ �������� "this is a quiz"

$someplace[$here] =~ s/left/right/; # �������� ������� �������

$d{"t") =~ s/^/x /; # ��������� "� " ����� ��������� �������

������� split � join

���������� ��������� ����� ������������ ��� �������� ������ �� ����. ��� ������ ������� split. ������� join ��������� ��������������� �������� � ����� "���������" ��� �������.

������� split

������� split �������� ���������� ��������� � ������ � ���� � ���� ������ ��� ���������� ���������� ����������� ���������. �� ����� ������, ������� �� ��������� � ���������� ����������, ������������ �� ������� ��� ������ ��������. ���, ��������, ��� ��������������� ������� ����������� ����������� �����, ����������� ���, ������� ������������ � UNIX-������ /etc/passwd:

$line = "merlyn::118:10:Randal:/home/merlyn:/usr/bin/peri";

@fields = split (/:/,$line); # ������� $line, ��������� � �������� t ����������� ���������

# ������ @fields �������� ("merlyn","","118","10",

# "Randal","/home/merlyn","/usr/bin/peri")

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

Sfields = split(/:+/, $line);

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

����� ����� ���������� ��������� �� ���� �������� ���������� $_, ������� ���� ������ ������������ �� ���������:

$ = "some string";

Swords = split (/ /); # �� �� �����, ��� � Swords = split(/ /, $_); *

# ��� ��� ����, ���� ������������ ������ �� ���� "�����-������".

 

��� ����� �������� �������� ������� � ����������� ������ ������� ��������� ������ ����� (������ �����). ����� ������������ ������� / +/, � ����� /\s+/, ������� ������������� ������ � ����� ���������� ��������. ���� �������, �� ���� ����, ������������ �� ���������*, �������, ���� �� ���������� ���������� $_ �� ���������� ��������, �� ������ ������������ ��� ����������� �������� � ������ �������� :

Swords = split; # �� �� �����, ��� � (Swords = split(/\s+/, $_) ;

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

$line = "merlyn::118:10:Randal:/home/merlyn:";

($name,$password,$uid,$gid,$gcos,$home,$shell) = split(/:/,$line);

# ������� $line, ��������� � �������� ����������� ���������

������ ����������� ���������� $shell ������� �������� (undef), ���� ��� ������ ������������ ������ ��� �������� � ��������� ���� ������ ��������. (��������� ����������� ���, ��� ������ ���� ������ ������������.)

������� join

������� join ����� ������ �������� � "���������" ��, ����� ����� ���������� ������ ������-������. �������� ��� ���:

$bigstring = join($glue,@list);

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

$outline = join(":", @fields) ;

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

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

$result = (join "+", "", @fields);

����� ������ ������ "" ��������������� ��� ������ �������, ������� ������ ���� ������ � ������ ��������� ������ ������� @fields.B ���������� ������ ���������� ����� ������ ���������. ����������� ������� ����� ��������� ������ �������-������ � ����� ������:

$output = join ("\n", @data, "");

* �� ����� ���� ������� �� ��������� � ������ "", ������� ��������� ���������� ����������� ������������, �� ��� ��� �������������� ���� ����������.

����������

'������ � ����������� ���� � ���������� �.

1. ��������� ���������� ���������, ������� �������������:

�) ������� ������ ������� �, �� ������� ������� ����� ����� �������� �;

�) ������ ����� �������� �����, �� ������� ������� ����� ����� ��������� (����� ����� ����� ���� � �����);

�) ���� ������� ������ ������ ����, ��� ���������� � ����������

$whatever;

�) ����� ���� ��������, ������� ������ ����� ������;

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

2. �) �������� ���������, ������� ��������� ������ ���� �� stdin � ���� ������, ���������� ��� ���� ������� (a,e,i,o ��). ��������� ��� ��������� � /usr/dict/words* � ����������, ��� ���������. ������� �������, �������

$ ��������� </usr/dict/words

�) ������������� ��������� ���, ����� ���� ������� ������ ���� ������ �� �������, � ������������� ����� �������� �� �����.

�) ������������� ��������� ���, ����� ��� ������� ������ ���� ������ � ������� �����������, ����� ��� ���� ������� ������ ���� �������������� � ����� ����� ������ "�" �� ������ ����� "�", ����� ������ "�" �� ������ ����� "i" � �.�.

3. �������� ���������, ������� ������������� ���� /etc/passwcf* (�� stdin), ������ �� ����� ��������������� ��� � �������� ��� ������� ������������. (�����: � ������� ������� split �������� ������ �� ����, � ����� � ������� sill ���������� �� ��� ������ ���� comment, ������� ����� ����� ������ �������.)

 

4. �������� ���������, ������� ������������� ���� /etc/passwd (�� stdin) �� ������� ������� ���� ������������� � ����������� ������� � ������� ��� �����. (�����: ����� ���������� ������� ����� �������� ��� � ���� ������ � �������� ����� � ������ ��� ����������� � �������� ��������. �������� ��������� ������ stdin, ����� � ���� ���� �������� � ���������� ������ �������.)

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

* ������� ����� ������� ����� ���������� �� � �������� /usr/dict/words; ���������� � man-�������� spell(l).

** ���� ������������ NIS, �� ���� /etc/passwd � ����� ������� ����� ��������� ���� ������. ����������, ����� ����, ypcat passwd ���� ������ ����������.




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


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