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

����� 19

    � ���� �����:


�G�-����������������

���� � ������� ��������� ���������� ��� �� �� ������ �������� � ���������� ������ ��� �������������, �� �� ��������� ������� � World Wide Web. Web-������ (������ ��������� ��� URL) ������ ����� ����� �����: �� ��������� �������� � � ������ �����������, �� �������� �����-��� � �� ��������� ������ �������, �� ����� �� ����������������� �������.

������ �� ����� ���������� Web-������� �������� ������� ���� �����, ��������������� ��� ����� ������ �������������. �� ������� ������ � ����� ����� � �������� �� ������ ��� �������. ��� �������� ��������� ����� ��������� �� Web-�������, ������� ������� ��������� ���� ������ � ���������� ����� �������� ����������. ������ ��� ��������� (������ ��������� ��� ��������� ������ ��������� ����������, ��� CGI-���������) ������������ ����� ������ ��������� � ������������ ���� ������; ��� ����������� ��������� ���� ������ � ����� �������� ��� ���� ���� ������, � �������� ���������� ���� ������ � � ����� �������� ��� Web-�������� (������ � HTML-�����).

CGI-��������� �� ������ ������������ ������, ��������� � �����. ��� ���������� � �����, ����� �� �������� �� ����������� �����������, � ���������� ����� �������������� ��� ����������� ����� ����, ��� "�����" ��� �������. Web-�������� � CGI-���������� � ��� �� �������� � ������� ���������, � ����������� ����� �������� � ����������� ������������ ����������. ������ ������������ ���������� ������ Web ���������� � ������������� ���������� ����������, � �� ������ ���������, ������-��������� ��� ������ ����� � ���������.

���������� �� ����, �� ��� ���, ��������, �������� �������� ��� ��� ������������� ������ � ��������� ����������, Web �������� ����� ������� �³�� ������. ��������� �� ����� ���� � �������, �������, �������� �������������� � � ��������� ������� � ��������� �������, �� Perl �������� �������� ��� Web-����������������.

� ���� ����� �� �� ������ ������ ������ CGI-����������������, �� � ����������� ������� ������������ ��������� �������� � �������������� �������, ������������ ������� � ��������-��������������� ���������-������� �� Perl. � ����� ����� �� ����� ��������� �������� � ���������� Perl ��� ������ ����� Web-����������������.

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

�� ������������, ��� �� ��� � �������� ������� � HTML.

������ CGI.pm

������� � ������ 5.004, � ������ ������������ ������������ Perl ����-������ ������ CGI.pm, ������� ��� ����� � ��� �����*.

���� ������, ������� ������� �������� �����, ����� ������ ������-��� ����� How to Setup and Maintain Your Web Site, ���������� ��������� �������� CGI-�������� �� Perl � ������ ��������. ��� � ��� Perl, CGI.pm �������� ���������-�����������, ������� ��� ����� ������������ ����-������� � ����� ��, �� UNIX � Linux �� VMS; �� �������� ���� � ����� ��������, ��� Windows � MacOS.

* ���� � ��� �������������� ���� �� ����� ������ ������ Perl (�� ��� ������� 5.001) � �� ��� �� ��������� ���������� �� �����, ������ �������� CGI.pm �� CPAN.

 

���� CGI.pm ��� ������������� � ��� � �������, �� ������ �������� ��� ������ ������������, ���������������� ����� �� ��������, ������� �� ����������� ��� ������ man-������� Perl, �������� � ������� ������ ���(1) ��� perldoc(l) ���� ����������� � HTML-�������� ������������. ���� ������ �� ����������, �������� ���� CGI.pm'. ������������ �� ������ �������� � ��� ������, �������������� � ������� ������� pod *.

������������ CGI-���������, ������� ��������� man-�������� ������ CGI.pm ��� �����. ��� �� ������ �������� �������� ������� ����� ������, �� � ����������� ������ �� ������������� ��������� � ��������.

���� CGI-��������� � ���������

�� ���. 19.1 �������� ����������� ����� Web-���������, Web-�������� � CGI-����������. ����� ��, ������� �� ����� ���������, �������� �� �����-���� ������, �������, ��� � ���� ������� ������ ������������� ������� �������, URL (Uniform Resource Locator). ���� URL ��������� �� Web-������ � ������, ��������� ����� ������ ������. ����� �������, ������� ��������������� � ��������, ���������� ��������� ������. ����, ������, ������ ������������ ����� HTML-�����, ��������������� ��� ����������, �� Web-������ ��������� ��� ����� � �������, ������� ����� ������� �� �� �����, ����� �� ����� ������ ��������� ������.

������ ��������������� ��� ����� ������ ���� � ���� ����� ����� ��� (��������� � HTML-���� �����) � ��������������� ��������, ������� �������� ���, ��� �� ������� � ���� ����. ���� ����� ������� (����� HTML-��������� <form>) � CGI-����������, ������� ������������ ������, ��������� � �����. ����� ��, �������� �����, �������� �� ������ Submit, ������� ���������� � URL CGI-���������. ����� ���� �� �����-���� � ����� URL ��� ���������� ������ �������, ������� ������� �� ����� ��� ����� ��� ���=� ���� �ɺ; ������ ��� � ��� ��� ����, ���������������� ��� ����� ������, � ������ �������� � ������, ������� �� �����. ����� �������, URL, � ������� ������� �������� ������, ��������� ���� � �����, �������� �������������� ��� (������� ������� ��������� ���, ��� ����� ����� ��������������� �����):

http://www.SOMEWHERE.org/cgi-bin/some_cgi_prog?flavor=vanilla&size=double

�� ������ ����� ��� ���� ���=��������. ����� ���� ���������� ���� �� ����� ����������� (&). ������� � ������� CGI.pm, �� ���� ������ ������ �� ������������. ��������� /cgi-bm/some_cgi_prog/WA ���������� ������� ����-���; �� ������ ������ ����� ���� ��, ��� �� �������� ���� � CGI-���������, ������� ����� ������������ ������, ��������� � HTML-�����.

* Pod ���������� ���������� plain old documentation ("������� ������ ������������"). ��� ���������� ����� �������������, ������������ ��� ���� ������������ �� Perl. ������� ������ ����� ������� ������� �� man-�������� perlpod(l), � ��������� pod-����������� ������� �� man-��������� pod2man(l), pod2html(l)pod2text(l).

���. 19.1. ���������� ����� � ������������ CGI

����� Web-������ (� ������ ������ www.SOMEWHERE.org) �������� URL �� ������ ��������, �� �������� ��������� CGI-��������� � �������� � ��� � �������� ���������� ���� ���=��������. ��������� ����� ������ ��, ��� ������ ������, � (��� �������) ���������� HTML-��� �������, �������, � ���� �������, ��������� ��� � ������� ��� ������������� ������������.

"����������" ����� ��������� � ��������, � ����� ����� �������� � CGI-���������� ������� � ������������ � ����������, ��������� ��� HTTP. ��� ��������� CGI-��������� �� ���� ������������ �� �����, �.�. ������ CGI.pm ��� ������ ��� �������, ��������� � �������������� ���������.

������ ��������� CGI-���������� �� ���������� (� ������ �������-���) �� �������� ����� ������ ����������� ������������� Common Gateway Interface. �� ���� ���� �� ����� ������������; ��� �� ������ �������, CGI.pm ������������� ������������ ��� ���������, �� ������ �� ��� �����-���� �������������� ��������.

�������, ��� ������� �����, ��� CGI-��������� ����� �������� � ����� HTML-����������, � �� ������ � ������. ��������, �� ����� �� �������� ����� HTML-���:

Click <a href="http://www.SOMEWHERE.org/cgi-bin/fortune.cgi">here</a> to receive your fortune.

 

����� fortune.cgi � ���������, ������� ������ �������� ��������� fortune (� UNIX-��������). � ������ ������ � CGI-��������� �� �������� ������� ���������. ������ �������: HTML-�������� ��� �� ��������� ��� ������ ��� ������������ � ���� ��� ��������� ������������ ������, ������ ��� ��������� ������� ����. ��� ������ ����� �� ��������� �� ���� � �� �� ��������� � � ����� ������ � ���������� fortune, ������������ � URL ����� ��������������� �����, � � ������ ������ � � ���������� date. ��� HTML-������ ��������� �� ���:

<� href="http://www.SOMEWHERE.org/agi-bin/fortune_or_date?fortune"> <a href="http://www.SOMEWHERE.org/cgi-bin/fortune_or_date?date">

CGI-��������� (� ������ ������ fortune_or_date) ���������� ��, ����� �� ���� ��������� ���������� �������, � ��������� �� �������������� ��������� fortune ��� ��������� date.

��� ������, ��������� ����� �� ������ ����� ������ ���=��������, ����������� ��� HTML-����. �� ������ �������� CGI-���������, ������� ����� ������ ����������� ���, ��� �� ���������, � ������ ���������� �� ����������� ����� ���������.

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

���������� CGI-���������

��� �������� ��� ����� ������ CGI-���������. ��� ��������� ������, ��� � ��� ���� �� �������� ������������ ������ CGI.pm:

#!/usr/bin/perlS -w

#����� ������ �� CGI-�������� print �END of Multiple Text;

Content-type: text/html

<HTML>

<HEAD>

<TITLE>Hello World</TITLE>

</HEAD>

<BODY>

<Hl>Greetings, Terrans!</Hl>

</BODY </HTML>

END_of_Multiline_Text

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

��� ���������� �������� ����� ���� ��������: ����� ������� print. ��������� ������� ���-������� �������� � ��� ��� ���������� here-����-����. �� ������� �� ���� ������ "������ ���" � �����, ������� �� ������� �������� ��������. ��� ������������, ����������� � shell, ����������, ��������, ����� ������ �� ������������� �����-������, �� �� ����� ���� ��� ������ ������� ������ ������ � ������� ���������� ��������, ����-������� ��������� �����. ��� �������ź �������� ���������� �� ��������� ������ ��������� � ������������ �� ������, ���������� �������� �������, ������� ������ ������ � ����� ������ ���� ������; ������ ������� � ���� ������ ���� �� ������. ����-��������� �������� ������� ��� �������� HTML-����������.

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

������ Content-Type ������ ��� ������������ �������� ����������. ����� �� ��� ���� ������ ������, ������� �� ������ ��������� �������� � ������ ���������.

� ����������� �������� ������ CGI-��������� ������������ ����-����, ������ ��� ������������ �������� �� ���� ������ ������, ���������� ��������� (����� ����� ��������� ��������� ����������� �����) �� ������-���� �� ��� ��������������� ����*. ����� ������ ������ ������� HTML-��������, ���������� � ������� ������������, ��� �� ������������� � ���-���������.

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

��. ���� ������ "����� � ���������� ������ � CGI-����������".

���� ��������� ������� ������� �������� ��� ������ �� �� ��������� ������, ���������� �������������� �� �� ����������-�������. ���������� ����� ���������� ������� �� �������, ���� ��� CGI-��������� ����� ������-������ ������� /usr/etc/httpd/cgi-bin/ � ��� �����������. �������� ���� ������ � Web-�������� ��� ��������� ���������������.

����� ���������� ����������� ����� ��������� � CGI-�������� �� ����� ���������, �������� �������� �� ������� ��� � ������� URL. �����-���, ���� ���� ��������� ���������� howdy, URL ����� ��������� ���:

http://vww.SOMEWHERE.org/cgi-bin/howdy.

������� ������ ��������� ������������ ������ ������� ������� ���� ����������. ������, ������� ����� www.SOMEWHERE.org, ����� �������� ��������� cgi-bin/howdy, ������������ � ���� URL, � ����� ����� usr/etc/httpd/ cgi-bin/howdy. ��� ��������� ������������� ��� Web-������ ����� ������-����, ����� ��������� ������� ������������ ��� ��������� � ����� ���������.

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

�������� ���������� ����� CGI

��� �������� ���������� � CGI-��������� (������, � ����������� CGI-��������) ������� ����� �� �����. ����� ��������� � ����, �������� URL �� http://www.SOMEWHERE.org/cgi-bin/ice_creain?flavor=mint.

����� �� "�����������" ���� ������� �� ���� URL, ������� �� ������ ������ Web-������ ������� ��������� ice_cream, �� � �������� � ��� ������ flavor=mint. ������ ���� ��������� � ��������� ������ ������-�������� � ��������� ��. ��� ������ �� ��� ������, ��� �������. ������ ��������� �������� ������ �� � ��������� ������ ��������������, �� ����������� "�����������" ���������� ����� �� ������� ����������. �������� ��, ��������� ������ ����� ���������� ������� ����� ������ ��� ���� ��������� �������, ���, ��������, �� ������� ������ ��� �����, �������� ��� ������� �������� ������� �������, ������� ��������� ���� ������ �������������� ������ �� ���.

� ����� ������� � ������ CGI.pm, ������� ������ ��������� �������� CGI-������ ���������. ����� �������� ���� ������ � ���� ���������, ������ ��������

use CGI;

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

�������� use ����� �� �������� # include ����� � ���, ��� � �������� ���������� ��������� ��� �� ������� �����. �� �� ��������� ����� ������������� �������������� ����������, ������������, � ����� �������� � ���������� �� ����� ������ �� ������ �� ����������. ��������� �� � ������, ��������� �� ������ ������ � ��������� use,� � �� ������� ���������� � ��������� �������� � ���������� ���, ��� ����� ��� ���� �����������.

� ������ ������ ���, ��� ��� ����� ������������ �� ������ CGI.pm � ��� ������� param () **.

���� ��������� �� �������, ������� param () ���������� ������ ���� �����, ��������� � HTML-�����, �� ������� �������� ������ CGI-���-�����. (� ������� ������� ��� ���� flavor, � � ����� ������ � ������ ���� ����, ������������ � ������� ���=�������� ���������� �����.) ���� ������ ��������, ������������ ����, �� param () ���������� �������� (��� ��������), ��������� � ���� �����. �������������, param (" flavor") ���������� "mint", ������ ��� � ����� URL �� �������� ?flavor=mint.

* ����� ���� Perl-������� ����� ���������� ��. ����� ����, �������� use ������������� ��� ����������. � ���, ��� ��������� ���� ����������� ������, �� ������ ������ � ����� 5 ����� Programming Perl ��� �� man-�������� perlmod(l).

** ��������� ������ ������������� ������������ ��� ���� �������, ��, ��������� CGI.pm � ��� �� ����� ���� ��������� ������, ��������������� ��� �������, �� ������ ����������� ��� ������� ����.

 

�������� �� �� ��� � ����� ������ ��� ��������� use ������� ����� ���� �������, �� ����� ������������ ������ qw (). ��������� ����� ��� ����� ����� ������������ �������� ���� ������.

#!/usr/local/bin/perlS -w

# ��������� ������ �� ����� � ������� ����� ���������� (������ 1) use CGI qw(param);

print �END_of_Start;

Content-type: text/html

<HTML>

<HEAD>

<TITLE>Hello World</TITLE>

</HEAD>

<BODY>

<Hl>Greetings, Terrans!</H1> END_of_Start

my $favorite = param("flavor");

print "<P>Your favorite flavor is $favorite. print �All_Done;

</BODY>

</HTML> All Done

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

������� ��� ����� ���������� ����� �����, �� � CGI.pm ���� ��������� ������� �������, ���������� �����. ������ �� ���� ������� ���������� ��������� ��������, ������� �� ������ ��������. ��������, header () ���������� ��������� ��������, ���������� ������ Content-type � ����������� ������ �������, start_html (������) ���������� ��������� ������ ��� HTML-����� (�������� ���������), hi (������) ���������� ��������� ������ ��� HTML-��������� ������� ������, � � (������) ���������� ��������� ������ ��� ����� HTML-�����.

�� ����� �� ����������� ��� ��� ������� � ������, ����������� � ��������� use, �� ����� ������ �������� �� �� ��������� ��������. � CGI.pm, ��� � �� ������ ������ �������, ������� ��� ���������� ��������� ������� � �����, ������� ���������� ������ ������������� �������. ��� ����� ���� ��������� �������� ��������� (������ �� ������� ���������� ����������) � ������ ������ ������ �������. � ������ CGI.pm ������� ����� ���������:

: cgi

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

: form

������������� ��� ������ �������� ����������� ����, �������� text-field().

:html2

������������� ��� ������, ������� ���������� ����������� �������� HTML 2.0.

:htmi3

������������� ��� ������, ������� ���������� ��������, ������������ � HTML 3.0 (����� ��� <table>, <super> � <sub>).

:netscape

������������� ��� ������, ������� ���������� ���������� HTML, ����������� ��� Netscape.

:shortcuts

������������� ��� ����������, ������������ HTML (�.�. "html2" + "html3" + "netscape").

:standard

������������� "�����������" �����������: "html2", "form" � "cgi".

:all

������������� ��� ��������� ������. ������ ������ �������� � ������ CGI.pm, ��� ������������ ���������� %tags.

�� ����� ������������ ������ ��������� : standard. (��������� ���������� �� �������������� ������� � ���������� �� ������� ��������� � ����� 7 ����� Programming Perl, � ����� �� man-�������� Exporter 3).}

��� ��� �������� ���� ��������� �� ����� ������������, ������� ������������ � CGI.pm:

#!/usr/local/bin/perlS -w

# cgi-bin/ice_cream # ��������� ������ �� ����� � �������

t ����� ���������� (������ 2) use CGI qw(:standard);

print header() ;

print start_html("Hello World"), hi ("Hello World");

my $favorite = param("flavor");

print p("Your favorite flavor is $favorite.");

print end_html();

������, ��������� ��� �����? ��� �� ����� ������������ � ������������� ������ �����, � ���������� � HTML-������, ���� �� ����� �� ������.

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

���� ��� ������� ������� ��������� ����� ��������� � ������� � �������� ����������� �����. � ����� ������ �������� ����������� �������������. ���������� �����, ������� ��������� �������� ������������� ������, ������ ���������� vidgets; ���������, ��� ���� ������ ������� �������, ��� "���������� ������������ �����". ����� ���������� ���� �������� ����- � �������������� ��������� ����, ����������� ����, �������������� ������, ��������� ���� ������ � ���������� ������.

�������� ��������� HTML-��������, ������� �������� ����� � ����� ����������� "��������� ����" � ������� ��������. ����� ������������ ������� �� ������ ��������*, ���������� �������� ice_cream, �������� ��������� ACTION.

<!-- ice_cream.html �> <HTML>

<HEAD>

<TITLE>HeUo Ice Cream</TITLE>

</HEAD>

<BODY>

<Hl>Hello Ice Cream!</Hl>

<FORM ACTION-"http://www.SOMEWHERE.org/cgi-bin/ice_cream">

What's your flavor? <INPUT NAME="favorite" VALUE="mint">

<P>

<INPUT TYPE="submit">

</FORM>

</BODY> </HTML>

�������, ��� CGI-��������� ����� �������� �� �������� HTML-����������, ������� �� �� �������. ��� ���������� ����� ����� ������������ � ��� �������, ������� ��������� � URL ������ ���������. CGI-��������� �����, ����� �������, �� ������ ����������� �� ������, ��������� ������������� � �����, �� � ������������ HTML-�������� � ������. ����� ����, ���� ��������� ����� ��������� ���� �� ������ ��� ��� ������. ���, ��� ��� ����� �������,� ��� ��������� ��������� �� ��� �����, ������� ������ ������ ���� � ����������� �� ����, ���� �� ��������� ������� � ����������� ��� ���. ���� ���������� �� ����, ��������� �������� � ������� ������ �����; � ��������� ������ ��������� �������� ������, ��������� ������������� � ����� ���������� �����, � ��������� ���������� � ������� ����� �� ��������� ���� ������.

* ��������� �������� ��������� ���������� ��� ������ ��������, ���� ����� �������� ������ ���� ���� ��� ����� ������. ���� ������ ��������� � ���� ���� � ������������ �������� ������� [Enter], ��� ��������� �������� �� ��������. ������ ����� ����� ������������ ������������ ������.

 

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

#!/usr/local/bin/perlS -w

# ��������� ������ �� ����� � ������� ����� ����������

# *� ������������� ���� �����* (������ 3) use CGI qw(:standard);

my $favorite = param("flavor");

print header;

print start_html("Hello Ice Cream"), hi ("Hello Ice Cream");

if ($favorite) {

print p("Your favorite flavor is $favorite. ");

} else {

print hr, start_form;

print p ("Please select a flavor: ", textfield("flavor","mint"));

print end form, hr;

���� �� ����� ������ � ��������� �� �������� �� ������, ������� ��������� �� ��� ��������� (� ���� ������ � ����� URL �� �������� ?whatever), �� ������� �����, �������� ������������� �� ���. 19.2. ��������� ���� ���������� �������� �������� �� ���������, �� ��� �������� ���������� �������, ���������� �������������� (���� ��� ����).

���. 19.2. �������� ����������� �����

 

������ ��������� ���� Please select a flavor, ������� ������� [Enter], � �� ������� ��, ��� �������� �� ���. 19.3.

���. 19.3. ��������� ��������� ����������� � �������������� ����� �������

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

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

������ �� ���������� ����� �������� ������ ����� ���������. � ���������, �� �������� � ��� ����� ���������� �����: ����������� ����, ������ �������� (������� ���������� order) � ������ ������� ����� �����, ����������� ������� ��� ������, ��������� �������������. ����������� ���� ������ ������ ��, � ��� ������� �� �����, �� ���������, ��������� � popup_menu, ����� ��������� ��� � ���� �� �� ���������� ��������� ������, "������". ������� textfieldO ������� ���� ��� ����� ������ � ��������� ������. ��������� �� ���� ������� �� ��������� ����, ����� ����� ��������� ��������� �������� �����.

#!/usr/local/bin/perl5 -w

# ��������� ������ �� ����� ������ ���������� � ������������� ���� ����� (������ 4) use strict;

# ������ ���������� ���������� � ��������� ���������� � ������� use CGI qw(:standard);

print header;

print start html("Ice Cream Stand"), hi ("Ice Cream Stand");

if (paramO) ( # ����� ��� ���������

my $who = param("name");

my $flavor = param("flavor");

my $scoops = param("scoops");

my $taxrate = 1.0743;

my $cost = sprintf("%.2f", $taxrate * (1.00 + $scoops * 0.25));

print p("0k, $who, have $scoops scoops of $flavor for \$$cost.");

} else ( # ������ ������, ����������� ������������� �����

print hr() ;

print start_form();

print p("What's your name? ",textfield("name"));

print p("What flavor: ", popup_menu("flavor",

['mint','cherry','mocha']));

print p("How many scoops? ", popup_menu("scoops", [1..3]));

print p(submit("order"), reset("clear"));

print end_form(), hr();

} print end_html;

�� ���. 19.4 ������������ ����������� ��������� �����, ������� ������� ��������������� ���������.

Ice Cream Stand

What's your name? |

What flavor: |t"ii4 How many scoops? 11

���. 19.4. ����� ������� �����

 

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

������

��, ��������, ��������, ��� ��� ������� popup_menu () � ���������� ������� ����� ������ �������� ���������. ��� �������� [ 'mint', 'cherry' , 'mocha' ] � [ 1. . 3 ] ? ���������� ������ ������� ����� �����, � ��� �� ������ �� �����������: ������ �� ��������� ������. ��� ����������� ���, ��� ������� popup_menu () � �������� ��������� ������������ �������� ������ ������ �� ������. ������ ������ �������� ������ �� ������ � ������������ ����� ����������� �������� �������� ����� �����, �������� \@choices. ���, ��������� �������� ����:

@choises = ('mint',"cherry','mocha');

print pC'What flavor: ", popup_menu ("flavor", \@choises));

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

print pC'What flavor: ", popup_menu ("flavor", ['mint','cherry','mocha']));

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

�����, ��� ������� \@������ ����� ��������� ������ �� ����������� ������� � ����������� �������� [ ������ ] � �� ��������� ����, ����� ������� \%��� ��������� ������ �� ����������� ����, � �������

( ����1, ��������!, ����2, ��������2, ... }

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

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

 

��������� � ������� �� ���������� � ����� 4 ����� Programming Perl � �� man-�������� perlref(l).

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

�� �������� ��� ������� � ����������� ���� ��������� ������ ����� ��������� ����������, ������� ��������� ������������ �������� ����� ����� ��������� ����� ����������. ������� scrolling_list () ������ CGI.pm ����� ��������� ������������ ����� ��� ����������, ������ �� ������� ������� �� ������������ ��������� (������������� �� ����� -) � �������� ����� ���������.

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

print scrolling_list(

-NAME => "flavors",

-VALUES => [ qw(mint chocolate cherry vanilla peach) ],

-LABELS => {

mint => "Mighty Mint",

chocolate => "Cherished Chocolate",

cherry => "Cherry Cherry",

vanilla => "Very Vanilla",

peach => "Perfectly Peachy", },

-SIZE =>3,

-MULTIPLE => 1, tl for true , 0 for false

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

-NAME

��� ���������� �����. �������� ����� ��������� ����� ������������ ����� ��� ������� ���������������� ������ �� ����� � ������� ������� param().

-LABELS

������ �� ��������� ���. �������� ���� � ��� ����� (�������� ������), ������� ����� ������������ �����. ����� ������������ �������� �� ��� ���� �����, � CGI-��������� ������������ ��������������� ���� ����. ��������, ���� ������������ �������� �������, �������� ��� Perfectly Peachy, CGI-��������� �������� �������� peach.

-VALUES

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

-SIZE

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

-MULTIPLE

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

���� -multiple ����������� � �������� "������", �� ������ ��������� ������, ������������ �������� param(), �������:

@choices = param("flavors");

��� ������ ������ �������� ����� ��������������� ������ � � ��������� ������ �� ������������ ��� ������ �������� ������ ���� "�� ����":

%flavors = (

"mint", "Mighty Mint",

"chocolate", "Cherished Chocolate",

"cherry", "Cherry Cherry",

"vanilla", "Very Vanilla",

"peach", "Perfectly Peachy",

);

print scrolling list(

-NAME => "flavors",

-LABELS => \%flavors,

-VALUES => [ keys %flavors ],

-SIZE => 3,

-MULTIPLE => 1, #1 for true , 0 for false ) ;

�� ���� ��� �� �������� � ������� ��������, ����������� �� ������ ���� %flavors, ������ �� ������� ����������� � ������� �������� \, �������� ��������: �������� -values ����� ���� ���� � ���������� ������. ������� �������� ���������� �������� keys � ���� ������ �� ���������, ������ ��� � ������������ � �������� ������ ������� scrolling_list() ������ ���� ������� ������ �� ������, ������� ��� ��� � ������� ���������� ������. �������� ���������� ������ ������� �������� ������������� ���������� �������� ��� ������.

�������� CGI-��������� �������� �����

���� �� ����������� ������� �������, ����������� ����, �� ��� ������ ���� �������� ��������� �������� ������� CGI-���������. � ��� ������ ����� �������? ���� �� ���������������� ����� � �������� CGT-��������� ��� ���������� �������� ������, ����� ���������� ������ Web-���� ����� ���������� � ��� ���� ����������� ���������*.

* ��� �� ������� ����, ��� ���������� ����� ���� �� ������� ���������� Webchat (����������� ����� Web).

 

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

��������, �� ������, ����� ��������� � �������� ����� ����������� � �� ���������� ��������� ������ ���� ��� ��� ���� �������������, ������� ��� ����� ����, ���� ��� ����� ������������. �������� CGI-��������� (��������) �������� �� ��� ����� �����������, ������� � ���, ��� �������, �� ����� ����� �� ���������� ������ �����. �������������, ������, ��� ���������� �������,� ��� ������� ��� ��� ���� � �������� ������� �������. ���� �� ��������� � UNIX-�������, �� ������ ������� (�� ������ shell) ��� ������������� ����� ��������� �������� ����� ���������:

touch /usr/tmp/chatfile chmod 0666 /usr/tmp/chatfile

�������, �� ��� ���������� ������������� ������ � ���������� �������� ����� ���������� �������������? ������������ ������� �� ��������� ������� �������������� ������� � ������, ������� ���� �� ������ ������������ ���������, �� �������� ����, � ������� ���������� ��������� ��� ������������ ������������. ����� �������� �����, �� ���������� Perl-������� flock, ����������� ������������ �������� ����������� ������ � �����, ������� �� ��������� ��������. ��� ����� ��������� �������� ���:

use Fcnti qw(:flock); # ����������� LOCK_EX, LOCKJ3H, LOCK_NB flock(CHANDLE, LOCK_EX) || bail ("cannot flock $CHATNAME: $!");

�������� lock_ex ������� flock � ��� ��� ��������� ��� ���������� ����������� ������ � �����*.

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

* � ������� Perl �� 5.004 �� ������ ���������� � ����������� use Fcnti � � �������� ��������� ������� flock ������������ ������ 2.

 

��������-��������������� ���������������� �� Perl

������� ������ ����� ������� ��� ������������ ��������� � �������� � � ��� ������ �����. ���� ������� ������ ���������� ������ ������������ ���������� ������ ������� �� ����� ������ �����, ��� ��� �� ����� ��� ����, ����� �� �� ����� ������������ ������������ ��������-��������������� ������������ ������. ��������� ���������� �� ������������� � �������� ��������� ������� ��������� � ����� 5 ����� Programming Perl � �� man-�������� perltoot(l).

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

�����, ��������, ������ CGI.pm ���������� ������ $query, ������� ������������ ����� ������� ������ ������������. ���� �� ������ �������� �������� �� ����� �������, �������� ������������ par am () :

$query->param("answer");

������ ������ ��������: "��������� ������������ param () � �������� $query, ��������� "answer" ��� ��������". ����� ����� � �������� ������������� ������ ����� ������ ������������, �� ����������� ���� ��� �� ����������� ��� �������, �� ������� ������� �������������� ����������� ->. ������, ������������, ��������� � ���������, ���������� ��������.

���� �� ������ �������� ��������, ������������ ������������� param (), �������������� ������� ���������� ������������ � ��������� ��� �������� � ������� ���������� $he_said:

$he_said = $query->param("answer");

������� �������� ��� �������; ��� �������� � ��������� ���������� (����� ��� ���������� $ query � ����� �������), � �� ��� ����� ���������� ������� � ����. ��� �� ����� �� �� ������� ������������� ��� ������ � �����. �� ���� ����, ��� ������ ��� ������, �� ������ ������������� ��� ������� ������. ������� ������� ���������� ��� ������, ������������ ������������� ��� ������.

��� ����������� ������� �������� ��� ��� �����. ��� ������ ������ ������� �� ����� ������ ��� ���������� ��, � � ���� �� ������� "�����" � "������" ����� ������������ ��� �����������. ����� �������, �� ����� �������� � CGI-������ ��� � CGI-������. ������� ����������� ������ ������� � ������������ ������, ����������� ���� �����.

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

��� ������:

$query = CGI->new(); # ������� ����� new() � ������ "CGI"

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

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

$query = new CGI; # �� �� �����

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

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

������� � ������ CGI.pm

CGI-������ �������� � ��� ������, ��� ��� ����� ������������� ���� ��� ������������ ������ � ��������������� ���������, ���� ��� ��������� ������. ��������� ��������� ������� ������� ����� � ������� ���������� ���������� � ������ CGI.pm, ������ � ������� ������������ ���������� � ������� ������. ���� �������� ����� � ���� �� ����� ��������. �� �������� ������ � ������� ����������, ������� ������������ ���� � �����, ����� CGI-������ � �����, ��� �������, � ������� ����� �� ������� ������������ ����� HTML-��� ��� �������� ������� ������������.

�������, ������, ��� ����� ������� ���� ������ ����. ��� CGI.pm, ��� � ��� ������ ������ �������, �����, ������� ��������� ��������� �������,� ��� ����� ������ new () *.

* � ������� �� C++ Perl �� ������� new �������� ������; �� ���������� �������� ������ ������������ ����� ������-������������, ��� gimme_another() ��� fred.0. ��� �� ����� ����������� ������������� � ����� �������� � ����, ��� �������� ���� ������������ �� ���� ������� new ().

 

������ ����� ������������ � ���������� ����� CGI-������, ��������������� ����������� �����. ���� ������ �������� ��� ������, ��������� ������������� � �����. ������ ��������� ��� ����������, ����� new () ������� ������ ����� ������ ������, ���������� ��������� ���������. ���� � �������� ��������� ������ ���������� �����, �� ������ ���� ����������, ������� ����� � ��� ������, ��������� � ����� � ���������� ������ ������ � ���������.

����� ������ �� ������� ��� ��� ��������� � ������� �� ������. ������� �����������, ��� ��� ���������� guestbook � ��������� � �������� cgi-bin. ���� ��� � �� ������ �� �� ���� �� ��� ���������, ������� �� ����������� ���� (� ������� ���� ����� ������� HTML-�����, � ������ ������ ������, ��������� � ����� �������������, � �������� �� ���), �� �������, ��� ���, ��� �� �����, ��������� ��� ��� �������. ������� ��������� HTML-��������, ���������� ����� �������� �����, ��� �� �����. ������������ ��� �� ������� ��������� ���� ���������, ������ ������� ������ �� ����� ������:

Please sign our <� HREF="http://www.SOMEWHERE.org/cgi-bin/guestbook">guestbook</A>.

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

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

#!/usr/bin/peri -w

use 5.004;

use strict; # ���������� ���������� � ������ � ������� use CGI qw(:standard); # ������������� ���������� �������� :standard use Fcnti qw(:flock); # ����������� LOCK_EX, LOCKJ3H, LOCK_NB

sub bail ( # ������� ��������� ������

my $error = "@ ";

print hi("Unexpected Error"), p($error), end html;

die $error;

!

my(

$CHATNAME, # ��� ����� �������� ����� $MAXSAVE, # ����� ���������� ������� $TITLE, # �������� � ��������� �������� @cur, # ��� ������� ������

Sentry, # ���� ���������� ������ ) ;

$TITLE = "Simple Guestbook";

$CHATNAME = "/usr/tmp/chatfile"; # ��� ��� ��� � ������� ��������� $MAXSAVE =10;

print header, start_html($TITLE), hi ($TITLE);

$cur � CGI->new(); # ������� ������ if ($cur->param("message")) ( # ������, �� �������� ���������

� $cur->param("date", scalar localtime); # ���������� ������� ����� Sentries = ($cur); # �������� ��������� � ������ }

# ������� ���� ��� ������ � ������ (� ����������� ����������� �����������) open(CHANDLE, "+< $CHATNAME") II bail("cannot open $CHATNAME: $!");

# �������� ������������ ���������� �� �������� �����

# (LOCK_EX == exclusive lock)

flock(CHANDLE, LOCK_EX) || bail("cannot flock $CHATNAME: $!");

# ������� � $MAXSAVE ������ ������ (������ � ����� �����) while (!eof(CHANDLE) && Sentries < $MAXSAVE) (

$entry = CGI->new(\*CHANDLE); t �������� ���������� ����� �� ������

push Sentries, $entry;

}

seek(CHANDLE, 0, 0) 11 bail("cannot rewind $CHATNAME: $!");

foreach $entry (Sentries) (

$entry->save(\*CHANDLE); # �������� ���������� ����� �� ������ } truncate(CHANDLE, tell(CHANDLE)) || bail("cannot truncate $CHATNAME: $!");

close(CHANDLE) || bail ("cannot close $CHATNAME: $!");

print hr, start form; # hr()�������� �������������� �����: <HR> print p("Name:", $cur->textfield(

-NAME => "name")) ;

print p("Message:" $cur->textfield(

-NAME => "message",

-OVERRIDE => 1, # ������� ���������� ���������

-SIZE => 50)) ;

print p(submit("send"), reset("clear"));

print end_form, hr;

print h2("Prior Messages");

foreach $entry (Sentries) f

printf("%s [%s]: %s",

$entry->param("date"),

$entry->param("name"),

$entry->param("message")) ;

print br() ;

} print end_html;

 

�� ���. 19.5 �� ������ �����������, ������� ���������� �� ������ ����� ������� ���� ���������.

���. 19.5. ����� ������� �������� �����

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

usa 5.004;

���� �� ������ ��������� �� � ������� ����� ������ ������ Perl 5, �� ����� ���������� � ����������� ������

use Fcnti qw(:flock)

� �������� lock_ex � ������ ������ flock �� z.

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

print header, start_html($TITLE), hi($TITLE) ;

����� ��������� ����� CGI-������:

$cur = CGI->new(); # ������� ������

if ($cur->param("message")) ( # ������, �� �������� ���������

$cur->param("date", scalar localtime); # ���������� ������� �����

Sentries = ($cur); # �������� ��������� � ������

>

���� ��� �������� ����������� ���������� � �������� �����, �� ������ $cur ������ ��������� ���������� � ������, ��������� � �����. �����, ������� �� ���������� (��. ����), �������� ��� ���� �����: ���� ����� ��� ����� ����� ������������ � ���� ��������� ��� ����� ���������. ����� ����, ����������� ���� ��� ������ �� ��������� � ����� ������ (����� �� ���������) ����� ����. �������� � ����� param() ���� ���������� � ��� ������ ������������ ���������, ��������� ������ ����������, ��������, ���������� �� ������ ���������.

���� ��� �������� �� ����������� �������� �����, � �������� ������ ����� �� ������ Please sign our guestbook, �� ������ �������, ������� �� �������, ����� ����. �������� if ���� �������� "����", � � ������ Sentries ������� ������� ������� �� �����.

� ����� ������ �� ��������� � �������� ������� �������, ��������� ����� � ����� ����������� �����. ��� ������ �� ����� ��������� � ������ @entries. (��������� � ���, ��� �� ������ ��� ������� ������� ������, ���� ��� ������� � �����, ������ ��������� ����� �������.) �� ������� �� ������ ������� ����������� ����:

open(CHANDLE, "+< $CHATNAME") || bail("cannot open $CHATNAME: $!");

��� ������� ��������� ���� � ������ �������������� ������-������. ������ open ����� ������������ sysopen (). ��� ����� ������� ����������� ������������� ������ ����������� ������ ����, ���� �� ���������� (��� ����������� ��� �����������), � � ��������� ������ ��������� ����� ����:

# ����� ������������� ��� "���������" �� ������ Fcnti ��� sysopen use Fcnti qw( 0_RDWR 0_CREAT );

sysopen(CHANDLE, $CHATFILE, 0_RDWRI0_CREAT, 0666) || bail "can't open $CHATFILE: $!";

����� �� ��������� ����, ��� ����������� ����, � ��������� � ���������� ������� ������� �� $ ��� save � Sentries:

flock(CHANDLE, LOCK_EX) 11 bail("cannot flock $CHATNAME: $!");

while (!eof(CHANDLE) &S Sentries < $MAXSAVE) {

$entry = CGI ->new(\*CHANDLE); # �������� ���������� ����� �� ������

push Sentries, $entry;

}

 

������� eof � ���������� Perl-�������, ������� �������� � ���������� ����� �����. ����������� ��������� � ����� new () ������ �� ���������� ������������ �����*, �� �������� ������ ������, �� ����� ��� ������ ������. ����� �� ��������� ���� ���, ����� �� ������� ����� ������, ������� �� (��������) ������ ��� ��������:

seek(CHANDLE, 0, 0) || bail("cannot rewind $CHATNAME: $!");

foreach $entry (Sentries) {

$entry->save(\*CHANDLE); # �������� ���������� ����� �� ������ } truncate(CHANDLE, tell (CHANDLE)) || bail("cannot truncate $CHATNAME: $!");

close (CHANDLE) || bailC'cannot close $CHATNAME: $!");

������� seek, truncate � tell ����������� Perl-�������, �������� ������� �� ������� � ����� ����������� �� ����� Perl. ����� seek ������������ ��������� ������� � ������ �����, truncate ������� ��������� ���� �� �������� �����, a tell ���������� ������� �������� ��������� ������� � ����� �� ��������� � ������ �����. ���������� ���� ����� ��������� � ��������� � ����� ������ ����� ��������� ������ $maxsave, ������� � ���, ������� ���� ������� ������ ���.

����� save () ������������ ���������� �������� �������. ��� ����� ������� ����� ��� $entry->save, ��������� $entry � ��� CGI-������, ��������� � ������� CGl->new ().

������ ������ ������������ ����� �������� ��������� ������� (������ ����������� ������ "=", ������� � ��������� ������):

���1=��������1 ���2=��������2 ����=���������

������ ���� ���������� ����������� ����� �������� � ��� ������������. (��� �����, �������, ������ �����, ������� �� �����, � ��� ������, ���� �� ������� �� ������ Please sign our guestbook.) ������� ��������� ��������������� ��������:

print hr, start_form; # hr() �������� �������������� �����: <HR>

��� �� ��� ���������, CGI.pm ��������� ��� ������������ ���� ������ ������ �������, ���� ������ ������� ����� CGI-������. � ����� ��������� ��� �������� �������� HTML-���� �� ���������� � ������� ������� �������, � ��� ������� ����� ����� ����� ���������� ������������ �������� ��������:

print pC'Name:", $cur->textfield( -NAME => "name")) ;

print p("Message:" $cur->textfield(

-NAME => "message",

-OVERRIDE => 1, # ������� ���������� ���������

-SIZE => 50)) ;

print p(submit("send"), reset("clear"));

print end_form, hr;

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

����� textfieid() ���������� ���� ����� ������ ��� ����� �����. ������ �� ���� ����������� ���� ������� ���������� HTML-��� ���� ����� ������ � HTML-���������, NAME="name", � ������ � ������� ���� � ��������� NAME="message" .

���������� �����, ����������� ������� CGI.pm, �� ��������� ���������: ��� ��������� ���� �������� �� ���������� ������. (�� ���� � ������� ������ "������" ������ � ������, ������ � ���� �������, ����� ������������ ������� �� ������ Please sign our guestbook.) ��� ������, ��� ���� name = "name", ��������� � ���������� ������� ������ textfield(), ����� ��������� �������� ����� ������������, ���� �� ��� ���� �� ���� ��� � ���� ������ �������� � ��������� �����. ����� �������, ���� �����, ������� �� ������ �������, ����� ����� ��������� HTML-��������:

NAME="name" VALUE="Sam Smith"

������ ������ ���� � ������ ����� text field (). �� �� �����, ����� ���� ��������� ��������� �������� ������� ���������. ������� ���� ���������� -override => 1 ���������: "��������� ���������� �������� ����� ���������� ���� � ������������ �������� �� ���������". ���� ���������� -size => 50 ������ ������ (� ��������) ������������� ���� �����. ������ ���������� �����, ����� ���� � ������ �������������� ���� ����������: -DEFAULT => '��������� ��������' � -MAXLENGTH => �, ��� n � ������������ ����� ��������, ������� ����� ������� ������ ����.

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

print h2("Prior Messages");

foreach $entry (Sentries) {

printf("%s [%s]: %s",

$entry->param("date"),

$entry->param("name"),

$entry->param("message"));

print br ();

} print end_html;

��� ��, ��� ��������, �������������, ������� h2 ������ HTML-��������� ������� ������. � ��������� ����� ���� �� ������ ��������������� ��������� ������� ������ ����������� ������� (��� ��� �� ������, ������� �� ����� �������� � ����������� ����), ������ �� ������ ����, ��� � ���������.

������������ ����� �������� � ���� ������ �������� �����, ���������� ������� ��������� � ������� ������ ��������. ��� ��������� ����������� ����� ����������, �������� ������������� ������ ����� ��������� ���� ����� ����� �� ����� �� ��������. ������� ���� � ������ �������� �������, ������������ ����������� �������� ���� � �� �� CGI-���������;

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

����� � ���������� ������ � CGI-����������

CGI-���������, ����������� � Web-�������, ������������� � ���������� ���� �����, ������ ��, � ������� ��� �������� ��� ������ �� ��������� ������. �������, �� ������ ������ ����������, ����� ���� CGI-��������� ��������� �������� ��� ������ �� �� ��������� ������*, �� ��� �� ����������� ���������� ������ ��������� ��� ������ � Web-�������.

������� ��� ����������� � ���� ������� ����� ���������� �������� �� CGI � ������� ����� �� CGI-����������������. ��������� �� ���������� ����������� � ����� �����.

��� ������� �������� �������, ����� ������������� � CGI-���������-�������. ��� ������������� ����� ������ �� ��� �������� �����������-����������� ��������� 500 Server Error, � ������� �� ������ ������������� � ������� �������������.

� ����, ������� HTML-��� � �������, �� ������ � ������ ������ ����� HTTP-���������� (�.�. ������� Content-type) � �����, ���� HTML-��� �������� �� �����. �������, ��� ����� ���, ��� ������ ��� ���������, ����� ������ ��������������� ������ Content-Type (�, ��������, ������ HTTP-���������) � ���������� ������ ������.

� ������� ��������� ������ � �������� � ������ ������ � ����������, ������� ��, ��� �������, ������ ����� ����� 0555, � ����� 0755. (��� ���������� ��� UNIX.)

� �������, � ������� ��������� ��������, ��� ������ ���� �����������, ������� ��������� ��� ����� ������� 0111, � ����� 0755. (��� ���������� ��� UNIX.)

� �������� ������ ���� ������������� � ��������������� ������������ ������ ������� ��������. � ��������� ��������, ��������, ��� ����� ���� /usr/etc/httpd/cgi-��.

������ �� ������� � ������ ��������� ������ ��������� � ������������ �� CGI.pm.

 

� ��������, � ��� ����� ������ �������� ����������� ������� ������������ ����������, �������� cgiwivipl. �� ��������� ������ �������� ��������� WWW-�������, ����������� ������������� ���������� �� ���������� CGI ��� ������� �������� ��������, �� � ��������� ������������� ��� ����� ���� ����������. ������������� ���������, ����� ��� ��������������� �� .cgi ����� ���� ������������, ����������, ���� FTP-�������� ����������� ����������� ������ �� ���� ���������, � ����� ��� "����������" ����������� ����� ��������� ���������. � ����� ������� ����������� ��������� ����� �������� ��������� � ��� �� ������� ��� ������ � ���������� Web-�������. ��� �������� �����, ��� ��� �����, ����� ������� ����� ���������� cgi ��� �1, ������ ����� �������� ����� ������� URL. ������ ������ ����� ����� ����� ������ ����������� � �� ������������� �� ����������������.

� �������: ���������� �1 ��������, ��� ��� Perl-����������, � �� ����������� Perl-����. �� ������� ��� �������, ����� ����� ������ �� �����������. ���� � ��� ���������� ������ ���� ���������� ���������� ��� ���������� ���������� Perl-�������� (������ ��� ���� ������������ ������� ������ �� ��������� ����, ����� ������������ ����� ����� ������ #!/usr/bin/perl), �� ���������� ������������ ����������^. ���, ������, �� ������� ��� �� ������ ������ ��� ���������� ���� �������.

� ������������ ������ ������� ������� ������� ���������� �� ���������� CGI ��� ��������, � ������� �� ��������� ���� CGI-��������. ��������� � ���, ��� ��������� � GET, � POST. (��� Web-������ �����, ��� ��� ������.)

� Web-������ �� ��������� ��� �������� ��� ������� � ����� ��������������� ������������. ��������� � ���, ��� ����� � ��������, � ������� ���������� ��������, ������� ��� ���� �������������, ��� ������� Web-������ ��������� ��������, ����� ���, ��������, nobody, wwwuser ��� httpd. ��������, ��� ����������� ������� ������� ����� ����� � �������� � ��������� �� ����� ������� ����� ������� ��� ������. ��� ������ � ����� UNIX ��� �������� ����������� ������� chmod a+w. ������������ ������� ������ � ������, ������ ������ ���������.

� ������ ���������� ���� �������� � Perl-������ -w, ����� ����� ����������� �������� ��������������. ��� ������������ � ���� ����������� ������ Web-�������, ������� �������� ��������� �� ������� � ��������������, ���������� ����� ���������. ������� � ������ Web-������� ���� � ����� ����� � ���������� ��� �� ������� ������� �������. � ���, ��� ����� ������������ ������, ����� ������ � �� �������� ������������ ������ CGLCarp.

� ���������, ��� ������ �������� � ���� � ��������� � Perl � ���� ������������ ���� ����������� (����� CGI.pm) �� ����������, ��� �������� Web-������, ������������� ���������.

� � ������ ������ �������� �������� ����� autoflush ��� ����������� ����� stdout, �������� ���������� $ | �������� "������", �������� 1. ���� �� ��������� ������ FileHandle ��� ����� �� ������� �����-������ (������, IO::File, IO::Socket � �.�.), �� ������ ������������ � ���� ������������ ����� �����, ��� �������� ����� ���������: auto-flush ():

use FileHandle;

STDOUT->autoflush(l) ;

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

Perl � Web: �� ������ CGI-����������������

Perl ������������ �� ������ � CGI-����������������. ����� ������ ����������� ��� ���������� � ������ ������ �����������, ���������� ����������� ��������� � ��������, "���������" �������������, ��������������� �������������*. � ��� ��� � ���� �������� ��������.

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

������������ ������������ Web-������� ����� ������� ������� ���� �������, �������� ��� ���������������, �� ��� �� ����� �����, ��� ��������� ����� ����������������. ��� ��������� ���� � ����� �� ������ ���������� �����-�� ���������: ���� ���-�� �������� �� ���, ��� ��� �������� ��, ������ ������� ��� ������. ���������� �� ����, ������� ������������ �������� ������������ ����������� �� �����, ����������� ������ ����� ����� ��� ������� ��� ������ �����, ������� ������� �� ����� ����������� ����������. �, �������, ������ ����� ���-�� ������ ������ �� ������������ ������.

Perl � ��������� ���� ��� �������� ������������������ ������������ ������, ��������������� ��� ���� ���������� �����������. � ��� ������� ����� ����� ����� ������������� �������������� ������ � ������� HTML-�������. Perl ����������� ��� ������������ � ������������� ����� �� ���� World Wide Web. The Perl Journal (www.tpj.com) ���������� Perl ��� �������� ���� ����� �������. Perl Language Home Page (www.perl.com) �������� ����� 10000 Web-�������, ������� ������������� �������������� � ����������� ���������� Perl-�����������.

* Perl-��������� � ����������� ���������� gd ������ �������� ���������� � ������ GD.pm, ������� ����� ����� � CPAN.

���������� Perl

����� �������, ����� ������� (������� ����������� ��� ������ ���� �� �����) � ����� ���������� Web-������ � Internet, Apache, ����� �������� � ���������� � ���� Perl, ��������� ������ mod_perl �� CPAN. � ���� ������� Perl ���������� ������ ���������������� ��� ������ Web-�������. �� ������ ������ ��������� Perl-��������� ��� ��������� �������� �������� ����������, ��������� ��������� �� �������, ���������� ����������� � ������� ����� ������ �����. ��� �� ������� ������� ������ ��������, ������ ��� Perl ������ ������� � Web-������. ��� ����� ������������� ��� ������ ��� ����, ��� ��� ������ � Apache ��� �� ����� ��������� ����� ������� ������ ���, ����� ��������� CGI-������. ������ ����� ��������� ����� �����, ������� � ��������� ������������������� Perl-���������. ��� ����������� �������� ���������� ����� CGI-��������; ������ ������ ����������� ��-�� ������� fork/exec, � �� ��-�� �������� ������ ����� ���������.

������ ������ �������� ���������� CGI � ������������ ����������� ������ CGI::Fast. � ������� �� ���������� ���� ����������� �������������� Perl, ����� ����� ���������� CGI �� ������� ������� Web-������� Apache. ����������� ��. �� man-�������� ������ CGI::Fast.

���� Web-������ � ��� �������� ��� Windows NT, ��� ����������� ������� �������� Web-������ ActiveWare, www.acftveware.cow. ��� ����� ����� �� ������ ������� �������� ����� Perl ��� Windows-��������*, �� � PerlScript � PerlIS. ����� PerlScript � ��� �������� ���������� ��������� ActiveX, ������� ��������� ���������� Perl-��� � ���� Web-�������� ���, ��� ��� �������� ���������� JavaScript � VBScript. ����� PerlIS � ��� ����������� ����������� ���������� ���������� ISAPI, ������� ��������� Perl-�������� ��������������� �� IIS � ������ ISAPI-����������� Web-��������, ����� ������������ ������� � ������������������.

������������� ������ � Web � ������� LWP

������� �� �� �����-������ ����� ����� ������ ��������� Web-�������� �� ������� ������� "�������" ������, ����� ��� �������� ��� ��������, ����� �� ��� ������ ����������� � �������� ��������? ����� ����, �� ������ ��������� �����������, ������� ���������� � �����-���� ���������, ��� ��������� ����������� ����� �������? ��� �����, ���� ��� �������� ��������� ����� proxy-������ ��� ��������� �������������?

* ����������� ����������� Perl ������ 5.004 ��������������� ����������� ��� Windows, ��� ���� ��������������, ��� � ��� ���� ���������� � (� ��� �������������, ��� �������, �������������).

 

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

������ LWP (Library for WWW access in Perl � ���������� ��� ������� � WWW �� Perl) �� CPAN ������ �� ��� ��� ��� ������ � � ���� ������. ��������, ��������� � �������� � Web-��������� � ������� ���� ������� �������������� ��������� ������, ��� ��� ����� ��������� � ������� ������������� ���������. �����, � �������, �������� �������� /perl/in-dex.html � ���� www.perl.com, ������� ��������� ������ � ���� shell ��� ������������� ������:

peri -MLWP::Simple -e "getprint 'http://www.perl.com/perl/index.html'"

�� ����������� ������ LWP: :Simple, ����������� ������� ��������� LWP � ������������ ������� ��������-�������������. ���, ��������, ��������� ���������, ������� �������� URL ��� ��������� � ������ �� ��������:

#!/usr/local/bin/peri use LWP;

$browser = LWP::UserAgent->new(); # ������� ����������� ������� $browser->agent("Mothra/126-Paladium:); # ���� ��� ��� foreeach $url (@ARGV) ( # ������� URL ��� ���������

# ������� GET-������ �� URL ����� ����������� �������

$webdoc = $browser->request(HTTP::Request->new(GET => $url));

if($webdoc->is success) ( # �����

print STDOUT "$url: :, $result->title, "\n";

} else { # ���-�� �� ���

print STDERR "$0: Couldn't fetch $url\n";

� }

��� ������, ������, ����������� �� �������� �������� Perl, �� ������� �����. �� �� ���������, ���, ��� � ������ CGI.pm, ������ LWP �������� ������� ����� ������� ������.

���� �������� �������� ���. ������� ��������� ������ � ���������������� ����� (����� ����� ������������������� ������������ ��������). ���� ������ ������������ ��� ������ �������� �� ��������� �������. ����� ������ ������������ �������� �����-������ ������ ���, ������ ����� ������� ����� ����������� ������������� ����� �����������. ����� ������� ��������� ��������, �������� HTTP-������ GET �� ��������� ������. ���� ��������� ��������, ������� �� ����� URL � ��� �������; � ��������� ������ �������� ��������.

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

 

��� ���������, ������� ������� ���������������� ������ ���������� ������ � �����������, ������������ � URL, ���������� � ���� ���������� ��������� ������.

#!/usr/local/bin/peri -w use strict;

use LWP 5.000;

use URI::URL;

use HTML::LinkExtor;

my($url, $browser, %saw);

$browser � LPW::UserAgent->new(); # ������� ����������� ������� f� reach $url ( @ARGV ) (

# ������� �������� ����� ����������� �������

my $webdoc = $browser->request (HTTP: :Request->new (GET => $url).);

next unless $webdoc->is_success;

next unless $webdoc->content_type eq 'text/html';

# �� ���� ��������� GIF-�����

my $base = $webdoc->base;

# ������ ������� ��� ������ ���� <� ...> � <IMG ..�> foreach (HTML::LinkExtor->new->parse($webdoc->content)->eof->links)( my($tag, %links) = @$_;

next unless $tag eq "a" or $tag eq "img";

my $link;

foreach $link (values %links) (

$saw{ uri($link,$base)->abs->as_string }++;

} } ) print join("\n",sort keys %saw), "\n";

�� ������ ������ ��� ������� ����� �������, �� ������� ���, ������ �����, ������������ ������ ���������� ����, ��� �������� ��������� ������� � �� ������. �� �� ���������� ����� ������ ��������� �� ���� ��������, ������ ��� ����� � ��� ���������� ��� ���������� ��������. � �������, � LWP ����� ����� �������� ������������ � �������.

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

�����������, � �������, �������, �������� � Web-���������������� ����� ���������� ������� ������, ��� �� ������ �� ���� ��������� �����. � CGI-���������������� ����� �������� ��������� ����� � � ����� ���� ��� �������� �������. ����������� ���� �������� ������� ��� ���������� ���� ������������ � ���� �������.

� ����� ������������ CGI.pm.

� ���������� LWP �� CPAN.

CGI Programming on the World Wide Web by Shishir Gundavaram (O'Reilly & Associates).

Web Client Programming with Perl by Clinton Wong (O'Reilly & Associates).

HTML: The Definitive Guide by Chuck Musciano and Bill Kennedy (O'Reilly & Associates).

How to Setup and Maintain a Web Site by Lincoln Stein (Addison-Wesley).

CGI Programming in � and Perl by Thomas Boutell (Addison-Wesley).

� ������� FAQ no CGI ���� ���.

� Man-��������: perltoot, perlref, perlmod, perlobj.

����������


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

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

2. �������� CGI-��������, ������� ���������� ��� ��������, ��������� ������, � �������� ���-������ � �����. (�����: �������������� ���������� ����� HTTP_USER_AGENT.)

 




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


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