perlfaq9 - Web�����<�若�˨�������������壔�若�
�����勉�祉�壔�激�с�潟�с�壔��web ��泣�ゃ����勐��茵������<�若�˨�勰�����篆<����������割����㋜���� �����������壔�若�壔�̹�≪�����莖ɱ�������宴�c�⓾����障�����
(web �����㋘�若����壔�若�壔��篏帥����鴻��?)
��壔����� 篏���������勉�㋘����˨�勛�娯��篏����(�����í�若�������⓾�若�吟�若�������若�帥����若��)��������� web ��泣�ゃ����� 罕�膀������⓾�������ŝ�������ŝ�壔����鴻�������㋘�鴻����潟�鴻��������膂≦�������宴������������� �����㋘�若����壔�若�壔��篏帥����������с�����������
��娯��篏���������ŝ����⓾�����HTML �����<�ゃ��(��������潟����勌����勤�����)��勛�∞����������� 膂≦����˨������������� Template Toolkit ��� Plack::Middleware::TemplateToolkit ��勉�������ŝ����勉��篏帥����������������������障��������
(��í�� web �����㋘�若����壔�若�壔��篏帥����鴻��?)
�����勤蟹�����吾�勐��膣���ɾ�������壔�������障�������� Perl ��勉����㋘�若����壔�若�壔�˨�壔����堺�㋜����ŝ����<�ゃ�˨�泣�若�������鴻�宴�若�˨�勐�������� ��ゃ�潟����í�������������������初�������吾����鴻�勉�潟�≪����ŝ��綏�紊у�初��紊�荐�茯� web ��泣�ゃ����障� �����������������勉����������障�����
篁ヤ����壔����劫����勤��羆���������������〠浦絎����茵������í�������ŝ����с����������潟�<�潟��篁������ ��������ゃ����勉����㋘�若����壔�若�壔�勌��荀с�с����� �����吾��茯㏍��������������紮������⓾����������������∫�c�������<�若�ŝ�潟�違�ŝ�鴻����� IRC �����c�潟����˨�̬蟹��������⓾��������������
- Catalyst
-
��激�������冴�勖⑳�儸��紊с����ŝ�潟����ャ�������c�������潟�≪����ŝ�括�����膤祉�������<�� 綣桁����˨�ŝ����吾�с�壔����������у�������ʋ����純����������障����� ��泣�若�����絲障�����絎������ɱ�九勝�����������贋����с�勐ぇ�����頰������ŝ�≪����ŝ�宴�若�激�с�潟�˨� 膣���眼�������������勉�с�����
- Dancer
-
��違�������㋘�㋘�激�若�ʒ����帥�����茹f�障�������⓾����⓾��荵初����у⑥膺������������� API ������箴������障����� ��≪����ŝ�括�����膤祉�壠ぇ��������ŝ����ゃ�ゃ�������障����� ������絨������������㏍�吾�с�壔����������í�у��綽�������絖☎����������勉�壔����⓾��膂≦����с�����
- Mojolicious
-
罸�莠������ャ�����HTML5 ��� WebSockets ��勉�������ŝ�ŝ�≪�˨�帥�ゃ�� web ���茵���̥�☎�鴻�� 綵���⓾�⓾����障�����
- Web::Simple
-
�憜����勖��絎�薑������с��綣桁����˨�ŝ����吾�с�壔����������с�����綺☁��荀���ф��膀���������⓾�������� �����鎞������� web ��≪����ŝ����˨�鴻�帥�������㋘�若����壔�若�壔��罕�膀������������� ��√����� Plack 篋������� web ��≪����ŝ�宴�若�激�с�潟��筝���ゃ�勌賢紊勉����c�鴻����������c� 腟���潟�ゃ�������������������潟����⓾����障�����
��������������⓾�� Plack ���篏帥�������娯��篏���������⓾��������Perl ��� web ��泣�ゃ����� 罕�膀���������������壠�堺�㋘�����茹c�����箴≦�ゃ����������障�� (紊������勖������� Plack::Middleware ��� ��������障��)���
(Plack ��� PSGI ��c�☖��?)
PSGI ��� Perl Web Server Gateway Interface Specification ��с��; ��������壠������� Perl web �����㋘�若����壔�若�壔��篏帥��罔�羣���с��web ��泣�ゃ�����罕�膀���������������˨�������� ���茹c�����綽�荀���壔�ŝ����壔����с��; 篏帥����������������� Plack ��с�����������
Plack ��� PSGI ��鴻�帥����壔��篏帥����������勉����若�˨�勰�������с����� ��������˨�� Web ��≪����ŝ�宴�若�激�с�潟����㋘�若����壔�若�壔�勉������� ��������˨�⓾�с�� 荀�膣���� ��ŝ����<�㋘�潟�鴻�泣�若�������⓾�若����c�ŝ����c����˨�帥�障����� Plack ��� Ruby ��� Rack ��� Python ��� WSGI ��勉�������� Paste ��˩室��⓾����障�����
Plack ��◐�㋝�ŝ�勉�潟�若�����篏帥�c�� web ��泣�ゃ�����罕�膀������������������с����障�������� �����⓾����堺�㋜����� web ��泣�ゃ��篁ュ����勉����勉�ŝ�����(Plack ���篏帥�c��) web �����㋘�若����壔�若�壔��篏帥����勉����������������御����≪�с�����
(���������絖���������� HTML �����������ゃ����˨��?)
HTML::Strip ���篏帥��������HTML �����������ゃ����������с�ŝ�靚������勉����㋘�若�潟����㏍�鴻����� 絨�������膣���ɱ就綣���˨����������������� HTML::FormatText ���篏帥�c�⓾��������������
(URL ��勐��������茵������˨��?)
HTML::SimpleLinkExtor ��� HTML ������ URL �����遵�冴����障��; ��������壔�≪�潟�˨�若�� ��ゃ�<�若�吾����ŝ����吾�с�壔����������㋘�若����������� URL �����˨����с����������勌����勐�������勉�帥�違�� ��宴����障����� ������茲������ŝ����勉��綽�荀���ŝ�������㋝�ŝ�� HTML::LinkExtor ��� HTML::Parser �� ��泣����壔�í�鴻��篏���������������с����障����� 篏������劫�ャ�ɾ�◒�������������������������勌����������� HTML::SimpleLinkExtor ���篏帥����������� ��с����障�����
篁紙����勉����㏍�鴻�������吾����� URL �����遵�冴�������������˨�壔��URI::Find ���篏帥����障�����
(HTML �����<�ゃ�˨�������с�������������˨��?)
(brian d foy ��˨����c�☗��茣���������障�����)
libwww-perl �����c�鴻����ŝ����ャ�若�激�с�潟��篏帥�c�⓾�������������� LWP::Simple ��壔�⓾�с��筝���勉�ŝ�純�若�鴻�������с����������⓾�������勐��絎鴻�����絖������������ 菴������障��:
use LWP::Simple qw(get);
my $html = get( "http://www.example.com/index.html" );
��ŝ�純�若�鴻����贋・�����<�ゃ�˨�˩��絖������������������с����障��:
use LWP::Simple qw(getstore);
getstore( "http://www.example.com/index.html", "foo.html" );
�����c�◑�������ŝ��������������綽�荀������������翫����壔��篁�篋����茵������������勛�㋝�ŝ� ��⓾�若�吟�若����若�吾�с�潟��(箴������違����í�⓾��)���篏������������ LWP::UserAgent ��≪�吾�ャ�若�˨��篏帥����障����� 絲乗º�����ŝ�⓾�с�������í�⓾�吟����激����ャ�㋘�若�������������翫����壔�� WWW::Mechanize ��≪�吾�ャ�若�˨��篏帥����障�����
(HTML �����í�若����勐�☎�������ɱ�������������˨��?)
���������茲���違�勉����若�吾�������í�若����� web ��泣�ゃ�����腱糸����������������ŝ��茲������ŝ�������� �����������������⓾�������ŝ�����WWW::Mechanize ���篏帥����障����� �����⓾�勤¼膣違�˨�ゃ����⓾�壔�������勉����㏍�ャ�<�潟����������с����⓾��������������
GET ��<�純��������篏帥�c�☗�ゃ����☎�������⓾�������勉�с�������違��URL ���篏���c�⓾�� ��������� query_form
��<�純��������篏帥�c�⓾����í�若����������潟�潟�若�������障��:
use LWP::Simple;
use URI::URL;
my $url = url('L<http://www.perl.com/cgi-bin/cpan_mod')>;
$url->query_form(module => 'DB_File', readme => 1);
$content = get($url);
POST ��<�純��������篏帥�c�⓾�������勉�с�������違����ɱ�������勉����若�吾�с�潟�����篏��������� ��潟�潟����潟�������ï����˨����潟�潟�若�������⓾�������障�����
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
my $ua = LWP::UserAgent->new();
my $req = POST 'L<http://www.perl.com/cgi-bin/cpan_mod'>,
[ module => 'DB_File', readme => 1 ];
my $content = $ua->request($req)->as_string;
(web筝���� %-encodings ��������潟�若����������������������������������˨��?)
��祉�������í�勐�翫�����web �����㋘�若����壔�若�壔�с��������茵����綽�荀���壔�ŝ����壔����с��; ��ŝ�壔����鴻�����篏���c����������˨�壔��LWP ��������勌����勉�≪�吾�ャ�若�˨��篁c�������˨����������� ��宴����障�����
��ɱ����ф��絖������������潟�潟�若����������˨�壔��URI::Escape ��≪�吾�ャ�若�˨��篏帥�c�⓾�������������� uri_escape
��∽�違�壔����鴻�宴�若��������������絖�������菴������障��:
my $original = "Colon : Hash # Percent %";
my $escaped = uri_escape( $original );
print "$escaped\n"; # 'Colon%20%3A%20Hash%20%23%20Percent%20%25'
���絖������������潟�若����������˨�壔��uri_unescape
��∽�違��篏帥����障��:
my $unescaped = uri_unescape( $escaped );
print $unescaped; # back to original
URI ���篏���������潟�潟�若����������勉�с�壔�ŝ�������������������勤��膣������ャ����˨����鴻�宴�若������� ������������篋������̥�����������綽�荀�������������������綽������ŝ����с��������������
(��ャ�勉����若�吾�˨�ŝ����ゃ�㋘�壔����������˨��?)
��祉�������í�� Perl Web �����㋘�若����壔�若�壔�壔��������茵����罘�罕������������障��; Catalyst �����㋘�若����壔�若�壔��篏帥�c�⓾�������ŝ��篁ヤ����勉�������˨�ŝ����障��:
$c->res->redirect($url);
$c->detach();
(��祉�������í�勉����㋘�若����壔�若�壔��篏帥�c�⓾�����) Plack ���篏帥�c�⓾����⓾�� Apache ��������勛Щ������絽吾�˨�ŝ����ゃ�㋘�壔����������� URL �����������ŝ����� Plack::Middleware::Rewrite ��虁�����箴≦�ゃ����������с�����������
(腱���� web ��冴�若�吾�с����鴻�壔�若�������ュ����������˨��?)
篏帥�c�⓾����� web �����㋘�若����壔�若�壔��茯�荐若�激�鴻�������������c�⓾�������������������⓾�������� ��勛����������眼����⓾�����������茯帥�鴻�⓾��������������
�����������壔��Plack::Middleware::Auth::Basic ��障����壔����勌���� Plack 茯�荐� ��ŝ����激�с�潟�勌����ゃ�� 荀���⓾��������������
(腱���� CGI ��鴻�壔�ŝ����������ɱ襲��帥����������������������ŝ����勉�������⓾�若�吟�若�������í�若�������ュ����с����ŝ����������˨�������˨��?)
(brian d foy ��˨����c�☗��茣���������障�����)
篋冴�������鴻�壔�ŝ����������ŝ�������若�帥����������勉����蚊����������壠�堺�ャ�障�������� 箴������壔�í�ゃ�≪�潟����眼�с����с����壔����������������⓾����������������≦�鴻�˨�������� 絎������������帥����������с����障����� 箴������違��LWP ��勉�������ŝ�≪�吾�ャ�若�˨��篏帥�c�� web ��泣�ゃ���� ���腮帥�������������������障�������� SQL ��ゃ�潟�吾�с�壔�激�с�潟�����罕���勛┏蕁���勖�紙�����茵������������ŝ����若�帥����蚊����������勉�ŝ�� (��������⓾����������������������������с��������)��������㏍�違�í�������ュ����������� ��í����ŝ����若�帥��篆∞�������ŝ����������˨�����綽�荀������������障�����
perlsec �����吾�˨�壔����若�帥�祉�㏍�ャ�ŝ����c�̹�≪�����筝���㋜����ɱ�ò�������������障����� DBI ��≪�吾�ャ�若�˨��篏帥�c�⓾�������ŝ����������若�帥�������������勉�˨����㋘�若�鴻����˨����� 篏帥�c�⓾�������������� system
��� exec
��у����������㏍�違�í�����絎�茵������⓾�������ŝ�������ŝ�鴻��綵√����� 篏帥�c�⓾�������������� �����勌����������������吾����������ŝ����祉�í�勖絵�����������鴻��紊������勌�����羈���������������� �����勉�祉�������í�壔��篏帥�������������⓾����ŝ�������若�帥�壚戎�����ŝ��������������������綵���⓾�壔�障����障����� 茯違��篆∞�������ŝ����с��������������
(��<�若�˨�勉����������若��茹f����������˨��?)
Email::MIME ��≪�吾�ャ�若�˨��篏帥�c�⓾�������������� ��������壔����������鴻����������⓾����⓾���憜��筝������ц�������������˨�ŝ�����������������羂� (��潟�<�潟����潟�粋昭��睡Ã��純�������潟�潟�若����c�潟�違����潟�<�潟����ŝ��)���絲上�������⓾����障�����
use Email::MIME;
my $message = Email::MIME->new($rfc2822);
my $subject = $message->header('Subject');
my $from = $message->header('From');
��≪�˩����������勌����勛┏蕁���勉�<�若�˨�ŝ����吾�с�壔�������������ŝ�������������� Email::Abstract ���羝<����⓾�������������� Email::MIME ��ŝ����吾�с�壔����� 緇������������� cast ��<�純��������篏帥����������������勉����⓾�����������:
my $mail_message_object = read_message();
my $abstract = Email::Abstract->new($mail_message_object);
my $email_mime_object = $abstract->cast('Email::MIME');
(��<�若�˨�≪����㋘�鴻��罩c�������������с����壔�������˨��?)
(筝������� Aaron Sherman ��˨����c�☗��茣���������障�����)
��������虁�������勉�祉�ï��膣���ʃ蟹�����с�壔�������障�������� ��������壚����ゃ�勰�������������ŝ����障��:
a) ��<�若�˨�≪����㋘�鴻��罩c�����綵√��������罎�荐若�������˨��?
b) ��<�若�˨�≪����㋘�鴻��罩e����ɱ��篆∴�����絲乗院��������⓾�����������罎�荐若�������˨��?
�����勉�≪����㋘�鴻�˨�<�若�˨�������c�⓾��������絮������������í��������腆肴�������ŝ������� 絎������˨����若�� b ��̥�������������障�����������Email::Valid
��� RFC::RFC822::Address
��勉�≪�吾�ャ�若�˨�壔����ŝ�≪�˨�帥�ゃ����с�с������������� ���������絲障����⓾����若�� a ��������若�� b ��勌検��鴻��茵������障�����
腱������<����с�������������勉�≪�������ゃ�鴻�壔�����篋冴�勉�<�若�˨�≪����㋘�鴻�������с����壔�������勉� �����鴻�壔�若�����紊���眼����������������������������˨�⓾�若�吟�若�˨�≪����㋘�鴻�� 篋������ュ�������������������������勉�с����� ��������˨����c�☁��絽吾�壩����♂�������������蚊�������������с����障����� 篋������勐�ュ����������������������ŝ��������篋榊����ɱ��絎鴻�勉�<����祉�若�吾����<�若�˨������� �����勉�≪����㋘�鴻�檎�������障����� ��������<����祉�若�吾��菴���c�⓾����⓾����������������ŝ����勖��腓冴��緇���c�⓾�������ŝ����� ���������絎������勉����勉�с����������������˩皿絎���с����障�����
��������初����勉�������˨�������ャ�勉�������鴻�˨�������с����壔��絲乗院������絲障����� PIN (Personal ID Number) ���筝���������������������勉����������障����� 緇���勐�☎����勉�������˨�≪����㋘�鴻�� PIN (��í�潟�������с�������������������障�����)��� 荐���蚊����⓾�������勉�с����� �����ŝ�������<�若�˨����������������˨��PIN �����˨�障����������ŝ����勉�泣�ゃ����吾�勉�ŝ�潟�壔�� ��˨����⓾�������������� ��<�若�˨�������⓾�潟�鴻�������ŝ�����筝�罩c�с�������������������������障����� ��ŝ�潟�壔����壔�ŝ����壔�������ŝ�������違����≪����㋘�鴻����初�����������������(��<����祉�若�吾�� 絮����������������) ���緇���障�ц�����������������荀���с�壔�ŝ����c����勉�с�������˨�ゃ���� 羂���˨�����綽�荀���壔�ŝ����◑�������������с�����
(MIME/BASE64 ���絖������勉����潟�若�����茵������˨��?)
MIME::Base64 ��������宴�若�吾�壔����勐�馹������� MIME/QP �����潟�潟�若����c�潟�違����������宴����障����� BASE64 ��勉����潟�若����壚札筝���勉�����������膣���с��:
use MIME::Base64;
my $decoded = decode_base64($encoded);
Email::MIME ��≪�吾�ャ�若�˨�� BASE64 ��с����潟�潟�若�������������<�若�˨�勉�<����祉�若�檎�������� �����������˨����潟�若����с�������勉�с�������肴����壔�������˨�ゃ����〠����˨�����綽�荀���壔�������障��������
(��������⓾�若�吟�若�勉�<�若�˨�≪����㋘�鴻����ャ����˨��?)
�����勌査��̬�������⓾�������������� 紊������勉�<�若�˨����㏍����ゃ�������ñ���櫝�純�ŝ�勉�с����㏍�若�˨�˨�激�鴻����������⓾�若�吟�若� ��<�若�˨�≪����㋘�鴻��羆阪����������号����壔�障����������障��������
箴�紊���壔��腟�膵������堺����勉�<�若�� (箴������� foo@yourcompany.com) ��с�������ŝ�激�若�� �����㏍�違�í����˨�潟�若�������с�������翫����с����� �����勐�翫�����篁ヤ����勉������� $ENV{USER},
my $user_name = getpwuid($<)
�����������������ŝ�激�若����������ŝ�c�⓾����ŝ��������������������罩c����������í�������̹�≪���� 篁勐����������������壔����壔����с����障�������� ��㋚����������壔�ŝ�勉�壔�⓾�若�吟�若�̬�������������с�����
(��<�若�˨����������˨��?)
篁ヤ����勉�������˨��Email::MIME ��� Email::Sender::Simple ��≪�吾�ャ�若�˨�� 篏帥�c�⓾�����������:
# first, create your message
my $message = Email::MIME->create(
header_str => [
From => 'you@example.com',
To => 'friend@example.com',
Subject => 'Happy birthday!',
],
attributes => {
encoding => 'quoted-printable',
charset => 'ISO-8859-1',
},
body_str => "Happy birthday to you!\n",
);
use Email::Sender::Simple qw(sendmail);
sendmail($message);
��������í�˨����с�壔��Email::Sender::Simple ��壔��$PATH ��˨�������� `sendmail` ��� ��������̬©�����障����� ��������壚����㋜����̹����������с����� ��<�若�˨����������勉�˩戎�����ŝ�≪�若����勉�<�若�˨�泣�若�������������翫����� Transport ��壔�í�鴻�勌����ゃ��茯炊�祉�������������������勉����⓾�������������� �����������吾����⓾����������鴻�с�壔����ñ���櫝�純�ʃ拶���絮ゃ�壚札筝���勉�������ŝ����勉�с��:
- Email::Sender::Transport::Sendmail
-
��������壔�������í�˨����с����� ��潟�若�����絎�茵������⓾����������激�潟�������<�若�˨����������勉�� mail(1) ��� mailx(1) ��� 篏帥�������ŝ��������������篏帥�������壔����с�����
- Email::Sender::Transport::SMTP
-
�����勤拶���絮ゃ�� TCP ���篏帥�c�⓾�ŝ�≪�若�� SMTP ��泣�若������・膓������障����� ��ŝ����激�с�潟�������� SSL ���篏帥�c�⓾��SASL 腟���宴�с�泣�若����̬��荐若�с����障�����
- Email::Sender::Transport::SMTP::TLS
-
��������� SMTP 荵∫�����篌若�⓾����障��������TLS ��祉�㏍�ャ�ŝ����c��篏帥����障����� �����勉�≪�吾�ャ�若�˨�����STARTTLS ��勐����泣�若�����絲上�������⓾�����篁紙����勖��罕����篏帥�c� 茯�荐若�с����障�����
篏睡��������荵∫��絮ゃ�� Email::Sender::Simple ��������������勉�夌亜�����с��:
sendmail(
$message,
{
transport => $email_sender_transport_object,
}
);
(��<�若�˨�<����祉�若�吾��羞私����������������˨�í�������c�� MIME ���篏帥����違�������с�����?)
Email::MIME ��夌�贋・�����˨�������若����<����祉�若�吾��絲上�������⓾����障����� Email::MIME ��ʃ昆��壔����若����с�������勌����� Email::MIME ��ŝ����吾�с�壔���� 羞私����с����障����� 絲上�������⓾����������⓾�勉�<�純�������������勌戎�����鴻�勌�������˨�������������ŝ�������宴�˨�ゃ����⓾� Email::MIME �����吾�������с����⓾��������������
(��<�若�˨��茯㏍�水�冴����˨��?)
篁ヤ����勉�������˨��Email::Folder ��≪�吾�ャ�若�˨��篏帥�c�⓾�����������:
use Email::Folder;
my $folder = Email::Folder->new('/path/to/email/folder');
while(my $message = $folder->next_message) {
# next_message returns Email::Simple objects, but we want
# Email::MIME objects as they're more robust
my $mime = Email::MIME->new($message->as_string);
}
罕������ŝ�<�若�˨�������壔�鴻�勛┏蕁����絲上����������������勛�違�ŝ�c����壔�í�鴻�� Email::Folder ������腥咲����˨�������障����� �����������勉�≪�吾�ャ�若�˨�壚����㋜����� 茯㏍�粋昭��� ��˨�勉�水嚳綽������⓾����〠�吾��莨若�帥�˨� 絲上�������⓾����ŝ�����������羈���������⓾��������������
(腱���勉����鴻�����/�����<�ゃ�喝��/IP ��≪����㋘�鴻��荀���ゃ�������˨��?)
(brian d foy ��˨����c�☗��茣���������障�����)
Perl 5.7.3 ������罔�羣���í�ゃ����í�ŝ�勌�������с����� Net::Domain ��≪�吾�ャ�若�˨��篏帥�������� 絎����篆勰﹅�����<�ゃ�喝�� (FQDN)��������鴻�������������<�ゃ�喝�����緇���������障�����
use Net::Domain qw(hostname hostfqdn hostdomain);
my $host = hostfqdn();
罔�羣���í�ゃ����í�ŝ�勌�������с����� Sys::Hostname ��≪�吾�ャ�若�˨�с�������鴻�������� 緇���������障�����
use Sys::Hostname;
$host = hostname();
Sys::Hostname::Long ��≪�吾�ャ�若�˨�夌�違�ŝ�����羈�������������絎����篆勰﹅�����鴻�������� 菴������������˨��������紊������勉��������荅⓾�帥�障��:
use Sys::Hostname::Long 'hostname_long';
my $hostname = hostname_long();
IP ��≪����㋘�鴻��緇������˨�壔����������������医�ゃ��紊������������������� gethostbyname
腟���粋昭��翠�∽�違��篏帥����障����� ��医�ゃ�������祉�������í�勌査�����喝�������⓾����������ŝ�ŝ��篁������勐就 (a.b.c.d) ���紊������������˨�壔�� 罔�羣����絽���������⓾����� Socket ��≪�吾�ャ�若�˨�� inet_ntoa
��∽�違��篏帥����障�����
use Socket;
my $address = inet_ntoa(
scalar gethostbyname( $host || 'localhost' )
);
((S)FTP �����<�ゃ�˨�������⓾�潟�㏍�若��/��≪�������㏍�若����������˨��?)
Net::FTP ��� Net::SFTP ��� FTP ��������� SFTP (Secure FTP) ��泣�若���� ��娯��篏������с�������������˨�ŝ����障�����
(Perl ��� RPC ���茵������˨��?)
RFC ��≪�吾�ャ�若�� ( https://metacpan.org/search?q=RPC ) ��勌����ゃ��篏帥����障�����������
Copyright (c) 1997-2010 Tom Christiansen, Nathan Torkington, and other authors as noted. All rights reserved.
This documentation is free; you can redistribute it and/or modify it under the same terms as Perl itself.
Irrespective of its distribution, all code examples in this file are hereby placed into the public domain. You are permitted and encouraged to use this code in your own programs for fun or for profit as you see fit. A simple comment in the code giving credit would be courteous but is not required.