����� 7� ���� �����:
�������� ����������� ������������� ���������� ��������� ������� ��� �� �������� ������������� �������� ������ ������� split � join ���������� ���������� ����������������� ������� ���������� ��������� ������������ ����� ������� � ������ � ������� �������������� �� �������. ������������� ����������� ��������� �� ������� ���� ���� �������� ���������, ���� ���������. ������ ��������� ���� ��� ����� ���������� ����� ���� ������������ ����� ������������� ����������� ���������, � ������ �������� ������ ������ ���������� ������� ������ �������. ���������� ��������� ������������ ������� �����������, � ���������, 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 ��������� ������������� ���� ������� ������, �� �� ����� ���� ��� ������������� ����� ������, ������� �������� � ������ ���������� 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. ��������� ��������� ���������� ���������**
* ��� ����� ����� �������� ����� ������ � ����� ������. ** ��������� �� ���� �������� � ����� ����� �� �����������. ��. ����� 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 ���� ������ ����������. |