������� | ������������ | ����� | ������ | ��������
���� | ��������� | ������ | �������� ����� | �����
������� << ������  << �����  << ���

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

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

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

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

��������� ����, �� ����� �������� ��� ����, ���� ������������ ��� ����-��� (��� ���� � ��� �������) ������, � ���� ���� ������. ��� ��, �� ���������� �������� �������� �� ����, � ������� ������� ���� ����������� ��� 򳺿, ��� ���� �������.

� ��� ����� ������ � ����� ������� (����������) �����. � ���� - ���� ��� ������ (������, ��贳������� ����) � ���� ��� �������� (MacPerl). MacPerl � ���� ����������� � ������ ��������� �� ������� �������, � ���� ���� ����� (���, �� MS-DOS, Windows ����) ���� �������� �� ���������.

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

���, ����, ��� ���������� ���������� �������� � ����, ���� � �������� ��� ������� ����������, �� �� ������������ � ����� ������. � ����� �������� ������� 'which'. ���� � ����� �������� (� ����� ����� �� � ��������, � � ����������� �����������) ��� � �������, �� �� �������� �� ������ ���� ������ �� ����������:

       dk@sophy $ which perl
       /usr/bin/perl
       dk@sophy $ 

� ����� ���������� ������ ������� �������� ������ �� ����� ������: 'dk@sophy $' � ��������� �����������, ��� �� ���� ������ ��������� �������� �������� � ���� ���� (������� ����) �������, �� ����, �� �� �������� �� ����� ������. ������ ����� � ����������� ������ ������� 'which', � � ��������� (�������) �� �������� 'perl'.

���� ���� �� ������������ � ����� ������, ��� ���� �������� 'which' �� ���� ���� ������, �� � ��������� �� ��� ��� ����� ������� �� ������ �������� ���� ������ �� ������ � ��������� �������:

(1)

        dk@sophy $ which perl
        dk@sophy $ 

(2)

        dk@sophy $ which perl
        which: no perl in (/usr/local/qt/bin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin:)
        dk@sophy $ 

(3)

        dk@sophy $ which perl
        perl: Command not found.
        dk@sophy $ 

� ������� ������ �������� 'which' �� ������� ������� 'perl' � ������� �� ������������ ����������� ��� ������ � ����, ������ ������� ������, �� �� ���� ���������. � �������� 2 � 3 'which' ������ ���� ��� ���������� ���� ������ ���� ���� �� ���� �����������. ��� � ��� ����� �������� ��� ����� ������ �������� ���� ��� ������ ����, �� �������� ���� �� ���� ���� ��������� � ��� ������ � ���� �������� ����������� �� ������ ���.

����� ������ �������� ����� �� ���� ������: � ������� "�� ���� ���� ���������" �� ����� �� �������� ���� ������������� "�� �����������". ���� ���� ���, �� �������� ����������� � ������, ��� �� ��������� �� �� 'which' �� ���� �� ��������. �� ���� ���� �������� ���� �������� ������, �������� ����� ���� � ���� ������������ �������� �� ��������. � ������� 2 �����, �� 'which' ���� �������� ������������ �������� � ������ ����������. ���� ���� ����������� � ��������, ��� �� ������� �� "���� ����" 'which', �� ��������, �� ���� �� ���� ��������.

��������� �������� ���� � ������ ������ ���� �������� ������, ��� ��, ���������, 'find', 'locate', 'rpm' (�� ������� �������� ���������� ��� ˳����� �����, ��� ��� ����� ������, ������� ������� � ��� ++ ����� ��� ˳�����, �� ��������� �� RedHat ������� ������ - ���� ��, ��� RedHat, Caldera, Mandrake, TurboLinux, ����).

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

���� �����

��� �������, �� ��������� ������ � ���������� 'which' ���������� ������ � �������� ���. � ���� �� ����, �� �������� ������ ����� ���������� ��� ��� ����.

�������� ����������� ��� ���� � ���� ����� ����. � ��������� ��� ������� �� ���� ����� - ����� 4 �� ����� 5. ����� � ��� ���������� �� ���� ����� ������ (����� 4.036, 5.003, 5.005_05 ����), ��� �� �� ������� �� �� ������ �������� ����� ++ ������� ������� �������� ������ � ������ �������� ����.

��� ������� ����� ����� ��������� �� ����� 4 �� 5 ���� ���������, ��� ���-���� ����� �����, �� ��� �������� �������.

��� ��������, ��� ����� ����� �����������, ���������� ���� ������� � ���������� �����: "perl -v". � ��� �� ��� ����� �����������:

           dk@sophy$ perl -v

           This is perl, version 5.005_02 built for i586-linux

           Copyright 1987-1998, Larry Wall

           Perl may be copied only under the terms of either the Artistic License or the
           GNU General Public License, which may be found in the Perl 5.0 source kit.

           Complete documentation for Perl, including FAQ lists, should be found on
           this system using `man perl' or `perldoc perl'.  If you have access to the
           Internet, point your browser at http://www.perl.com/, the Perl Home Page.

           dk@sophy$ 

��������, �� � ������� ����� ����� ����������� ���� � ��������� ����� �����. �������� �����, �� ��������� �� ����������� �������� "-v", ���� �� ���������� ���������� ����� ��������, � ������ ����� �� ������ ����� ���� � ������ ������.

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

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

�� �����! �� ���������� �����!

META ������ �� ��� � ����������

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

         dk@sophy$ perl -e 'print "Hello! I have written my first program! \n"'
         Hello! I have written my first program! 
         dk@sophy$ 

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

��������� ������� � ���� ������ � ���������� ����� ��� ��������� ����� �� � ������� ������� ������ �� ���������� ��� � ����������� ��������. � ������ �������, ���� �������� ����-�� ������� � ����, ��� "��������" ����� ������� ���������� � ����� � �������� ��������, ��� ��������� ��������� �������� � ���������� ���� (����� ���� ��������� �������� � vi ��� emacs), � ���� ���������� ��� ����.

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

�������� "-e" ����� �����, �� ���� ����� ��� ���� ������ ��������, � �� ����� �����, � ��� �������� ��������. ���, �������� � ��������� ������ ��� ����� ��������. � ������ ������� ��:

       print "Hello! I have written my first program! \n"

�������� ����� ������� ��� ���� ��� ��������� ��������� ����� �� ��������� �������� (shell), � ��� �� ��������. ������ ��������� �������� ���� ���������� �������� ������� ����������� � �������, �� ���������� ��� �����. �� � ��� �������� ���������������� �������� �����. ������������ ����� ���������� ������ �� �������� shell'�, ��� �� �����. ����, ��� �������� �����, �� ���������� � ���� �������, ���������� �� ������������ �� �� ��������, � ��� �� �������� (����� sh, csh, tcsh, bash, ksh �� �� ��-������). �� ������ ����� ��������� ��������� ������ � ����� ���������.

�������� ����� (������� � ������ �������) ���������� ��� �� ������ �����. � ��� ���������� �����, ���� ������� ������� �� ����� ������� 'print'. (��������, �� ������� 'print' ���� ������� ��������� - ������ ����� �� ������� �� �����? )

� ���� ����� �� �������� ����� ������: "\n". �� ����� ������ ���������������, ���� ����� ������� ����� �� ����� �����, ��� �� ������ �������� ����, ����� ����������: "�������� ������ ���� �����". ʳ���� ����� �� ������� ������ � ���� ���� �����, �� �� �������. �� ���� ���������� ��� �� ��� �������. ���� �� ����� ��������� � ����� ��������� ��������� �� ����, �� ���� ���� ����:

        dk@sophy$ perl -e 'print "Hello! \n I\n have wri\ntt\nen my first program! \n"'
        Hello! 
         I
         have wri
        tt
        en my first program! 
        dk@sophy$

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

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

��� � ������ ���������� ��������... ���� ������? ��� ����� emacs, � �� ����������. ���� ����� �������, �������� vi , ��� � �� ���� ��������� ���, ��� ���������� ������� � ������ �������. ����� �� vi ��������� �� �����. ����, �� ����������� ��� ��� �������������, �������� �� ���������� ����� �����. ���� ������ � ���� �� �������� ���� ������ �� �������� Microsoft Word'�. ����� �� ������������ emacs'� ���� ���������� � ������ ������������, �� ������� ������ ������ �������� ������, ��� ��� ���������� ������, ��� ��� ����� �������� ���������� ��� � ����. ������������ vi ����� ������ ����������� ������ ���� �������
�� ���. ���� ��� ���� ���� �� emacs .

����-����� � emacs'�

���� �� �� � �� ������� ��������� �� emacs'�, �� ��������� ��� ��������� ����� ���� �����:

          dk@sophy$ emacs myperl.pl

� �������� �� ���� �������������� ��������� ����� ����� ���� ����-��������. ��� ������ "myperl.pl" �� ������ �������, �� �����

���� ������ �� ������. ��������� ����� �����, �� ���������� �� "pl" (��� �� ������ ������ - �� ���������� "pl" (*) ) �� ���� ���� �������� � emacs'� ����� �����.


(*) -

�� ��������� MSDOS'� ���, �� ��� ���� ������ � ���� ����� ���������� �����������, ����� �������� � ��� � ������� - �� ���� ������ ���� �� ����� ������ � ����� ����� - ���� � �� ����� ���������).

emacs �� ����������� ������ ��� �������� (**) �������� ��� �������������, � ���� ���� � ��� �������� ����. ��� � �� ���� �����������, �� ��� ����� ���������� � ������ �������� �����������. emacs'� ������ �������� ����� ���� �� ������ ��� �� ������������, ��� � �� ������ ������ �����. ������ (��� ���� �������������) ��� ����������� ����������� "pl", ���� ���� ���� emacs'�� ������ ��������� ��� ���� �� ������-�������� � �������� ����� ������ ������ ���� (��� � emacs ���� ���� �� ��������� ����� � �� �������� ����� ������� ������).


(**) -

ϳ������� � ����� ������� ������ ���� ������ ������ ��� ����������� �������, � �� ������ ��������� �������� ��������. ������, � ��� ��� �� ����������, emacs ��� ���� ��� ��������� ���� ���� �������������, ��, ��������� ��, �� �������� ���� ��, ����� ���������� ���� ����������� ��������� ������ ���. ���� � ����� emacs'� �������� �������� ������, �� �� ����� ����� ���������� ������ ��������� ��������� ����.

�������� ����� ���� � ������ emacs'� ����� ���: ��������� �� �������� Esc � ���� ����� ��������� `x' (��������� ����� x). ϳ��� ����� � ������ �������� ����� emacs'� ������ �'������� ����� `M-x'. �� ���������� emacs'� �� ����� �������. ���������� � ����� ����� `perl-mode' � ��������� Enter .

���, � ��������� ����� � ���� �� ������������ ���� �������, � ������� ������ emacs'�, �� ���� ��� ������� - ��� ����-����� ���������� ��� � ��. ������� ����, �� �� ���������, ���� ����� `(Perl)' , �������� � ����� ������� emacs'� (������ ����� ����� - ��������� �� ������� �� ������ � ���������� ������). ij������� �� ����� ����� �������� ����� �� ����������� No match ������������� � ���������� ����� emacs'�.

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

���� �������� ���� ���������� � ������ ������� �����. ��� �������� ��� �������� ��� ����� � emacs'�:

         print "Hello! I have written my first program! \n"

� �������� ����. ��� ����� �� �� ��� �������� �����, �� �� �� � ������ 'perl -e'. ��������� �������� ����� ����������� �� ������������ �������. � ����� ������� ��� �������� �������� ����������� ����� � ��������� �������� � ���������� � ���������� ����� �������:

        dk@sophy$ perl mytest.pl 
        Hello! I have written my first program! 
        dk@sophy$ 

�� ������ � ���������� ����� ���� �������� '-e' � �� ����� ���� �������, �� ��, �� ��� ���� ����� perl � ������ �����, ���� ����� ��������, �������������� ������������� ����. ��������� ������ ��������, �� ������, �� �������.

����� �� ��������� ����� �� ������ ����� ����-�������

���, �� �������� �� ����� �������, ���������� �� �� ������, ��� � �� ����� ������, �� ����� ��������� ����� (MSDOS ��� MPW � �������� ��� ��������). ��� �� ����� ������� ���������� � �� ������� � ������ ����������� ������. ��, ��� �� ������� ���, ������� � ����� � ����� � �����. �������� ��� ���������� ���� ����, �� ������� ���, ��� � Windows NT ��������, �������� �� ����, ����� ����-�� ��������� ���, �� �� �������� � �����.

�� �, �� ����� ���� �� ������,� ���������� ����� �� ������. ���� �� ����� ���������� �������� ���, �� �� �� ��� ������ � ���������� �����? �����, ��� �� ������ ������. ������� �� �������� ��������� ���������� ���� ����� �������� (��� �� ������ "������") � ��� shell ��� awk, � ������� �� ��������� � ����. ���� �� ���� ������� �������, ��� �������� ��������������� ��� ��������� ����, �� ������ �������, �� ������� ���� �������� � ��������� ��������� �� � ���������� �����. ����� �������� � ���� ������ ������� ����������� "perl program", ������ � ��� sh ������ � ���������� �� "sh program". � ��, ���� � ���� �������� ������, ���� �� ���������� ������ �� "program"? �� ���� ������?

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

        dk@sophy$ ./mytest.pl 
        ./mytest.pl: Permission denied.
        dk@sophy$ 

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

           ��-�-�, ��-�����, ���� ��� ������ � �����? � ��-����� �� ����
           "Permission", � ���� ���� "denied"? 

�����:

  • ������ ������ ������� ��������� (����� � �����) � ����� �� ��, �� ���� ���� �� ������ ���������� ����������� ��� ���, � ��� ���� ��������, �� �� �. � "Permission denied" ������ "������� ����", � ����������� - �� �������� �� ��, �� �� ������ ���������� ����, ������� �� �������� ����� ������.

�.�.:

  • �� � ���?

�.:

  • ���- ������� �����:

����� ������� ���� ���� �������� ������ �� ��������� (executable). ���, ��� �� ����� ������ � MSDOS �� ���� ��������� Windows'���, ���, �� � ����������� ��� ���������� ����� (��, �� ��� � ����� ����� ���� ������) �������, �� ���� ������������ ��� ���� �� ��. ����������� ����� ����� � ������������ com, exe �� bat. � ��� ��������� ���������� ����� �� ������� ����������� ����� ����� (���� ���������� � ��������� ���� �����. ���, ��� �� ��� � �� �����������, �� ���� "�������� ����" ����� ������� �� �� �� ���� ���� �� ����� ���� ����� ������ � ����� ��� ����������� ���� �����). ��� ������� ���������� ����, �� �������� (����� �������� �� ����� ��������� - �������� ��-���������), ���� ������� ���� ��� APPL.

� ����� � ��� ����������� ��������� (eng. permissions) �� ����. ��� ������� �������� ����, �� ��������, �� ������� ���� ����� �� ���������. � �� ������ �����, � ����� ��� ������� �����������. �� ���� �������� � ��������� ������� �� ������ � ������ ������������, ������� �����, �� ������� ��� ������������ �������� ��� ��������� ������� ���� ����:

         chmod +x mytest.pl

����� �����������: ������� ������� ������� ������ ����, ����� �������������� �������, chmod �������� �� "change mode", � +x ������, �� ����� ������ ������� �� ��������� �� ����� �����. ϳ��� ��������� ���� �������, ���������� ��� ������ ���� ��������� ����-����. ������� ����� ���������� ������������ ������� � ��������� �� ������������ ����������� �� 򳺿 ��� ���� �����. �� ��������� ����������� ������� "man chmod".

����������� �����:
"�� ��, ���������� �������, ��-� ����� ����������!.."

            dk@sophy$ chmod +x mytest.pl 
            dk@sophy$ ./mytest.pl 
            ./mytest.pl: print: command not found
            dk@sophy$

�.�.: "��? �� ���?"

�.: ��� -- ������� �����:

���� ����, ��� ����� ����, �� ���� ����� ��������, �� ���� ����� �������, �� ���� ���������� ���� ��������. � ����� � ��� ����� ����, ���� ������� ������ �� "magic number", ��� ������ �����. (����� ��-� ����, �� � ������ ����� - ���� �� ������ ��������, �� ���� ��������� ���������� ���������� ��� ��������, �� ����� � ������� "����-�����"). �� ������ ����� - ��� ������ ����� (�� ������ �����) �����. ���������� ��� ��� ������ ����� ����� ������ ���� ������� �� ����� ���� �������� ��� ����. ��� ������ ����� ����-����� ������� (����-�� ������ � ����, sh, csh �� �� ���� �������� -- ��������� ����� ������ ����������� ������ �� gnuplot -- ������ ��� ���������� ���������� �������� �����) ������� ���� "#!" (��� �����, ��������).

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

     �� ����: 
          
          �� �������� ��������, �� �� sh, csh, ..sh �
          ����������������, ���� ����� � ���������������, ������ �����
          ������ ����. ���� ����� ������� ���������� ���������������
          (�� ���� �������������� �����������? � ������, ���
          ������?!). �����, ������ ����, ��� ������ �� ������ �����
          � ���������� ��� �����, �� ������� �������� ���������
          ��������, ���� ���� ����� ���� ����, ������� ���� ����, �
          ��� ���� ������. �� ������ ������ �������� ������
          ������� � ����.

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

��� ����� � ���� ����� ����������, �� ����� �������� � ����� ������� �����? ��� ���� � ��� ����� ������� ��� ������� which. ���'�����, �� ��� ���� (� �������� ������):

�: "Which perl?"
����: "/usr/bin/perl"

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

       #!/usr/bin/perl
       print "Hello! I have written my first program! \n"

�� ���������, ���� ��������� ������ �������� ������ �����, ��� � ��������� ������� � ��������� ������� ����� �� ����-��������������?

� ����� � ������������, �� ���� �� ������� ����� ������ ��������������, �� ����� �����, �� ��� ������ ��������� ��� ���������� �������� �������� - ��� /bin/sh � ������ ������� �� ������, �� /bin/sh �������������� �������� ������� print , ��� ���� � ��� sh , � �������� ���� ������� ��� ��.

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

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

       dk@sophy$ ./mytest.pl
       Hello! I have written my first program! 
       dk@sophy$ 

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

       #!/USR/BIN/PERL

�� ����:

        ��� ���, ��� �� �� ���� �� ������, �������, �� �� ����� ����� �
        ����� ��������� ����� � ��� �����. � ����
        #!/USR/BIN/PERL �� ����� �� ��, �� #!/usr/bin/perl,
        � ����� �� ��, �� #!/Usr/bin/perl.)

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

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

csh:

        dk@sophy$ ./mytest.pl
        ./mytest.pl: Command not found.
        dk@sophy$ 

bash:

        dk@sophy $ ./mytest.pl
        bash: ./mytest.pl: No such file or directory
        dk@sophy $ 

sh:

        sh$ ./mytest.pl
        sh: ./mytest.pl: No such file or directory
        sh$ 

����� PATH

���� �������� ������� ���, ���������, �� ls, echo, startx �� ���� ����� ���������� ��� ������ ������ �� �����, �� ����� ����� ������ �����? � ����, ���� � �������� � ��ѳ, � �� �������� BATCH-���� "MYFILE.BAT" � ������ ����������� � ���������� ����� "MYFILE" � ���� ���������? ���� �� �� ��������� � �������? ����, ���� ���� ����������� ���� ���, ����� � ���� ����� �����, � ��� ��������, � ��� � ����� �, ���� � ������� ����� ������ ����� ������ �� ���� �������? ��� �� ���� "mytest.pl", ���� � �� ���� �������� "mytest"? ���� � �� ���� �������� "mytest.pl"? ���� � ����'������ ��� ������ "./mytest.pl"?

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

��-����� , ��� �� � ���� ����������� ��� � �����?

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

  • �� � �� �������� ������� �������?
  • �� � � ����� �������� ���� � ����� ������?
  • �� � ���� � ����� ������ � ���������� �������� � ������ PATH ?

�� ����� ��������� �� ���� ������� ���� ��������� �����. �����, ���� ���������� ����� ����� ������� ��� ����������, �� ����� "*.COM" ������ �������� ����� ������� "*.EXE", ����.

������� ����� �� ���������� ������ (�� ����� �'�����) ������������ �����, �� ������ ���� ����������, ��, ��������-�, ����� ������ ��������� ����� ����� �����, ����� � �����������.

� ����� ������������ ������ �������� * �� ����� ����� ������:

  • �� � �� �������� ������� �������?
  • �� � ���� � ����� ������ � ���������� �������� � ������ PATH ?


(*) -

- ���� ����� ������, ��� ���-���� �������, �� ��� �� ��������� ����� �������, ���� ���������� ������� ������� ��� ��������. ���� ���������� ����� � ���������� ����� /bin/ls , �� ������� ������ �� ����, ���� ������ ���� � ������ �� �������. �����, ���� ���������� ������� �������� ������� �� �������, �� ��������� ./mytest.pl , ������� �� ��������� ������ ������ ���������� �� ���������. � ����� ���� � �������� mytest.pl , ����� ��� ������� ����� ������ ��� ���� � ��� ����������, �� ������� � PATH .

�� ������ ������� ������� � ������� � ����� ��������. �� ����� ������� ���, ��� ������� ���-���� ������ ���� � ����� ��������? �����. ��� ����� ����� ������ ������ (".") � ������� ������ - ����� � PATH . ��� ��� �� ������� �...

��-����� : ���� ����� �� ����� ������?

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

���� ������ � ������ PATH ��������� (� ����������� ���������) ���� ����������. ������� ����� ������� �� ������� ������ �������� �� ������������� � ����, ���� � �������� ������ �� ������������� ����� ����� ��� ����-���� ��������, � ������� �� ��������� ����, �� ������� ���, ��� ���� �������� ������������ � ��� ��� �� ����� ���� ������� ���� ��������� ����� ��������� � ���������� �����.

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

  • ��� ������ ����� PATH ;
  • ��� � �������� ���� � ��������� � �� ���������, ��� ��� ������� � ������ PATH .

���� �� ��� - � �� ��������, �� �������� �������� � ������ PATH . ��������� ��� ����� � ��������� �������� �������:

        dk@sophy$ echo $PATH
        /usr/local/qt/bin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
        dk@sophy$ 

����� ��������� ���������� ���� �� ���� �����������. ���� �� ���� ����� �� ����� � ���� �� ��������� ������� �������� echo, �� ������ ������ ��������� ��� ���� � �� ���������. ���� � �� �������� ���������� ��� ������, �� ���������� ������ � ������������ PATH . ������� ��� ����� ��������� � ��������� �� ����, ���� shell'�� �� �����������. ����, ����� ����� �������. ��� ����������� ������� ��������� /tmp/bin � ������ �� �� ����� PATH .

csh �� ���� ������� ( tcsh ):

setenv PATH $PATH:/tmp/bin

sh �� ���� ������� ( ksh , bash , ash ):

      PATH=$PATH:/tmp/bin
      export PATH

bash �� ksh �������� ����� ���� �������� ������:

        export PATH=$PATH:/tmp/bin

ֳ ���� ��������� � ��������� ��� (���� ����, �� �� ������� � ������� � ������� � �� ����). ����, ��� ������� �� ��������� ��������� �� ������� ����� ������ �� ������ � ��������������� ����� ������ shell'�. ��� csh (tcsh) �� ���� ���� .login ��� .cshrc � �������� ��������. ��� sh (ksh, zsh, bash, ash) �� - ���� .profile. bash ����� �� ����� ����� �����, �� ���������� ���������� �����������. ֳ ����� - [[.bashrc, .bash_login, .bash_profile]]. ��� �������� �� ����� ���� ������� ����� �������� � man bash .

� �� ��������� ����� ������ ��� ���� �� ���� ���������� �� �� ������ ������� �� ������ ³������. ����, ������ ��� ����� ������ � �������, ��� ���-���� �������� ���������� ����� � �������� ��������? �� ���� ��, ��� �� ������ �� ������ ����������������� ������� (���� ���� �� ����������: DOS, Window NT, 3.1, 95, 98, 2000, 3000 ... 15000 - �� ��� ���� ������ �� ������ (!) ) � ���������� ���� �� �����. ���� ��� ������ �� ���� ���� �������� - �� �� "." � PATH, �� �� ����, �� MS Word'� �� ����������� ��, �� �� �����������, � �� �� �� ����?

ϳ������ ������

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

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

��� ����� � ������ ��������� �����-�� ����������.

  1. ������ ������������� ����� � ������ �������� ������� which. ������ �������� ��� ��������� ������� ������� � ����� �� ˳���� � ��� �������, �� locate, find, rpm.
  2. �������� -v � ���������� ����� ����� ����� ��������� �������� ��� ����� �������������� �� ������ ����'����.
  3. ���������� ������� � ���� ����� ������ ����� � ���������� �����. ��� �����:
    • ��������������� �������� -e � ���������� �����;
    • ������, �� ��� ���� ����� ����� ����� � �����.
  4. ��� ����, ��� ���������� ������ ����� ���� ���������� �� �������������� ����� "perl (�����_�����)", � ������ �� "(�����_�����)" ����� ������������ ��� �����:
    • ���� ������� ������� ���� ����� �� ��������� ��������� ������������;
    • � ������� ����� ����� ����� ������� ������ ������� �� �������������� ����� � ����� ������.
  5. ��� ���������� ��������, �� �������� ������ �������, �� ���� �� ��, ������� ��� ���������� (��������� �) �� � ��������, ��� ������� � ������ ���������� PATH �����������, ��� ������ ����� PATH ����� �����, ��� ���� �������� ���������, ��� ������ �������� �����������.

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

� ����� ����� � ������� ����� ����� ������ �� ������������� � ����. �� ��� ����� �� ������ ���������� ������� ��� ��, �� �������� ���� �������� ������� ������������. �� ������ �������� ����� ����� � �� ��, �� �� �������� � ������� ����� ����� " #!/usr... ". ���� ����������� ������ ������� ��� �� � "Command not found", �� ��� ������ ������� ����� �� ��� �������� ���������� ���������� �����.

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

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

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

        {
            ...
            ... ������_����_��������;
            ... �����_����_��������;
            ... ��_����_����_��������;
            ...
         };

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

����� ��� ��, �� _�����_ ���� ������� ������������ ������� � ����� �, ������-��, �������. ���� �� ���� ���, �� ���� �������� � ������� ������ �� ��������� �. ³����� ���� �������, �� "����� ������� ��������� ���� �� ������ ������� � �����". � ����� �������, �� �������� �������� � ������� �� ����'������ �� ���� ������ � ����� � ����. �� � ��������� � ���������� ��������� � �����. ��� ��������� �� �� ���� ������� ��������.

��������

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

� ���� ��� ��������� ��������������� ���� "#". ��� �� ��� ���� ����� ������� �� ������ ���� ����� ��������� ���������� � ���������� ������.

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

       #!/usr/bin/perl
       # This script will print short message on the screen
       # and exit after this.
       # ������� �������� �����������, �� �� ����� ������ ����-���� �����

       print "Hello!";

       # ��������� ������ ����� ������� ����� ��, �� � ������������
       print " I have written my first program! \n"

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

        dk@sophy$ ./mytest.pl
        Hello! I have written my first program! 
        dk@sophy$ 

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

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

��������� ��� ������������� ����� ������� ��� ���� �����. ����, ��� ������������� ������ ������, ����� �����������, �� ����� ���� �������� �� �����. �����, ���� �� ������ ��������� ������ �������, �� �������� ����� ������� ���� ������ ����. ���� ��� ������� ��������� ���������� ������, �� ����� ������ ���� ��� ������� ��� �����. � ���������� �������, �� ����������� � ����� �������� ��������������� ���� ����� ����. (�����, �� ����� ����� �� ���������: "�� ����, ���� �� �'��� �������� ������ 2 ��������?"

� ����� ����� ������� ���� ������ �� ���������� �� ���������� ������ ������ �����. � ������ ����� �� ���� ������� ����������� ����, ��� ���������������. � ����� ����������� ���� �� �������, ��� ��� ����������� ���������� �� ���� ������, ����. � �������� ����� ������������� ����, ��� ��������� ������ ����� ����, �� ����� ����������� � ����� ���. ���������, ��������-� � ����� ���� ������� �����, ����� ������ ���� ����� 5 � ���������� ��� 0,78. ��� ��� ���� �������� (��������� � ������) ������� �������� 5 ����������� �� ������ ����� � ���������� ��� 5,0. �������� ����� ��� ����� �� ���������, ��� ��������� ��� �����. � ���� ���� �������� ��� ������ ������� ������ ����������� �������, ��� ����� ������������ ���������� ����������� 䳿.

�� ���� ������������� ����������� ���� �� ���� ����� ���� �������� ������������ �����. ���� � ��� ��������� ������ ����'�������� ������ ������������ ���� �����. ����� �� ����� ������ �������� "5 + 0,78", � ����'������ ����� �������� ���� ������ �� "(������� �����, ������� �������� ����� ������� 5) + 0,78". ���� ���� ��������, � ������ ��������, �� �� ���� �� ������ ������, � ������� ���� ������������, ������������ �� ������� ����������� �����.

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

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

��������� ��� ����� � ���� ����������� ��������� "$". ����, ��������� �������� $a= 5 ��� $b= 'one' , �� �� ����������, ���� �������, �� ������ �� ������ ���������� �������� �� �������, � ��������� ������. ������, ���� � ������� �������, ����� � ������� ����� ��������� �������, �� $a � ��������� ������, �� � ������� ������� ������ ������� ������� �� �����.

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

        perl -e '$a=5; $b="one"; print $a + $b, "\n"'
        5

        perl -e '$a=5; $b="one"; print $a . $b, "\n"'
        5one

� ������� ������� ����� $a ����������, �� ������� ����� (�� ���������� �������� ���������) � ����� $b, �� � ��������, ���� ���� ������� ������� �������. � ������� ������� ���������� �������� ��� ����� ���������� ������� * . ���� ����� ����� ����������� � ����� �������, �� ������� ����� � �� ������ ��������� �����.


(*) -

��������, ��� ����������� ������� "." ����� �� ������� �����. ����������� ���� 䳿 � ����� �����, ���� ������� ������� � ������� ������ ����� ������. ���������� ����� �������� ��'������� ���� ����� ���������� "concatenation". �� ����� ������� �������, � ���� �������� �� ������������� (�� ���� ����������� �� ���� ������� ����� - � �� ������� ������� ���� ��������).

������ ����� ����� ��� ��������, ���� � ����� ������� ������� ���� � �� � ����� ���������� �� ������, � � ����� ������� - �� ������ . � ���������� ������� ����� $a � ������ ������� ������� �� �������� �����, � � ������ �� �������.

        perl -e '$a=5; $b="one"; $c=3;  print $a . $b, "\n", $a + $c ,"\n"';
        5one
        8

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

            perl -e '$a=5; $b=15; $c=3; $d =$a . $b;  print $d, "\n", $d + $c ,"\n"';
            515
            518

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

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

���� �� ��� - ����� ������ ��������������� �����? �� �� ������� ������ �������� ��-������ ����:

       print Hello! I have written my first program! \n

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

��, � ��� ��������, �� ���� ������ ������. ��� �� ���� � ����� ������ ������ �����: � ���������� (''), �� � ��������� ("") ?

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

        $a=" ������ ������ "; 
        $b=" �� ���� ������ "; 
        print $a . $b, "\n";
        print "$a  $b ","\n";
        print '$a  $b ',"\n";

        ./mytest.pl
         ������ ������  �� ���� ������ 
         ������ ������    �� ���� ������  
         $a  $b

�� ����������? ������ ������ ���������: ������ �������������� �� ������� ����� � ��������� ����� ��'������� ���������. ������ ����� ������ �� ������, ��� � ����� � ������ �������, ��� ����� ������ ������ ������� �� ���� ����������.

������� � �������� �������, �� � ��� ���������� �������. ��� ����� � �������� ����� ��������� ���, �� ���� ��������, �����, �� �������� �� ��, �� ��������� ����� �������� ���� ����, �� �� �������� ������ �������� ����� - $a $b . ��� �������� ��������� ����� ���������� �� �� �����, � �� ������ �����, ���� ��������� ���������. ������������� ����� "�� ������" ����, �� ����������� ��������� ��������� �����.

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

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

        $a=" ������ ������ "; 
        $b=" �� ���� ������ "; 
        $c = "$a ���� $b";
        $d = '$a ���� $b';
        print $c, "\n";
        print $d, "\n";

        ./mytest.pl
         ������ ������  ����  �� ���� ������ 
         $a ���� $b

���, ��� �� ������ � �������� �������, ������ ����� "���������" - quoting. � ������, ��� �� ���� ����� �� ��, �� � ����� ������������ ������. �� � �� ���� ������� ���������, ��� ���� ��� �������� ������ � ��������� �� ���������� �������? �, �� ����. ���� ������� ��������� �� ���������� ���� ������ ������, ����� ��� ��������� �������� ���� (��� backslash) - "\". ��������� ������� ��������� �� �������:

         $a=" ������ ������ "; 
         $b=" �� ���� ������ "; 
         print "$a ���� $b";
         print "$a ���� \$b";

         ./mytest.pl
          ������ ������  ����  �� ���� ������ 
          ������ ������  ���� $b

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

perl -e "print '\'"
Can't find string terminator "'" anywhere before EOF at -e line 1.

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

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

          META  

          * ������
          * ����������� ������ - hash

������ � ������� �� �������� �����-������

������� ������ � ������� �������� � ����� ������, ��� ������ ������ �������� ��� ����, ��� ��������� ���� �� ����� ��� ��� �������� ����� ���� �� �������� ���� �� ��� ���������. � ���� (�������� � ��� ��������, �� ���������� ��������� ����� -- ����� �� Macintosh -- �� ���������� ����������� �����, ��� �� STDIN , STDOUT , STDERR -- ����� �� Windows) ������� ������ � ������� ������ � ��� ��� ��������, �� ��������� ��������� ������, ������������ ������ �� ��� �� ���� ������������, �������� ��������� ������ (pipe) �� ����-��������, ����. ���� �� �� ���� ����������� � ��������, ��� ��� ��� ����� ���������, �� �������� � ��� ����� ��� ����������, � ��� ���, �� �� �������� � ��������� � ��� ������, ���������� �������� � ������ �� ������.

���� ����������
������� �������� �����-������ �� ��������� � ����������� � ������� �������� ��������� - ������� � STDIN �� ������ �� STDOUT .

��� �� �� ���� - STDIN ? �� � ���������� �� ����������� "standard input" � ������ "����������� ���". ����� ��� ��������, �� "standard output" ��� STDOUT - �� ����������� ����, � "standard error" - �� STDERR , ���� �� ����������� �������� ���� ����������� ����������� ����������, � ���������� �� "����������� ������� ��� ����������� �������". �������� ������ ������ � ���� ���������� � ������� ��� �������� ������ ������� ������� � �����, ������� ��������� �������� �������, ��������� � "������������ ����", ����� ������ ���� � STDIN , ���������� ���������� �� ������ �� STDOOUT �� ���������� ��� ������� � ����� �� STDERR .

������� ������� "����" ��������������� � ����� ���� �����, �� ���������� ��� ��� ����������� ���, ���� �� ������� ��� ����������� �������, �� ��� �������� �����. � � ���� ��� �� �� ��� ���� ���� ����������� �� ��������� ����� (����� ����� �� �����). ³�������� � ����� ���� ���������� � ����� ��, �� �� �� ��� � �������� � ������������� �����. �� STDIN ����� ����� ������, � STDOUT �� STDERR ����� ����� ������.

����, ��� ������� �� �������� ������������� � ������������� ����� ��� ��� ������, ������� �������� ���������� � ���� �� ������� ���������. ���������� ���� ������ ������� cat (1) . ����� ����-� ������� �� �������, �� ����, ��� ���������� ���� ��� ����� ����� �� ������ �������. � �� ���� ���� �� ������ ��. ���, ���������, �������

         cat myfile.txt myfile2.txt

����� �� ������� ������ ��������������. ���� ������ ������� ����� � ������� myfile.txt �� myfile2.txt �� ������ ���� �� �����. ��� ���� ������ �� ������� �� ����:

         cat myfile.txt myfile2.txt > myfiles.txt

�� ��� �������� ���� ������. ������ ����, ��� ��������� ����� �� ������, �� ������� ��� ��� ����� � ������ �� ������ � ����� ���� �� ������ myfiles.txt . ���� ������ ����� �� ����, ������� ���� ��������, � ���� �� ����, �� ������� ���� �����.


( N.B. ) -

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

          ���� ����� ������� ��������� �  csh  ���  tcsh   
         cat myfile.txt myfile2.txt > myfiles.txt
         myfiles.txt: File exists

���        ���� �� �������� �  bash '�  

         cat myfile.txt myfile2.txt > myfiles.txt
         bash: myfiles.txt: cannot overwrite existing file

�� ������, �� �� ������� ���������� �������� cat ��� �������� ����. ��� ����� ����� `noclobber' ����������� � ����� ��������� ��������. ������� ��� �������� ����� �������� ���� ��������:

������ - �������� �� ���� � ����� ��������� �������� ( .profile , .login , .bashrc �� .cshrc ) �������������� �� ����� � ������� �� ��������� (��������� �� ����� ������: set noclobber ��� set -o noclobber ),

��� ������ - ����������� ����� ��������� �������:

         cat myfile.txt myfile2.txt >| myfiles.txt

���� ��� � �����������, �� ���������� ������� cat , �� ����, �� ���������� ����� �� ������, ��� ���� ���� ������ ����� ������� ���� ��� �� ��� �� ����. ��� � ����� ������� ������ �� ��������. ���� �������� ������ � ����� �����������. ���� ����� ����������� ������� ���� ����: "������� cat ��������� �����, �� ���������� � ���������� ����� � ���������� �� �� ����������� ����." ������ � ������� ������� ����������� ������� ��� ������� �������, � � ������� - ���� �� �����. ����������� ������� ��� ������ � ������� ����'�����, ���� �� ������� ������. � ���� �������, ���� �������� �������, �� ������� ���� ����� ���� ���������� � ���� (����� ">file" , �������� �������� �������� �� ���� ������� �� ���������� ������ ����� �� ����������� � ����� ����� �� �������.

³������: ������� ����� � ���� ��������� �� ���� �������, � �������� �������� ( shell ). ����, ������� �������� �� ������� ������. ��� ����� ���� ��� ���'�����, �� �� ������� �������� �� �� ������, � �� STDOUT .

���� �� ������� ���������� ��� ����� ���������� � STDIN �� STDOUT �����. ���������� ��� ������� ���� �������, �� bc(1) . ������������ �� bc ������� ����, �� ���� ������������ � �������� ��������. ���� �� ������ �� ����� �� ������������� ���� ��������, ��������� ����������� ������� � ������ ������������� ���. ���� �� ������ � ���������� ����� ��������� bc , �� ����������� � ������������� ����� ������ ������������. ��� �� ������ ���������� ����������� 䳿 ������� ������� � ��������� ��� (�����!) ������ �������. �� ������ �������� 䳿 �� ��������, ������� Return � ���� ���������. ���, ���������, �� � ��� �� ����� ������:

         $ bc
         bc 1.05
         Copyright 1991, 1992, 1993, 1994, 1997, 1998 Free Software Foundation, Inc.
         This is free software with ABSOLUTELY NO WARRANTY.
         For details type `warranty'. 
         2+2
         4
         5/2
         2
         quit
         $

� ������ ����� 2 � 2 ( 2+2 Return ), � ���� ������� 5 �� 2 ( 5/2 Return ).

� ������ �������� (���������� ���������������) ����� ������������ ������� ������� ���� �� STDIN (���� � ����� ������� � ��������� ����'�����) � ������ ���������� ������ �� STDOUT (�� �� ��� ����� � ���������� ������, ��� � ����� ����'�����). ��� ����� �� �� ��� �������, ���� ��� ���� ��� ������ - � ��� �������� ������������, ����� � ����� �� ��� �������, ������� ��������� �� ������ � ���� ����� � ������ ��������� � ���������� �������� ������� ����, �� ���� �������. ͳ! � ����� ���� �������� ���� ������. ���� ����, ������, ����� ��������� IP-������, �������� � ��������� ���� � �������������� �� �������, � ������� ���, �� ������ ������, ���� ���� ���������� ��� ������ ��������. �� ��������� ������� � ���� ��� ��'����� ����� ����, ��� �� ���������� ��� ����� �� ��������� ������������ � ������, ��� � � ���� ���� ������� ������, ���� � ����� ����������� ���������� ����, ���� ���� ������� ���� ������� ���� ���� ������������. ���� ����� ��� - ������ �� ���� ����-������ ����������� ���������� ���������� IP � ���������������...

���, �� �������� ������ (����-�� �� ����, � ��������� ���), ���� �� ��������� ����� �� ������ ������� �������� � ����? ��� �����, �� �� ��� ������ ��������, ����� ��������� ����������������� STDIN �� STDOUT ����-����. �����, ����� �� � �������, �� �� ������� �� ��������, ������ �� STDIN ������� bc . ������� �� ����� ������ ����� ��������, ��� ������ �������� � ����. �� �������� ������ - ��������� - ����. ���������� �����������:

            $ echo "2+2" | bc
            4

������! ����� ����� ����-� � ����� ������ bc �������... ������� ����:

            $ echo "obase=16; 127" | bc
            7F

������� obasebc ���������� ������� ������� ��������, ����� �� � ����� ������ ����������� ���� ���������� ���������. ������� �����������, �� ibase � ������ ������� ������� ������ ������� ��������. � ���� ��������� ������� ���������� ����� �� ������� ������� � �������:

            $ echo "obase=8; ibase=2; 11110100010101000101" | bc
            3642505

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

            #!/bin/sh
            echo "obase=16; $1" | bc

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

            $ ./h2d 20
            14  
            $ ./h2d 100
            64
            $ ./h2d 15 
            F
            $ ./h2d 225
            E1
����� ����� ��������� ��� ���� � ����

�� ��� �� ������� ��� ����� �� STDOUT ������������� �� �������������� �� ����? ���� ������. �������� print ����� ����� ���, �� ���� �������, �� �� ������, � �� STDOUT , ��� ��� ������� ���� ������� ������. ���� � �������, ���� ������� ������, �� � ������ ���������� ���.

����� ����� ��������� print ( man perlfunc ) �� ��������� ������:

       print FILEHANDLE LIST

� ����� ���������� LIST � ��� ������� �����, �� �� ����������� ��������. �� ����� ������� �� �� ������� FILEHANDLE � �� �����, �� �� ����. �� ��������� ���, �� ������ ���������� FILEHANDLE �� ���� �������� ����� ������������ ����, ��� ���'��� ����, � ���� ������� �������� ���� � ���� ������. ��������, FILEHANDLE - �� �� ����� ����� (��� ����, ��, ���������, STDOUT - ��� �� � ������ �����)! �� - ������ ��� ������ ������, ���� ��'��� ���� �� ��������� �����, ���� ��� "����� �� �����" (���� ��� ����� ���������� � ��������� "filehandle").

����� ������� FILEHANDLE , ���� ����� ���� � ������ ����������� ���� ������ ��:

        print "/home/user/MyFile.txt" "Hello"

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

����, ��� � ���� ����� ���� ����������� ����-��, ���� ����� �������. ϳ��� ��������� ������ � ����, ���� ����� �������. ���� �� ������� �������� � ������'������ - ���� ��������� �������, �� ������ ����� ����������� ������������. � ����� ���� ���������� �������� �������� ����� - �� ������ ��������, ��� ��'��� ����� ����� �� ��������� FILEHANDLE'��.

�����, ���� ����� ���� ������� ��������� ����, ��� ������ � �����, �� ���� � ��� �� ����� �� �������� ������ ��� ��, �� ����� ������� STDOUT ���� �� ��������� ���������� ��� ����� � ����� ���������� ��������? �����������, �� � �� ���� ����, ����� STDIN �� STDOUT ����������� �� ��������� �����. ³���� ����������� � ����, �� STDOUT �� ����� ��������� ����� ������� � ����� - �� ����������� �������� ��� ����� ����-����� ����������� �������. ��� ���� ��������� � STDIN - �� ����� ����������� ����������� ��� ����� �������������� �����. ���� �� �� ������ ��� ����-���� ������ ��� ������ �������� print "Hello" � �� �������� ����������.

��� ����������� ����� � ���, �� ����� ���������, � �� �� �����, �� ����� �� ������ ��� ������ ��� ��, �� ���� ��������� �����. ������ ����� �� ������ ��������� ��������� ������������ ��� �����, �� ��������� �� ������� - ����� STDIN �� STDOUT .

������������ STDIN �� STDOUT

��� STDOUT ��� �������� ����. ���� �� �� �� ������ ������ ������ ������ ������ �� ����, �� ��� �����. ���� ������� ��������� ����������� STDIN . �� ������� ������� ������������ ����� �����, ���� ��� ���������� �������� ��� ��� ����� ������?

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

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

���� �� � ������ ��� �������� ���������� ���, �� ���� STDIN , STDOUT �� STDERR ��� �������� ������? ���� ���, ���� ��� ������� ��������, ���� �� ������ ����, �� �� ��������� ��������� �� �������� cat - ���������� STDOUT �� ������� � �������� ���� � ����. ��� ���� ��� ������� ���������� STDOUT � �������� ���� �� STDIN ���� ������� (���� ��� ��� pipe ��� ��� ������ � �����), ��, ��������� � ������ �������:

          ls | wc -l

�� ��� ������, ���� �� ������ ����������� ����� ������� ������ ���������� ��������, �������� � ����? ��� �� �������� ��������� �������� `` (�������� ���������). ��������� ��������� ���� �������:

        `<���� ������� ������>`

�������� ������ ���� �����, �������� �� ����� ���������� ����������� � ��������� �������� /bin/sh ��� �������� �� �� � ������� ���� STDOUT ����� �� �����. ��, ������� ��� ������ ���������� �����, ��� ������ �� ���������� ��� STDERR , � ���� - ��� �������� ������ ������ STDERR , ���� ���� �� ����� ������ ���� ����� � STDERR � ����� ������, �� �� ��� ���� �������� ����� 䳳 ��� �����. ��� �� ����������, �� ���� ������� ��� ����� ������. � ����-�� ���������� � ���, �� ��� ��������������� ���� �� �������.

������, � ����� ���� ������������ ����� �� ����� �������� ���� �� ��� �� ����, �� ��������������� �������� ``. ����������� ������ - ��� ������� �� ��, �� ���� ������� ��� ��������. �����, �� ���� ���� ���, ���� �� �� 100% �������� � ����, �� �������� ���������� ��� ������� � ��� ����� �� ������, �� ���� ������ ��� ��������.


( ������������! ) -

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

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

           # touch myprog.log
           # -rw-r--r--   1 root     root            0 Jan  6 18:55 myprog.log
           # perl -e "`mv /var/log/myprog.log /var/log/myprog.log.0`"
           # -rw-r--r--   1 root     root            0 Jan  6 18:55 myprog.log.0

��� ����������� shell-����� ��������� ���������� ������������ ``. (���� ��� ������ ������������, ������ � �� ����� ���� � ������������� ������, ��� �� ������ �� ��� ��������). ���������� �������� � ����� ������� ������ ����� ����� ����� �� ��������� ������� mv (1) . ��������� ������ ������ �� ��� 䳿, ��� �� ���������� ����� ������������ ( log ) �����. ������ ������� ��� ����� ������� ��-�����, ��� ��������������� ���� ����� ��������� � ��� �������� �������.

          #!/usr/bin/perl
          `mv /var/log/myprog.log.3 /var/log/myprog.log.4`;
          `mv /var/log/myprog.log.2 /var/log/myprog.log.3`;
          `mv /var/log/myprog.log.1 /var/log/myprog.log.2`;
          `mv /var/log/myprog.log.0 /var/log/myprog.log.1`;
          `mv /var/log/myprog.log   /var/log/myprog.log.0`;

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

        #!/usr/bin/perl
        while (<>) { print }

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

Meta:

  • �������� ����� ������
  • �������� �������� ����� ``
  • filehandle ??
  • �������� ������� -- <>
  • ����������� ������ ������� �� STDIN - while (<>)
  • ���������� �� ���������� �����, ��� �������
    • �������� ����� �� �����
    • ³������� STDIN ��� �������
  • ��������� ����� �� �����
    • ��������� ����
    • ���������� STDOUT ��� ������ � ����
  • ����� $_

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

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

�� ��������� �� ����-������ ���������� ������� � ������������� �� ���������� ������� �����? ͳ���� ��������� � ��� �������� ����. ������ �������� � ������� ���� ������ � ���������. �������� ����������� ������ �� � ����, �� � ���� "������������������" ��������� ����� ���� � � � ��� �� �����, � ������ �������� ��, �� �������. ͳ���� ���������! ������? ���, �� ���� �� ���������� ����� ����������� � ����� 156 ����? ϳ� ����� ���� ��������� �� ��� ��������, �� ����� ��� ����� ���������. ���� ��� ���� ������ � ���� �������� ������� ���������. ������� � ���������� ����� emacs � ��������� ������������ ����� � �����, � ��� ����� 2 ������� ������ ������� ������������ ��� � ���� ������.

���������, ���� �� �������� �� � �������� ����������. ������� � ��� �������� ������� ���� �������������, � ��� ����� ��������� ������ ������� ��� �� ���������. ������ ����: �� ����� ������ � ����� ������� ���� �������� �� �����������, � ���� �������� �� �������� - � "ѳ����", � "ѳ�.", � ����� "ѳ�". ������� �������� �� "ѳ�" �� "ѳ����" � "ѳ����" ���� ���� �������� ������������� � ��� �� "ѳ�������". �� ����? ��� �������� �� ���� ��������� ������. � ������ ������� ������� ������� �� "ѳ����" �� ������� ����� "ѳ�", � ����� ���� "�" ��� ��� ������� " ", ��� ������ ".", � ���������� ������� ���� ���� "�" ��� "�". ��� � � ������ ����������� ������. (�� ����, ���� �������� ����������� ������. ������� ����� ��������� ������ �������� ���������, ��� ��.)

���, ��� ��� ��� �������� � ��������� ������ (����-�� �� �� � ��ѳ, �� � �����), ��������� ������ ������. ϳ��������� ������ (*) �� ����� ��������� (?) � ������� ����������� ���������� ������. � ��������� �������� ������ (��������� � ����-��� � ���) ������ ������ "����-��� ������������ ����-���� �������", � ���� ��������� ������ ���� ����-���� ������. ����, ���� ���, ���������, ������� �������� ����� ��� �����, �� ����������� �� "l", �� ������ ���� ������ �����������: ls l*

��� ���� ��������� � �������� �����. ��� ��������, �� ����� ����������� �� "z": ls *z (� ������ �������� ������� �� ����� �� �������: �������� ������� � ��ѳ �� ������. � ��ѳ ������ ������ �������� "����-��� ������������ ���� �� ����� ���� �� ���� �����").

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

����� (���� �����) ��������� ������

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

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

������ ���� ���� ������������ ��� ���, ���, ������, ��� �������� �� ���: ��-�����, �� �������� �������� �� ������� ��� �� ����� �����, ���� ��������� ���������� ������� � ����� (�������� �� ��������: "�������!", ���� ��������� �� ����� �����) �, ��-�����, ��������� �����, �� ������� ������� ���� �� ���� ����, �� ��� ����� �� �������.

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

        #!/usr/bin/perl
        #### A.
        $a = "anyky ";  
        if ($a =~ m/a.*/) { print $a; }
        #### B.
        $b = "benyky ";
        if ($b =~ m/a.*/) { print $b; }
        #### C.
        $c ="iily varenyky ";
        if ($c =~ m/a.*/) { print $c; }

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

        dk@sophy $ ./mytest.pl
        anyky iily varenyky dk@sophy $ 

������� �������� ���������� � �����쳺� ����� ����. ������� - ��, �� �����, ������� � ���������. ������� � �� �������� �������� ���� �� ���������� ������ � ������� � ����� ���� ������, � ������� ������. ��� ����������� ������ ���������� ���� � ����� ������, � ���� ���, �� ��� �� �������:

        if ($a =~ m/a.*/) { print $a; }

META �������� ����� ��������, ���� ����� ��� �������� ����� ��� ������ ���������

���, ��� �������� � ��������������, ���������� �������� �������� ����� if (...) {...} , ��� � ���� ������ ��� ������������. ���� ��������� ���������: if ����� � ����� ������� ����� - �������� �� ��������� ��������� ���� �����. �� ����� ������ ����� �������� ���������, � � ����� �� ������� ���� ���������, ��, ����, ��� ���������� ����� ��, ������� �������� �������� ����� ����� - �� ����� �� �� ���������� ������, �� ����� �� ������� ����������. � ������ ������� �� ����������� ����������� ������ �������� ���������. �� ����� �� ����� ������:

       if ( <�����> ) { <����> }

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



������ ��������� ����� � ������������� �� ��������������� �������� ��� ���������� ������� � ������� ������. ���� �������� �� � ��������� "������", �� ���������� "<����>" ( � ������ ������� �������� 'print'). ���� � � ��������� ������ �� ��������, �� � 'print' �� ����������.

��������, ��� ����������� ��� ���������� �������, � ���� ����� ���������� � ����� ������. ֳ ������� ��� (���������� ������� A.):

        ��� ������� - "$a", 
        ������� ������� - "=~",
        ����� ������� - "m/a.*/".

������� ������� � ����� ����� � ����������, ���� �'���� ��������� �����, �������� � ��� ������� � ��������� ��� ���������� �������, �������� � ����� �������.

���� ����� ������� ������ � � ����� � ��� ���������� ������, ��� �� �� ����� ��������. ��� ��� ���������� ����� � ����� �������� ���� ������ (�����) �������. � ������ ����������� ������� ���������� ������� � "a.*". � ������ ��� �����: "����� a, ���� ��� ��� ����-��� ������� ����-���� ����".

�������� ��� ���������� ������� ����������� ������ "m" �� ����� "������-�������", � �� ��������� ���������� �����. �����:

        "<��������>/<����������-�����>/". 

˳���� "m" ������� �������� ������ (��� ���������) � ����������� �����. �������� �� ����� �� ����� "match". ����, ��������� ����� ����� ��������� ��������� ������ ������ (���� ����� ������ �� ��������� "~=") �� ���������� �������, ���� ����� �������� �� ���������. ���� �������� �����������, �� ���� ������� (������� �����): "Match!" � ��������� �������� ��������� ��, �� ��� � �������� ������.

���� ���������� ��� "match" �������� ����������, �� �������� ����� �����: "�������!". ���� ��� "�������" ������ ��� ��������� "������". ����������� �� ����� ��������� ���������� � ��������� ��: "�� �� ��������� ��! ����� ����!". � ���� "����� ����", �������� 'print' �� ����������.

���������� �������� �� ��������� ��������� ������� � ����������� ��������, �������, �� ���������� ��� ����� ����� �������, � ����: ���� A. �� ���� C. �� ����� $a �� $c ����� � ��� ����� "a". � ������ $b �� ����, ���� � �������� print �� ����������� � ����� �����.

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

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

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

�������� m//

���� ����������� ������� �����, �� ���� �����, � ���� ����� ������� �������� ������ - �����. ��� ����� ������ ������� � ����: m/a.*/ �� /a.*/ . � ���� ��� ������ �������, �� ��������, �� ����� ��������� ������ � ���� ������, �� ��������� �� ������ � ���� � ����������, ������ ��� �����, ���� ��������. � �� � �������� ����, �� � ������� ������� �� ������ ������ " " � �� �������� "m ".

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

        #!/usr/bin/perl
        $a = "anyky ";
        if ($a =~ /a.*/) { print $a; }
        $b = "benyky ";
        if ($b =~ /a.*/) { print $b; }
        $c ="iily varenyky ";
        if ($c =~ /a.*/) { print $c; }

�������? ���. ��� �� ��������. ����� ���...

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

������ ���� �� ���� ������ ������������� ������������ "�������", � �� �������� ���������� ����� - "//". ���������, ���� �� ������ ����� � ����� ����� �� ������ ���������. ��� ����, ��� ��������� �� ��� �� ��������� ������ ������� ���� ������. ��� ���� ����� "���������" ������� ������, ���� ���, �� ���������� ����� �������������� �� ���� ����, �� ��������� ���������. � � ����� �������� ���� � �������� ���� ���� �� ����� ��� ����������� �����.

����� ������ � ... ��������� ���� ��. ��� ����� � ���� �������, ���� ��������������� ����� m// (����� m ����� ������� ����'������). ������ ��� // ���� ���� ����-���� �� ��������-�������� � �� �������� ������. �� �������� ������ ������ ���������:

        if ($a =~ m/a.*/) { print $a; }
        if ($a =~ m:a.*:) { print $a; }
        if ($a =~ m~a.*~) { print $a; }

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

        if ($a =~ m{a.*}) { print $a; }
���������� ����� $_

� ���������� ������� �� ��������� ��������� � ���� ������ �������� ��������� ����������� ������. ��� � ���� �������� �������� �� ��������� ����� ����� ������� �� ���� ���������� ����������� ��� ����� �����, ��� � ������� ���������� ��� ����, ��� ��������� ���� �������� ��� ���������� ������ � ����������� ��������. �� ����� � ���� ����������, �� $_ � ��������� ��������� �����.

ֳ� ������ ����� ����������� ����-�� ��������, ��� ����, �� ����-��� ����� "����������" ������. ���, � �������� ��������, ���� ����� $_ ��������������� � ���������, �� �� ����� �� ��������� ������ (�����, ������� ������ �� ����� �� ��������) �, ��� ����, ��� ���� �������� ���� ���������� ��� ����.

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

        #!/usr/bin/perl
        $_ = "anyky ";
        if (/a.*/) { print }
        $_ ="benyky ";
        if (/a.*/) { print }
        $_="iily varenyky ";
        if (/a.*/) { print }

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

        $_ = "anyky ";
        if (/a.*/) { print }

� ������� ����� ������ $_ ������������ ����� ��������. � ��� ��� ��������, � ������ ��� ����. ����� ��������� � ������ ������. � �������� ������ ����� ������ 'print'. ���� ��� ��������: "Print - ��?". � ������ - ��?

�������� print, ������ �� ��� ���� ���������, �� � �������� ��������� �����. � ����: ���� �� �� ��������� ���� �������� �����, ��� ����� �� ������� ��������� (��������� - � ������� � print), �� ����� ���������� ����� $_.

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

���� �������� ��, �� �������� � ����� if (/a.*/) { print } � ���������� �� � ���� ���� �� ���� ������� �� ����� ����: "���� ���������� �������� ����� $_ ������ � ��� ����� a ���� ��� ��� ����-��, �� ����� �� ���������� ����� �����������".

"������������" ��������� ������

�� ������, ���� ��� ������� ������� ������� ������� �����, � ���� �� ����������� ��� �� ����� ���������� �����? �� ������� ��� ����� ������ ������ ���������� �����, �� ���� ������������� ����� ������ �������� ��������� if ? �� �� ��-������?

����� ������������� ����-���� � �������� ������. ��� ���������� ��� ����� �������� ���� ���� ����� ���������. ������ =~ ������� ������������� ���������� !~ , � ������� ������ ������� ��� ����� ��������� �� ����� �����������: ����, �� ��� � �� �������� ��������� ���������� ����� ���, ���� �� ���������� �� ��� ���������� �������.

�����:

        #!/usr/bin/perl
        $a = "anyky ";
        if ($a !~ /a.*/) { print $a; }
        $b = "benyky ";
        if ($b !~ /a.*/) { print $b; }
        $c ="iily varenyky ";
        if ($c !~ /a.*/) { print $c; }

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

         ./mytest.pl
         benyky 

���� ������ ��������� ������� ����� ��������� if ����� ����� �������� �������� ��������� �� ����������. �����, ����� �� ���������� ������ ���� �������� �� ����������:

        #!/usr/bin/perl
        $_ = "anyky ";
        if (!/a.*/) { print }
        $_ ="benyky ";
        if (!/a.*/) { print }
        $_="iily varenyky ";
        if (!/a.*/) { print }

� ������ - �� ���� ����� �������� ���������. �������� ���� ����� - ���� - �� ����� ����, ��� � ����� ������ �� ���� ����� �������� ���������. � ���� �������� unless � ��������� �� ��������� if . �����, if (!<�����>) {<��>} � �������� �� unless (<�����>) {<��>} , � � ����������� ����� �� ��������� ���������� ������ ����� ���������� � ������:

        #!/usr/bin/perl
        $_ = "anyky ";
        unless (/a.*/) { print }
        $_ ="benyky ";
        unless (/a.*/) { print }
        $_="iily varenyky ";
        unless (/a.*/) { print }

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

��-�, ���� ����, �� �� ��� ����� ������������� � �� ������ ����������� ��������, � �� ������� �� ��������������, ������ ��� ��� ������ ������� ���� � ������, ����������� �� ���� ������ � ��������� ������������� � �������������� ������ � �����������. ��� �, ��������, �� ��� ����� ���������� ��������� ��� ���� ������ �� ������. ҳ���� � ���� ��, �����-�� �����-��, ������ ���-��, � �����... �� �����, ���� ���!

���, ���� �������� ���������� � ����������� �������� ��� ���� �� ������� ����������. ������ ������ ������� ��� ���������, ����� ����������� ��������, ����. ���, ������!

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

        $ - ������ ����� ����� (�������� �, ������� ��
            ������������ �������, ����� ���� ����� � ����
            ����������� ������).

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

������� 1.

            $_="anyky";
            if (/^a.*/) { print }
            $_ ="benyky ";
            if (/^a.*/) { print }
            $_=" varenyky";
            if (/^a.*/) { print }

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

            ./mytest.pl
            anyky

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

������� 2.

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

            $_="anyky";
            if (/.*y$/) { print }
            $_ ="benyky ";
            if (/.*y$/) { print }
            $_=" varenyky";
            if (/.*y$/) { print }

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

            ./mytest.pl
            anyky varenyky          

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

������� 3.

���� ��'������ ������� ����� �� ����� �����, �� �������� ����:

            $_="anyky";
            if (/^a.*y$/) { print }
            $_ ="benyky ";
            if (/^a.*y$/) { print }
            $_=" varenyky";
            if (/^a.*y$/) { print }

            ./mytest.pl
            anyky

������� 4.

�� ������ ������ �����? ���� ������! ������ ����� ���������� � ������� � ����, � ������ ����������:

            $_="";
            if (/^$/) { print "������ �����!" }

            ./mytest.pl
            ������ �����!

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

������

���������� ������� �������, �� ���������� ��� ���������?

            $_="�����";
            if (/^.*$/) { print "����� �� ������!" }
            $_="";
            if (/^.*$/) { print "����� �� ������!" }

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

  1. �������� ���� �������� ����������, �� �� �� ����������, ��� �������� ���� �� ����� �� ����������?
  2. ���� ���� ������������ ���� �� �����, ��������� ������ ������ ���, ��� �� �������� ��, �� �������.
���������� ��� �������� �� ��������

��������� ������ � ���� ����� ����� ������� �������, �� ����� ���� ���������� �����������. �� ��� ������ � ������� � ���, �� ������, ������, ������ ����� ( ^ ) �� ���� ������ ( $ ). � �� ���� ���������� ������� ��� ���, ��� �� �� ���� ������. �� ����������� ����� ������ ���������� ������ �������, �� ���� ����������� � ���� ������ ������ - ���� ��������� ��� ����. ���, ��, ���������, ����� a , � ����� if (^a) ������ ���� �� - ����� a .

�����, �������� ��������-�������� ������� � ���������� ������� ����� �� ����� ������� ���������� �������� � ����� ������� ���� ����:

       ����-���� ������ ��      - ������ ��� ��� ������.
       ����������� ����������� 
       �������     

��� ��� ����� � ���������� ������� ��� ��������. ���� �������, ���� ����� �������� �����, � ���� �� �� ���� ����� ����������� �� ���� ��� (�� � if (/a/) ), ��� ��� ���� ( �� � if (/aa/) ), � ����� (������� ������ ���, �����, � ������� �������) ������� ����.

�� ����� ������� �� ������������� ������ ������������� (���������) ���� ����� ���� �������� ������� ������� ���� � �����. �� ���� ��������� �� ������ �� ������ " .* ". ����������� � ���� �������� - ����� ������ �����, � ���� ����� "��" ���������� 5 (�� �����, � �� �����) ����, ��� ���� ������� � �������, � ���� ����� �� ��� ���� ����� (����� � �� ����� ���� ��� ������, ���� ���� ��������� ������ �������� �� ����, �� ����� ����� ������ ����, � ������ �� ... ��, ������ �� ���� ���������). ���� � ����� �������� ������� ��������� �� "��������" -- ��������� ����� �� ����. �� �������� ������ ����������, ���� ������� �������� (��-��������� ������ "match") ������ ������, ���� ����������� ����� ������� ����. � �� �� ������ ���������� ���:

         <������><�������>

�� � ����� �������� ���������� ��� ���� (� ��������� ����������� NM - �� ��� �����):

       "*"            - ��� ����� ��� ������, ��� ��������� ������
                      "����-��� ������� ����" (��������� ����);

       +            - ���� ������ �� ������� �� ������ *, ��� ����
                      ������ ������ "����-��� ������� ����", ��
                       +  ������ "����, ��� ����� ����";

       {N}          - ������ "N ����".

       {N,M}        - ������ "�� N �� M ����".
       {N,}         -  ������ "N ��� ����� ����".

       {,M}         - ������ "�� �����, ��� M ����".

N.B.

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

� �����-� �� ���������� �� ������ ��������:

������� 1

����� /b+/ ���� ��������� ����� ��������� ���������:

  • banana
  • abooboo
  • abba

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

  • led zeppelin

������� 2

����� /b*/ ������� ��� ������� � ������������ ��������.

������� 3

/o{2}/ ������� ����� ������ ������� ������: "abooboo", � /b{2}/ ������� ����� "abba".

������� 4

���������� ����� /a+/ � �������� ����� ���������� �������, �� /a{1,}/ �� /aa*/ .

����� ������� ������������ ����� �����: ���, �� ����� � ���������� ������, ������������ ������ �� ����. - �������� ����-���� ������ �� ���, �� ������� � ����� �������. �����, [ab] ������ "��� a , ��� b ".

������, ��� ������� �������� � ����� ���� �����, �� ���������, "�����" �� "�����" ������� ����-� �������� ����:

        if (/[��]�[��]��/) { print }

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

������� 5

���� ��� ������� �� ������ ���, ����������� ����� �, �� ���������� ��� �� 1998 ��� �� 1999 ����, �� ������ �������� ����:

if (/199[89]/) { print }

������ ����������� �� ����� ������� � �������� ����������� ������� ��������� ���������� �����. ��� �� ������������ ���� ����� ������, ���� ��� ������ ������� ������� "����-��� �����", �� ������ ������ ��������, ���, �� �� ����� "³� � �� �" ��� ����� ���� � �������� �� ������ ������: "�-�". ����������� �� ���� ������:

        if (/a-z/) { print }

�� ������ ������, �� ���� ������������ ����� �����, � ����� ����������� ����-��� ����� (�������� !) ��������� ������. �����:

������� 6

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

  • Abudabi
  • 10 indians
  • potato head

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

  • 505-444-124
  • $20.77
  • ALFA TEAM

��� ���� ��������� � ����: ����-��� ��������� �����, �� ������ �������� �� 3 �� 8 ���� ���� �������� �� [3-7] .

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

������� 7

���������� ����� /^ 199[7-9] [a-z]+/ ���������� �������� � �'��� "���������" ���������� ������:

  • ^ - ������� �����;
  • " " - �������;
  • 199[7-9] - 1997, 1998 ��� 1999;
  • " " - �� ���� �������;
  • [a-z]+ - �����, ��� ���������� � ����-��� (���������) ������� ���������� ����.

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

      +-------------------------
      | 1998 omega
      | 1999 alpha
      | 1997 beta
      | 1997 gamma $20
      | 1998 sigma Proxima
      | 1999 s $40
      | 

, � �������� - �� �������� �� �� ����������:

      +-------------------------
      |1999 omega
      |1998alpha
      |1997 Beta
      |1999 $100
      |  1999 omega
      |

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

  1. �� ���� � ��� ���� ������ ���� ��� �� ���� �������, � ���� ��� �����? �� � ����� ������� �������� ���������� �����? (��� ������� ������� ���� ���������)
  2. �� ������ ����� ���, ��� �� �������� ����� � �����, � ���� � ����� ���� ����� � �� �����?
������������ ���������� ���������� ������

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

� ����� ������� �� �������� ��������� �����. ������������ ������� ����� �� ��������� �� ������ ����������� ������ ������� ����� ���� �������, ��� ������������ ���� �������� ����������� ������. ��� ���� ������ ����� ������ ���������� ����-�� 䳿, ��������� ��� �������. ��� ����� ����� ����������� ������ � ������������ ����� �� ���� �������: ��� ���������� �����, �� ���� ��� ����� �� 1 �� 9 (���������, \1, \5), ��� ������ ������ �� ���� ��� ���������� ����� (�� ���������, $1, $5 ��� $29). ����� ���� ����� ($n ��� \n) ������ �� ������� �����, �� ���������� � ����������� ����������� ������, ���� ��������� � n-� ���� ������.

������� 1

³������ ���������� ����� �� ������������ ��������� � ����� ���� ������. ����� ����� ����� ������ �� ���� ��� ��������:

           $a =   " 1998 omega";
           $a =   " 1999 alpha";
           $a =   " 1997 beta"
           $a =   " 1997 gamma $20"
           $a =   " 1998 sigma Proxima";
           $a =   " 1999 s $40";
           $a =   " 1999 omega";
           $a =   " 1998alpha";
           $a =   " 1997 Beta";
           $a =   " 1999 $100";
           $a =   "   1999 omega";

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

          if ($a =~ /^ (199[7-9]) ([a-z]+)/) {
             $year = $1;
             $item = $2;
             print "г�: ", $year," �����: ", $item, "\n";
          }

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

         г�: 1998 �����: omega
         г�: 1999 �����: alpha
         г�: 1997 �����: beta
         г�: 1997 �����: gamma
         г�: 1998 �����: sigma
         г�: 1999 �����: s

������� 2

����� ������ ���������, ��� ���� ��� �� ��-������ ���������. ������� �������� �������� ������, ���� ���� ��������� � ��������� ������ � ����-����� �����. �����! �� ����� ����������� ������, � �� �� �� �� ������� ����� � ����� �������� ���� ³�����, ���, ����. "�����" ��� ��������������� � "��������" ����� - ˳���� ��� ������ �� �� ���������.

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

��� ��� ���-� ���� �� ������� �� ������ ����� �����. �� ���� ���:

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

          #!/usr/bin/perl
          if (open (STDIN, "who|")) {
              while (<>) {
                if (/^([a-z][a-z0-9]*) /) {
                    print $1, "\n"
                }
              }
          } else {
              die "�� ���� �������� ������ who !\n";
          }

����� ���, �� ��� ������� �����, ��� ������ �� ����� ������ � ����� ������. � ����� ��� �� ����� ��������, ��������� ������� who .




      META   ((( non greedy ������ �  -- ? ))) 

      META   ((( ����� � $<�����> )))
       * scope of $(digit)
       * difference \ $ (more: \11, $11, \011)
       * othe matches $+, $&, $`, $', $0

      META   ((( ������� ���� ����� - ���������� ������� )))
    ====
      META   : (���������� ������� (metacharacters) - egrep )

           \   Quote the next metacharacter
           ^   Match the beginning of the line
           .   Match any character (except newline)
           $   Match the end of the line (or before newline at the end)
           |   Alternation
           ()  Grouping
           []  Character class

      META   :  (���������� ������� - ���������� �� egrep )
           \t          tab                   (HT, TAB)
           \n          newline               (LF, NL)
           \r          return                (CR)
           \f          form feed             (FF)
           \a          alarm (bell)          (BEL)
           \e          escape (think troff)  (ESC)
           \033        octal char (think of a PDP-11)
           \x1B        hex char
           \c[         control char
           \l          lowercase next char (think vi)
           \u          uppercase next char (think vi)
           \L          lowercase till \E (think vi)
           \U          uppercase till \E (think vi)
           \E          end case modification (think vi)
           \Q          quote (disable) pattern metacharacters till \E

Natalya and Dmytro Kovalev
������ ��� �� �������: [email protected]
������� �������: http://www.asahi-net.or.jp/~as9d-kvlv
��� ѳ� 27 12:29:36 JST 2000
�����
 
[an error occurred while processing this directive] TopList
© 2000-2003, ���, ������� �������� -- ���� �� ����������, �������� ����������� -- ����� ������, ��i���� -- 08.06.2003 14:30:22