����� 19� ���� �����:
���� CGI-��������� � ��������� ���������� CGI-��������� �������� ���������� ����� CGI ��� ��������� ����� ��������� ������ ������������� ����� ������ ���������� ����� �������� CGI-��������� �������� ����� ����� � ���������� ������ � CGI-���������� Perl � Web: �� ������ CGI-���������������� �������������� ���������� ���������� �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.)
|