Add built local::lib
[catagits/Gitalist.git] / local-lib5 / man / man3 / Test::WWW::Mechanize::Catalyst.3pm
1 .\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.10)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sp \" Vertical space (when we can't use .PP)
6 .if t .sp .5v
7 .if n .sp
8 ..
9 .de Vb \" Begin verbatim text
10 .ft CW
11 .nf
12 .ne \\$1
13 ..
14 .de Ve \" End verbatim text
15 .ft R
16 .fi
17 ..
18 .\" Set up some character translations and predefined strings.  \*(-- will
19 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
21 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
22 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
23 .\" nothing in troff, for use with C<>.
24 .tr \(*W-
25 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26 .ie n \{\
27 .    ds -- \(*W-
28 .    ds PI pi
29 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
31 .    ds L" ""
32 .    ds R" ""
33 .    ds C` ""
34 .    ds C' ""
35 'br\}
36 .el\{\
37 .    ds -- \|\(em\|
38 .    ds PI \(*p
39 .    ds L" ``
40 .    ds R" ''
41 'br\}
42 .\"
43 .\" Escape single quotes in literal strings from groff's Unicode transform.
44 .ie \n(.g .ds Aq \(aq
45 .el       .ds Aq '
46 .\"
47 .\" If the F register is turned on, we'll generate index entries on stderr for
48 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
49 .\" entries marked with X<> in POD.  Of course, you'll have to process the
50 .\" output yourself in some meaningful fashion.
51 .ie \nF \{\
52 .    de IX
53 .    tm Index:\\$1\t\\n%\t"\\$2"
54 ..
55 .    nr % 0
56 .    rr F
57 .\}
58 .el \{\
59 .    de IX
60 ..
61 .\}
62 .\"
63 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
64 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
65 .    \" fudge factors for nroff and troff
66 .if n \{\
67 .    ds #H 0
68 .    ds #V .8m
69 .    ds #F .3m
70 .    ds #[ \f1
71 .    ds #] \fP
72 .\}
73 .if t \{\
74 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
75 .    ds #V .6m
76 .    ds #F 0
77 .    ds #[ \&
78 .    ds #] \&
79 .\}
80 .    \" simple accents for nroff and troff
81 .if n \{\
82 .    ds ' \&
83 .    ds ` \&
84 .    ds ^ \&
85 .    ds , \&
86 .    ds ~ ~
87 .    ds /
88 .\}
89 .if t \{\
90 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
91 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
92 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
93 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
94 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
95 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
96 .\}
97 .    \" troff and (daisy-wheel) nroff accents
98 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
99 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
100 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
101 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
102 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
103 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
104 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
105 .ds ae a\h'-(\w'a'u*4/10)'e
106 .ds Ae A\h'-(\w'A'u*4/10)'E
107 .    \" corrections for vroff
108 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
109 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
110 .    \" for low resolution devices (crt and lpr)
111 .if \n(.H>23 .if \n(.V>19 \
112 \{\
113 .    ds : e
114 .    ds 8 ss
115 .    ds o a
116 .    ds d- d\h'-1'\(ga
117 .    ds D- D\h'-1'\(hy
118 .    ds th \o'bp'
119 .    ds Th \o'LP'
120 .    ds ae ae
121 .    ds Ae AE
122 .\}
123 .rm #[ #] #H #V #F C
124 .\" ========================================================================
125 .\"
126 .IX Title "Test::WWW::Mechanize::Catalyst 3"
127 .TH Test::WWW::Mechanize::Catalyst 3 "2009-03-16" "perl v5.8.7" "User Contributed Perl Documentation"
128 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
129 .\" way too many mistakes in technical documents.
130 .if n .ad l
131 .nh
132 .SH "NAME"
133 Test::WWW::Mechanize::Catalyst \- Test::WWW::Mechanize for Catalyst
134 .SH "SYNOPSIS"
135 .IX Header "SYNOPSIS"
136 .Vb 2
137 \&  # We\*(Aqre in a t/*.t test script...
138 \&  use Test::WWW::Mechanize::Catalyst;
139 \&
140 \&  # To test a Catalyst application named \*(AqCatty\*(Aq:
141 \&  my $mech = Test::WWW::Mechanize::Catalyst\->new(catalyst_app => \*(AqCatty\*(Aq);
142 \&
143 \&  $mech\->get_ok("/"); # no hostname needed
144 \&  is($mech\->ct, "text/html");
145 \&  $mech\->title_is("Root", "On the root page");
146 \&  $mech\->content_contains("This is the root page", "Correct content");
147 \&  $mech\->follow_link_ok({text => \*(AqHello\*(Aq}, "Click on Hello");
148 \&  # ... and all other Test::WWW::Mechanize methods
149 \&  
150 \&  # White label site testing
151 \&  $mech\->host("foo.com");
152 \&  $mech\->get_ok("/");
153 .Ve
154 .SH "DESCRIPTION"
155 .IX Header "DESCRIPTION"
156 Catalyst is an elegant \s-1MVC\s0 Web Application Framework.
157 Test::WWW::Mechanize is a subclass of WWW::Mechanize that incorporates
158 features for web application testing. The Test::WWW::Mechanize::Catalyst
159 module meshes the two to allow easy testing of Catalyst applications without
160 needing to starting up a web server.
161 .PP
162 Testing web applications has always been a bit tricky, normally
163 requiring starting a web server for your application and making real \s-1HTTP\s0
164 requests to it. This module allows you to test Catalyst web
165 applications but does not require a server or issue \s-1HTTP\s0
166 requests. Instead, it passes the \s-1HTTP\s0 request object directly to
167 Catalyst. Thus you do not need to use a real hostname:
168 \&\*(L"http://localhost/\*(R" will do. However, this is optional. The following
169 two lines of code do exactly the same thing:
170 .PP
171 .Vb 2
172 \&  $mech\->get_ok(\*(Aq/action\*(Aq);
173 \&  $mech\->get_ok(\*(Aqhttp://localhost/action\*(Aq);
174 .Ve
175 .PP
176 Links which do not begin with / or are not for localhost can be handled
177 as normal Web requests \- this is handy if you have an external 
178 single sign-on system. You must set allow_external to true for this:
179 .PP
180 .Vb 1
181 \&  $mech\->allow_external(1);
182 .Ve
183 .PP
184 You can also test a remote server by setting the environment variable
185 \&\s-1CATALYST_SERVER\s0; for example:
186 .PP
187 .Vb 1
188 \&  $ CATALYST_SERVER=http://example.com/myapp prove \-l t
189 .Ve
190 .PP
191 will run the same tests on the application running at
192 http://example.com/myapp regardless of whether or not you specify
193 http:://localhost for Test::WWW::Mechanize::Catalyst.
194 .PP
195 Furthermore, if you set \s-1CATALYST_SERVER\s0, the server will be regarded 
196 as a remote server even if your links point to localhost. Thus, you
197 can use Test::WWW::Mechanize::Catalyst to test your live webserver
198 running on your local machine, if you need to test aspects of your
199 deployment environment (for example, configuration options in an
200 http.conf file) instead of just the Catalyst request handling.
201 .PP
202 This makes testing fast and easy. Test::WWW::Mechanize provides
203 functions for common web testing scenarios. For example:
204 .PP
205 .Vb 4
206 \&  $mech\->get_ok( $page );
207 \&  $mech\->title_is( "Invoice Status", "Make sure we\*(Aqre on the invoice page" );
208 \&  $mech\->content_contains( "Andy Lester", "My name somewhere" );
209 \&  $mech\->content_like( qr/(cpan|perl)\e.org/, "Link to perl.org or CPAN" );
210 .Ve
211 .PP
212 This module supports cookies automatically.
213 .PP
214 To use this module you must pass it the name of the application. See
215 the \s-1SYNOPSIS\s0 above.
216 .PP
217 Note that Catalyst has a special developing feature: the debug
218 screen. By default this module will treat responses which are the
219 debug screen as failures. If you actually want to test debug screens,
220 please use:
221 .PP
222 .Vb 1
223 \&  $mmech\->{catalyst_debug} = 1;
224 .Ve
225 .PP
226 An alternative to this module is Catalyst::Test.
227 .SH "CONSTRUCTOR"
228 .IX Header "CONSTRUCTOR"
229 .SS "new"
230 .IX Subsection "new"
231 Behaves like, and calls, WWW::Mechanize's \f(CW\*(C`new\*(C'\fR method.  Any params
232 passed in get passed to WWW::Mechanize's constructor. Note that we
233 need to pass the name of the Catalyst application to the \*(L"use\*(R":
234 .PP
235 .Vb 2
236 \&  use Test::WWW::Mechanize::Catalyst \*(AqCatty\*(Aq;
237 \&  my $mech = Test::WWW::Mechanize::Catalyst\->new;
238 .Ve
239 .SH "METHODS"
240 .IX Header "METHODS"
241 .SS "allow_external"
242 .IX Subsection "allow_external"
243 Links which do not begin with / or are not for localhost can be handled
244 as normal Web requests \- this is handy if you have an external 
245 single sign-on system. You must set allow_external to true for this:
246 .PP
247 .Vb 1
248 \&  $m\->allow_external(1);
249 .Ve
250 .PP
251 head2 catalyst_app
252 .PP
253 The name of the Catalyst app which we are testing against. Read-only.
254 .SS "host"
255 .IX Subsection "host"
256 The host value to set the \*(L"Host:\*(R" \s-1HTTP\s0 header to, if none is present already in
257 the request. If not set (default) then Catalyst::Test will set this to
258 localhost:80
259 .SS "clear_host"
260 .IX Subsection "clear_host"
261 Unset the host attribute.
262 .SS "has_host"
263 .IX Subsection "has_host"
264 Do we have a value set for the host attribute
265 .ie n .SS "$mech\->get_ok($url, [ \e%LWP_options ,] $desc)"
266 .el .SS "\f(CW$mech\fP\->get_ok($url, [ \e%LWP_options ,] \f(CW$desc\fP)"
267 .IX Subsection "$mech->get_ok($url, [ %LWP_options ,] $desc)"
268 A wrapper around WWW::Mechanize's \fIget()\fR, with similar options, except the
269 second argument needs to be a hash reference, not a hash. Returns true or 
270 false.
271 .ie n .SS "$mech\->title_is( $str [, $desc ] )"
272 .el .SS "\f(CW$mech\fP\->title_is( \f(CW$str\fP [, \f(CW$desc\fP ] )"
273 .IX Subsection "$mech->title_is( $str [, $desc ] )"
274 Tells if the title of the page is the given string.
275 .PP
276 .Vb 1
277 \&    $mech\->title_is( "Invoice Summary" );
278 .Ve
279 .ie n .SS "$mech\->title_like( $regex [, $desc ] )"
280 .el .SS "\f(CW$mech\fP\->title_like( \f(CW$regex\fP [, \f(CW$desc\fP ] )"
281 .IX Subsection "$mech->title_like( $regex [, $desc ] )"
282 Tells if the title of the page matches the given regex.
283 .PP
284 .Vb 1
285 \&    $mech\->title_like( qr/Invoices for (.+)/
286 .Ve
287 .ie n .SS "$mech\->title_unlike( $regex [, $desc ] )"
288 .el .SS "\f(CW$mech\fP\->title_unlike( \f(CW$regex\fP [, \f(CW$desc\fP ] )"
289 .IX Subsection "$mech->title_unlike( $regex [, $desc ] )"
290 Tells if the title of the page does \s-1NOT\s0 match the given regex.
291 .PP
292 .Vb 1
293 \&    $mech\->title_unlike( qr/Invoices for (.+)/
294 .Ve
295 .ie n .SS "$mech\->content_is( $str [, $desc ] )"
296 .el .SS "\f(CW$mech\fP\->content_is( \f(CW$str\fP [, \f(CW$desc\fP ] )"
297 .IX Subsection "$mech->content_is( $str [, $desc ] )"
298 Tells if the content of the page matches the given string
299 .ie n .SS "$mech\->content_contains( $str [, $desc ] )"
300 .el .SS "\f(CW$mech\fP\->content_contains( \f(CW$str\fP [, \f(CW$desc\fP ] )"
301 .IX Subsection "$mech->content_contains( $str [, $desc ] )"
302 Tells if the content of the page contains \fI\f(CI$str\fI\fR.
303 .ie n .SS "$mech\->content_lacks( $str [, $desc ] )"
304 .el .SS "\f(CW$mech\fP\->content_lacks( \f(CW$str\fP [, \f(CW$desc\fP ] )"
305 .IX Subsection "$mech->content_lacks( $str [, $desc ] )"
306 Tells if the content of the page lacks \fI\f(CI$str\fI\fR.
307 .ie n .SS "$mech\->content_like( $regex [, $desc ] )"
308 .el .SS "\f(CW$mech\fP\->content_like( \f(CW$regex\fP [, \f(CW$desc\fP ] )"
309 .IX Subsection "$mech->content_like( $regex [, $desc ] )"
310 Tells if the content of the page matches \fI\f(CI$regex\fI\fR.
311 .ie n .SS "$mech\->content_unlike( $regex [, $desc ] )"
312 .el .SS "\f(CW$mech\fP\->content_unlike( \f(CW$regex\fP [, \f(CW$desc\fP ] )"
313 .IX Subsection "$mech->content_unlike( $regex [, $desc ] )"
314 Tells if the content of the page does \s-1NOT\s0 match \fI\f(CI$regex\fI\fR.
315 .ie n .SS "$mech\->page_links_ok( [ $desc ] )"
316 .el .SS "\f(CW$mech\fP\->page_links_ok( [ \f(CW$desc\fP ] )"
317 .IX Subsection "$mech->page_links_ok( [ $desc ] )"
318 Follow all links on the current page and test for \s-1HTTP\s0 status 200
319 .PP
320 .Vb 1
321 \&    $mech\->page_links_ok(\*(AqCheck all links\*(Aq);
322 .Ve
323 .ie n .SS "$mech\->page_links_content_like( $regex,[ $desc ] )"
324 .el .SS "\f(CW$mech\fP\->page_links_content_like( \f(CW$regex\fP,[ \f(CW$desc\fP ] )"
325 .IX Subsection "$mech->page_links_content_like( $regex,[ $desc ] )"
326 Follow all links on the current page and test their contents for \fI\f(CI$regex\fI\fR.
327 .PP
328 .Vb 2
329 \&    $mech\->page_links_content_like( qr/foo/,
330 \&      \*(AqCheck all links contain "foo"\*(Aq );
331 .Ve
332 .ie n .SS "$mech\->page_links_content_unlike( $regex,[ $desc ] )"
333 .el .SS "\f(CW$mech\fP\->page_links_content_unlike( \f(CW$regex\fP,[ \f(CW$desc\fP ] )"
334 .IX Subsection "$mech->page_links_content_unlike( $regex,[ $desc ] )"
335 Follow all links on the current page and test their contents do not
336 contain the specified regex.
337 .PP
338 .Vb 2
339 \&    $mech\->page_links_content_unlike(qr/Restricted/,
340 \&      \*(AqCheck all links do not contain Restricted\*(Aq);
341 .Ve
342 .ie n .SS "$mech\->links_ok( $links [, $desc ] )"
343 .el .SS "\f(CW$mech\fP\->links_ok( \f(CW$links\fP [, \f(CW$desc\fP ] )"
344 .IX Subsection "$mech->links_ok( $links [, $desc ] )"
345 Check the current page for specified links and test for \s-1HTTP\s0 status
346 200.  The links may be specified as a reference to an array containing
347 WWW::Mechanize::Link objects, an array of URLs, or a scalar \s-1URL\s0
348 name.
349 .PP
350 .Vb 2
351 \&    my @links = $mech\->find_all_links( url_regex => qr/cnn\e.com$/ );
352 \&    $mech\->links_ok( \e@links, \*(AqCheck all links for cnn.com\*(Aq );
353 \&
354 \&    my @links = qw( index.html search.html about.html );
355 \&    $mech\->links_ok( \e@links, \*(AqCheck main links\*(Aq );
356 \&
357 \&    $mech\->links_ok( \*(Aqindex.html\*(Aq, \*(AqCheck link to index\*(Aq );
358 .Ve
359 .ie n .SS "$mech\->link_status_is( $links, $status [, $desc ] )"
360 .el .SS "\f(CW$mech\fP\->link_status_is( \f(CW$links\fP, \f(CW$status\fP [, \f(CW$desc\fP ] )"
361 .IX Subsection "$mech->link_status_is( $links, $status [, $desc ] )"
362 Check the current page for specified links and test for \s-1HTTP\s0 status
363 passed.  The links may be specified as a reference to an array
364 containing WWW::Mechanize::Link objects, an array of URLs, or a
365 scalar \s-1URL\s0 name.
366 .PP
367 .Vb 3
368 \&    my @links = $mech\->links();
369 \&    $mech\->link_status_is( \e@links, 403,
370 \&      \*(AqCheck all links are restricted\*(Aq );
371 .Ve
372 .ie n .SS "$mech\->link_status_isnt( $links, $status [, $desc ] )"
373 .el .SS "\f(CW$mech\fP\->link_status_isnt( \f(CW$links\fP, \f(CW$status\fP [, \f(CW$desc\fP ] )"
374 .IX Subsection "$mech->link_status_isnt( $links, $status [, $desc ] )"
375 Check the current page for specified links and test for \s-1HTTP\s0 status
376 passed.  The links may be specified as a reference to an array
377 containing WWW::Mechanize::Link objects, an array of URLs, or a
378 scalar \s-1URL\s0 name.
379 .PP
380 .Vb 3
381 \&    my @links = $mech\->links();
382 \&    $mech\->link_status_isnt( \e@links, 404,
383 \&      \*(AqCheck all links are not 404\*(Aq );
384 .Ve
385 .ie n .SS "$mech\->link_content_like( $links, $regex [, $desc ] )"
386 .el .SS "\f(CW$mech\fP\->link_content_like( \f(CW$links\fP, \f(CW$regex\fP [, \f(CW$desc\fP ] )"
387 .IX Subsection "$mech->link_content_like( $links, $regex [, $desc ] )"
388 Check the current page for specified links and test the content of
389 each against \fI\f(CI$regex\fI\fR.  The links may be specified as a reference to
390 an array containing WWW::Mechanize::Link objects, an array of URLs,
391 or a scalar \s-1URL\s0 name.
392 .PP
393 .Vb 3
394 \&    my @links = $mech\->links();
395 \&    $mech\->link_content_like( \e@links, qr/Restricted/,
396 \&        \*(AqCheck all links are restricted\*(Aq );
397 .Ve
398 .ie n .SS "$mech\->link_content_unlike( $links, $regex [, $desc ] )"
399 .el .SS "\f(CW$mech\fP\->link_content_unlike( \f(CW$links\fP, \f(CW$regex\fP [, \f(CW$desc\fP ] )"
400 .IX Subsection "$mech->link_content_unlike( $links, $regex [, $desc ] )"
401 Check the current page for specified links and test the content of each
402 does not match \fI\f(CI$regex\fI\fR.  The links may be specified as a reference to
403 an array containing WWW::Mechanize::Link objects, an array of URLs,
404 or a scalar \s-1URL\s0 name.
405 .PP
406 .Vb 3
407 \&    my @links = $mech\->links();
408 \&    $mech\->link_content_like( \e@links, qr/Restricted/,
409 \&      \*(AqCheck all links are restricted\*(Aq );
410 .Ve
411 .ie n .SS "follow_link_ok( \e%parms [, $comment] )"
412 .el .SS "follow_link_ok( \e%parms [, \f(CW$comment\fP] )"
413 .IX Subsection "follow_link_ok( %parms [, $comment] )"
414 Makes a \f(CW\*(C`follow_link()\*(C'\fR call and executes tests on the results.
415 The link must be found, and then followed successfully.  Otherwise,
416 this test fails.
417 .PP
418 \&\fI\f(CI%parms\fI\fR is a hashref containing the params to pass to \f(CW\*(C`follow_link()\*(C'\fR.
419 Note that the params to \f(CW\*(C`follow_link()\*(C'\fR are a hash whereas the parms to
420 this function are a hashref.  You have to call this function like:
421 .PP
422 .Vb 1
423 \&    $agent\->follow_like_ok( {n=>3}, "looking for 3rd link" );
424 .Ve
425 .PP
426 As with other test functions, \f(CW$comment\fR is optional.  If it is supplied
427 then it will display when running the test harness in verbose mode.
428 .PP
429 Returns true value if the specified link was found and followed
430 successfully.  The HTTP::Response object returned by \fIfollow_link()\fR
431 is not available.
432 .SH "CAVEATS"
433 .IX Header "CAVEATS"
434 .SS "External Redirects and allow_external"
435 .IX Subsection "External Redirects and allow_external"
436 If you use non-fully qualified urls in your test scripts (i.e. anything without
437 a host, such as \f(CW\*(C`\->get_ok( "/foo")\*(C'\fR ) and your app redirects to an
438 external \s-1URL\s0, expect to be bitten once you come back to your application's urls
439 (it will try to request them on the remote server.) This is due to a limitation
440 in WWW::Mechanize.
441 .PP
442 One workaround for this is that if you are expecting to redirect to an external
443 site, clone the \s-1TWMC\s0 obeject and use the cloned object for the external
444 redirect.
445 .SH "SEE ALSO"
446 .IX Header "SEE ALSO"
447 Related modules which may be of interest: Catalyst,
448 Test::WWW::Mechanize, WWW::Mechanize.
449 .SH "AUTHOR"
450 .IX Header "AUTHOR"
451 Ash Berlin \f(CW\*(C`<ash@cpan.org>\*(C'\fR (current maintiner)
452 .PP
453 Original Author: Leon Brocard, \f(CW\*(C`<acme@astray.com>\*(C'\fR
454 .SH "COPYRIGHT"
455 .IX Header "COPYRIGHT"
456 Copyright (C) 2005\-8, Leon Brocard
457 .SH "LICENSE"
458 .IX Header "LICENSE"
459 This module is free software; you can redistribute it or modify it
460 under the same terms as Perl itself.