Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

More perlcritic-driven clean-up.

This is mostly POD sections, but also includes heavy re-working of
etc/make_method and parts of lib/RPC/XML.pm.
  • Loading branch information...
commit 70e5e86e5d53c7aa2e3d6ecbdc450da599dc8dff 1 parent cd3cc33
Randy J. Ray authored June 20, 2011
308  etc/make_method
... ...
@@ -1,9 +1,10 @@
1 1
 #!/usr/bin/perl
2 2
 ###############################################################################
3 3
 #
4  
-# This file copyright (c) 2001-2010 Randy J. Ray, all rights reserved
  4
+# This file copyright (c) 2001-2011 Randy J. Ray, all rights reserved
5 5
 #
6  
-# See "LICENSE" in the documentation for licensing and redistribution terms.
  6
+# See "LICENSE AND COPYRIGHT" in the documentation for licensing and
  7
+# redistribution terms.
7 8
 #
8 9
 ###############################################################################
9 10
 #
@@ -28,19 +29,18 @@
28 29
 
29 30
 use 5.006001;
30 31
 use strict;
  32
+use warnings;
31 33
 use vars qw($USAGE $VERSION);
32  
-use subs qw(read_external write_file);
  34
+use subs qw(read_from_file read_from_opts read_external write_file);
33 35
 
34 36
 use Config;
35 37
 use Carp 'croak';
36 38
 use Getopt::Long;
37  
-use IO::File;
38 39
 use File::Spec;
39 40
 
40  
-my ($cmd, %opts, $ifh, $ofh, $path, $helptxt, $codetxt, @siglist,
41  
-    $name, $namespace, $type, $version, $hidden, $lang);
  41
+my ($cmd, %opts, $ofh, %attrs);
42 42
 
43  
-$VERSION = '1.14';
  43
+$VERSION = '1.15';
44 44
 ($cmd = $0) =~ s{.*/}{};
45 45
 $USAGE = "$cmd [ --options ]
46 46
 
@@ -82,159 +82,217 @@ GetOptions(\%opts,
82 82
 if ($opts{help})
83 83
 {
84 84
     print $USAGE;
85  
-    exit;
  85
+    exit 0;
86 86
 }
87 87
 
88  
-#
89 88
 # First we start by getting all our data. Once that's all in place, then the
90 89
 # generation of the file is simple.
91  
-#
92 90
 if ($opts{base})
93 91
 {
94  
-    # This simplifies a lot of it
  92
+    read_from_file($opts{base});
  93
+
  94
+    $ofh = "$opts{base}.xpl";
  95
+}
  96
+else
  97
+{
  98
+    read_from_opts();
  99
+
  100
+    if ($opts{output})
  101
+    {
  102
+        $ofh = $opts{output};
  103
+    }
  104
+    else
  105
+    {
  106
+        $ofh = \*STDOUT;
  107
+    }
  108
+}
  109
+
  110
+write_file(
  111
+    $ofh,
  112
+    {
  113
+        name      => $attrs{name},
  114
+        namespace => $attrs{namespace},
  115
+        type      => $attrs{type},
  116
+        version   => $attrs{version},
  117
+        hidden    => $attrs{hidden},
  118
+        code      => $attrs{codetxt},
  119
+        help      => $attrs{helptxt},
  120
+        sigs      => $attrs{siglist},
  121
+    }
  122
+);
  123
+
  124
+exit 0;
  125
+
  126
+###############################################################################
  127
+#
  128
+#   Sub Name:       read_from_file
  129
+#
  130
+#   Description:    Read method data from the given *.base file
  131
+#
  132
+#   Arguments:      NAME      IN/OUT  TYPE      DESCRIPTION
  133
+#                   $file     in      scalar    File to read, minus the ".base"
  134
+#
  135
+#   Globals:        %attrs
  136
+#
  137
+#   Returns:        Success:    void
  138
+#                   Failure:    croaks
  139
+#
  140
+###############################################################################
  141
+sub read_from_file
  142
+{
  143
+    my $file = shift;
95 144
 
96  
-    (undef, $path, $name) = File::Spec->splitpath($opts{base});
  145
+    my ($volume, $path) = File::Spec->splitpath($file);
97 146
     $path ||= q{.};
98  
-    $type = 'm'; # Default the type to 'm'ethod.
99  
-    $codetxt = {};
100 147
 
101  
-    if (! ($ifh = IO::File->new("< $opts{base}.base")))
  148
+    $attrs{type}      = 'm'; # Default the type to 'm'ethod.
  149
+    $attrs{codetxt}   = {};
  150
+    $attrs{siglist}   = [];
  151
+    $attrs{namespace} = q{};
  152
+    $attrs{hidden}    = 0;
  153
+    $attrs{version}   = q{};
  154
+
  155
+
  156
+    my @lines;
  157
+    if (open my $fh, '<', "$file.base")
  158
+    {
  159
+        @lines = <$fh>;
  160
+        close $fh or croak "Error closing $file.base: $!\nStopped";
  161
+    }
  162
+    else
102 163
     {
103  
-        croak "Error opening $opts{base}.base for reading: $!\nStopped";
  164
+        croak "Error opening $file.base for reading: $!\nStopped";
104 165
     }
105 166
 
106  
-    while (defined($_ = <$ifh>))
  167
+    for my $line (@lines)
107 168
     {
108  
-        chomp;
  169
+        chomp $line;
109 170
 
110  
-        if (/^name:\s+([\w\.]+)$/i)
  171
+        # Skip blanks and comments
  172
+        next if ($line =~ /^\s*(?:#.*)?$/);
  173
+
  174
+        # I'm using a horrendous if-else cascade to avoid moving the required
  175
+        # version of Perl to 5.012 just for the "when" construct.
  176
+        ## no critic (ProhibitCascadingIfElse)
  177
+        if ($line =~ /^name:\s+([\w.]+)$/i)
111 178
         {
112  
-            $name = $1;
  179
+            $attrs{name} = $1;
113 180
         }
114  
-        elsif (/^namespace:\s+([\w\.]+)$/i)
  181
+        elsif ($line =~ /^namespace:\s+([\w.]+)$/i)
115 182
         {
116  
-            $namespace = $1;
  183
+            $attrs{namespace} = $1;
117 184
         }
118  
-        elsif (/^type:\s+(\S+)$/i)
  185
+        elsif ($line =~ /^type:\s+(\S+)$/i)
119 186
         {
120  
-            $type = substr lc $1, 0, 1;
  187
+            $attrs{type} = substr lc $1, 0, 1;
121 188
         }
122  
-        elsif (/^version:\s+(\S+)$/i)
  189
+        elsif ($line =~ /^version:\s+(\S+)$/i)
123 190
         {
124  
-            $version = $1;
  191
+            $attrs{version} = $1;
125 192
         }
126  
-        elsif (/^signature:\s+\b(.*)$/i)
  193
+        elsif ($line =~ /^signature:\s+\b(.*)$/i)
127 194
         {
128  
-            push @siglist, $1;
  195
+            push @{$attrs{siglist}}, $1;
129 196
         }
130  
-        elsif (/^hidden:\s+(no|yes)/i)
  197
+        elsif ($line =~ /^hidden:\s+(no|yes)/i)
131 198
         {
132  
-            $hidden = ($1 eq 'yes') ? 1 : 0;
  199
+            $attrs{hidden} = (lc $1 eq 'yes') ? 1 : 0;
133 200
         }
134  
-        elsif (/^helpfile:\s+(.*)/i)
  201
+        elsif ($line =~ /^helpfile:\s+(.*)/i)
135 202
         {
136  
-            $helptxt = read_external(File::Spec->catfile($path, $1));
  203
+            $attrs{helptxt} =
  204
+                read_external(File::Spec->catpath($volume, $path, $1));
137 205
         }
138  
-        elsif (/^codefile(\[(.*)\])?:\s+(.*)/i)
  206
+        elsif ($line =~ /^codefile(?:\[(.*)\])?:\s+(.*)/i)
139 207
         {
140  
-            $lang = $2 || 'perl';
141  
-            $codetxt->{$lang} = read_external(File::Spec->catfile($path, $3));
  208
+            $attrs{codetxt}->{$1 || 'perl'} =
  209
+                read_external(File::Spec->catpath($volume, $path, $2));
142 210
         }
143 211
     }
144  
-    if (! keys %{$codetxt})
  212
+    if (! keys %{$attrs{codetxt}})
145 213
     {
146 214
         croak "Error: no code specified in $opts{base}.base, stopped";
147 215
     }
148  
-    if (! @siglist)
  216
+    if (! @{$attrs{siglist}})
149 217
     {
150 218
         croak "Error: no signatures found in $opts{base}.base, stopped";
151 219
     }
152 220
 
153  
-    if (! ($ofh = IO::File->new("> $opts{base}.xpl")))
154  
-    {
155  
-        croak "Error opening $opts{base}.xpl for writing: $!\nStopped";
156  
-    }
  221
+    return;
157 222
 }
158  
-else
  223
+
  224
+###############################################################################
  225
+#
  226
+#   Sub Name:       read_from_opts
  227
+#
  228
+#   Description:    Read method data from the command-line options
  229
+#
  230
+#   Arguments:      None.
  231
+#
  232
+#   Globals:        %opts
  233
+#                   %attrs
  234
+#
  235
+#   Returns:        Success:    void
  236
+#                   Failure:    croaks
  237
+#
  238
+###############################################################################
  239
+sub read_from_opts
159 240
 {
  241
+    $attrs{siglist} = [];
  242
+
160 243
     if ($opts{name})
161 244
     {
162  
-        $name = $opts{name};
  245
+        $attrs{name} = $opts{name};
163 246
     }
164 247
     else
165 248
     {
166 249
         croak 'No name was specified for the published routine, stopped';
167 250
     }
168 251
 
169  
-    $namespace = $opts{namespace} || q{};
170  
-    $type      = $opts{type}      || 'm';
171  
-    $hidden    = $opts{hidden}    || 0;
172  
-    $version   = $opts{version}   || q{};
  252
+    $attrs{namespace} = $opts{namespace} || q{};
  253
+    $attrs{type}      = $opts{type}      || 'm';
  254
+    $attrs{hidden}    = $opts{hidden}    || 0;
  255
+    $attrs{version}   = $opts{version}   || q{};
173 256
 
174 257
     if ($opts{signature})
175 258
     {
176 259
         for my $val (@{$opts{signature}})
177 260
         {
178 261
             $val =~ s/:/ /g;
179  
-            push @siglist, $val;
  262
+            push @{$attrs{siglist}}, $val;
180 263
         }
181 264
     }
182 265
     else
183 266
     {
184  
-        croak "At least one signature must be specified for $name, stopped";
  267
+        croak "At least one signature must be specified for $attrs{name}, " .
  268
+            'stopped';
185 269
     }
186 270
 
187 271
     if ($opts{helptext})
188 272
     {
189  
-        ${$helptxt} = "$opts{helptext}\n";
  273
+        $attrs{helptxt} = \"$opts{helptext}\n";
190 274
     }
191 275
     elsif ($opts{helpfile})
192 276
     {
193  
-        $helptxt = read_external($opts{helpfile});
  277
+        $attrs{helptxt} = read_external($opts{helpfile});
194 278
     }
195 279
     else
196 280
     {
197  
-        ${$helptxt} = q{};
  281
+        $attrs{helptxt} = \q{};
198 282
     }
199 283
 
200 284
     if ($opts{code})
201 285
     {
202  
-        $codetxt->{perl} = read_external($opts{code});
  286
+        $attrs{codetxt}->{perl} = read_external($opts{code});
203 287
     }
204 288
     else
205 289
     {
206  
-        $codetxt->{perl} = do { local $/ = undef; <> };
  290
+        $attrs{codetxt}->{perl} = do { local $/ = undef; <> };
207 291
     }
208 292
 
209  
-    if ($opts{output})
210  
-    {
211  
-        if (! ($ofh = IO::File->new("> $opts{output}")))
212  
-        {
213  
-            croak "Unable to open $opts{output} for writing: $!\nStopped";
214  
-        }
215  
-    }
216  
-    else
217  
-    {
218  
-        $ofh = \*STDOUT;
219  
-    }
  293
+    return;
220 294
 }
221 295
 
222  
-write_file(
223  
-    $ofh,
224  
-    {
225  
-        name      => $name,
226  
-        namespace => $namespace,
227  
-        type      => $type,
228  
-        version   => $version,
229  
-        hidden    => $hidden,
230  
-        code      => $codetxt,
231  
-        help      => $helptxt,
232  
-        sigs      => \@siglist,
233  
-    }
234  
-);
235  
-
236  
-exit;
237  
-
238 296
 ###############################################################################
239 297
 #
240 298
 #   Sub Name:       read_external
@@ -252,15 +310,19 @@ exit;
252 310
 sub read_external
253 311
 {
254 312
     my $file = shift;
  313
+    my ($fh, $tmp);
255 314
 
256  
-    my $fh = IO::File->new("< $file");
257  
-    if (! $fh)
  315
+    if (! open $fh, '<', $file)
258 316
     {
259 317
         croak "Cannot open file $file for reading: $!, stopped";
260 318
     }
  319
+    else
  320
+    {
  321
+        $tmp = do { local $/ = undef; <$fh> };
  322
+        close $fh or
  323
+            croak "Error closing $file: $!, stopped";
  324
+    }
261 325
 
262  
-    my $tmp;
263  
-    $tmp = do { local $/ = undef; <$fh> };
264 326
     return \$tmp;
265 327
 }
266 328
 
@@ -286,6 +348,21 @@ sub write_file
286 348
 {
287 349
     my ($fh, $args) = @_;
288 350
 
  351
+    # Might need to open a FH here, and keep it open for a while.
  352
+    ## no critic (RequireBriefOpen)
  353
+
  354
+    if (! ref $fh)
  355
+    {
  356
+        if (! open my $newfh, '>', $fh)
  357
+        {
  358
+            croak "Error opening $fh for writing: $!, stopped";
  359
+        }
  360
+        else
  361
+        {
  362
+            $fh = $newfh;
  363
+        }
  364
+    }
  365
+
289 366
     my $date = scalar localtime;
290 367
     my %typemap = (
291 368
         'm' => 'method',
@@ -387,6 +464,11 @@ that clearly delinates the externally-visible name, the method signatures, the
387 464
 help text and the code itself. These files may be created manually, or this
388 465
 tool may be used as an aide.
389 466
 
  467
+=head1 REQUIRED ARGUMENTS
  468
+
  469
+There are no required arguments, but if there are not sufficient options passed
  470
+you will be told by an error message.
  471
+
390 472
 =head1 OPTIONS
391 473
 
392 474
 The tool recognizes the following options:
@@ -426,10 +508,10 @@ daemon to not make the routine visible through any introspection interfaces.
426 508
 =item --signature=STRING [ --signature=STRING ... ]
427 509
 
428 510
 Specify one or more signatures for the method. Signatures should be the type
429  
-names as laid out in the documentation in L<RPC::XML>, with the elements
430  
-separated by a colon. You may also separate them with spaces, if you quote the
431  
-argument. This option may be specified more than once, as some methods may
432  
-have several signatures.
  511
+names as laid out in the documentation in L<RPC::XML|RPC::XML>, with the
  512
+elements separated by a colon. You may also separate them with spaces, if you
  513
+quote the argument. This option may be specified more than once, as some
  514
+methods may have several signatures.
433 515
 
434 516
 =item --helptext=STRING
435 517
 
@@ -603,16 +685,48 @@ C<*.xpl> files using this tool, and then install them.
603 685
 Most problems come out in the form of error messages followed by an abrupt
604 686
 exit.
605 687
 
  688
+=head1 EXIT STATUS
  689
+
  690
+The tool exits with a status of 0 upon success, and 255 otherwise.
  691
+
606 692
 =head1 CAVEATS
607 693
 
608 694
 I don't much like this approach to specifying the methods, but I liked my
609 695
 other ideas even less.
610 696
 
611  
-=head1 CREDITS
  697
+=head1 BUGS
612 698
 
613  
-The B<XML-RPC> standard is Copyright (c) 1998-2001, UserLand Software, Inc.
614  
-See <http://www.xmlrpc.com> for more information about the B<XML-RPC>
615  
-specification.
  699
+Please report any bugs or feature requests to
  700
+C<bug-rpc-xml at rt.cpan.org>, or through the web interface at
  701
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=RPC-XML>. I will be
  702
+notified, and then you'll automatically be notified of progress on
  703
+your bug as I make changes.
  704
+
  705
+=head1 SUPPORT
  706
+
  707
+=over 4
  708
+
  709
+=item * RT: CPAN's request tracker
  710
+
  711
+L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=RPC-XML>
  712
+
  713
+=item * AnnoCPAN: Annotated CPAN documentation
  714
+
  715
+L<http://annocpan.org/dist/RPC-XML>
  716
+
  717
+=item * CPAN Ratings
  718
+
  719
+L<http://cpanratings.perl.org/d/RPC-XML>
  720
+
  721
+=item * Search CPAN
  722
+
  723
+L<http://search.cpan.org/dist/RPC-XML>
  724
+
  725
+=item * Source code on GitHub
  726
+
  727
+L<http://github.com/rjray/rpc-xml>
  728
+
  729
+=back
616 730
 
617 731
 =head1 LICENSE AND COPYRIGHT
618 732
 
@@ -625,7 +739,13 @@ Public License (LGPL) version 2.1
625 739
 
626 740
 =head1 SEE ALSO
627 741
 
628  
-L<RPC::XML>, L<RPC::XML::Server>
  742
+L<RPC::XML|RPC::XML>, L<RPC::XML::Server|RPC::XML::Server>
  743
+
  744
+=head1 CREDITS
  745
+
  746
+The B<XML-RPC> standard is Copyright (c) 1998-2001, UserLand Software, Inc.
  747
+See <http://www.xmlrpc.com> for more information about the B<XML-RPC>
  748
+specification.
629 749
 
630 750
 =head1 AUTHOR
631 751
 
22  lib/Apache/RPC/Server.pm
... ...
@@ -1,6 +1,6 @@
1 1
 ###############################################################################
2 2
 #
3  
-# This file copyright (c) 2001-2010 Randy J. Ray, all rights reserved
  3
+# This file copyright (c) 2001-2011 Randy J. Ray, all rights reserved
4 4
 #
5 5
 # Copying and distribution are permitted under the terms of the Artistic
6 6
 # License 2.0 (http://www.opensource.org/licenses/artistic-license-2.0.php) or
@@ -50,7 +50,7 @@ BEGIN
50 50
     %Apache::RPC::Server::SERVER_TABLE = ();
51 51
 }
52 52
 
53  
-our $VERSION = '1.36';
  53
+our $VERSION = '1.37';
54 54
 $VERSION = eval $VERSION; ## no critic (ProhibitStringyEval)
55 55
 
56 56
 sub version { return $Apache::RPC::Server::VERSION }
@@ -579,15 +579,15 @@ C<E<lt>LocationE<gt>> directives and familiar options. Additional configuration
579 579
 settings specific to this module are detailed below.
580 580
 
581 581
 Generally, externally-available methods are provided as files in the XML
582  
-dialect explained in L<RPC::XML::Server>. A subclass derived from this class
583  
-may of course use the methods provided by this class and its parent class for
584  
-adding and manipulating the method table.
  582
+dialect explained in L<RPC::XML::Server|RPC::XML::Server>. A subclass derived
  583
+from this class may of course use the methods provided by this class and its
  584
+parent class for adding and manipulating the method table.
585 585
 
586 586
 =head1 SUBROUTINES/METHODS
587 587
 
588 588
 The methods that the server publishes are provided by a combination of the
589 589
 installation files and Apache configuration values. Details on remote method
590  
-syntax and semantics is covered in L<RPC::XML::Server>.
  590
+syntax and semantics is covered in L<RPC::XML::Server|RPC::XML::Server>.
591 591
 
592 592
 =head2 Methods
593 593
 
@@ -643,7 +643,7 @@ B<RPC::XML::Server>. Three parameters are of concern to this class:
643 643
 The value associated with this key is a reference to an B<Apache> request
644 644
 object. If this is not passed, then it is assumed that this is being called in
645 645
 the start-up phase of the server and the value returned from
646  
-C<< Apache->server >> (see L<Apache>) is used.
  646
+C<< Apache->server >> (see L<Apache|Apache>) is used.
647 647
 
648 648
 =item server_id
649 649
 
@@ -658,9 +658,9 @@ configuration file.
658 658
 =back
659 659
 
660 660
 The server identification string and prefix concepts are explained in more
661  
-detail in the next section. See L<RPC::XML::Server> for a full list of what
662  
-additional arguments may be passed to B<new> for eventual proxy to the parent
663  
-class constructor.
  661
+detail in the next section. See L<RPC::XML::Server|RPC::XML::Server> for a full
  662
+list of what additional arguments may be passed to B<new> for eventual proxy to
  663
+the parent class constructor.
664 664
 
665 665
 =item child_started([BOOLEAN])
666 666
 
@@ -955,7 +955,7 @@ specification.
955 955
 
956 956
 =head1 SEE ALSO
957 957
 
958  
-L<RPC::XML::Server>, L<RPC::XML>
  958
+L<RPC::XML::Server|RPC::XML::Server>, L<RPC::XML|RPC::XML>
959 959
 
960 960
 =head1 AUTHOR
961 961
 
9  lib/Apache/RPC/Status.pm
... ...
@@ -1,6 +1,6 @@
1 1
 ###############################################################################
2 2
 #
3  
-# This file copyright (c) 2001-2009 Randy J. Ray, all rights reserved
  3
+# This file copyright (c) 2001-2011 Randy J. Ray, all rights reserved
4 4
 #
5 5
 # Copying and distribution are permitted under the terms of the Artistic
6 6
 # License 2.0 (http://www.opensource.org/licenses/artistic-license-2.0.php) or
@@ -63,7 +63,7 @@ $SERVER_CLASS = 'Apache::RPC::Server';
63 63
 $STARTED    = scalar localtime $^T;
64 64
 $PERL_VER   = $^V ? sprintf 'v%vd', $^V : $];
65 65
 
66  
-our $VERSION = '1.10';
  66
+our $VERSION = '1.11';
67 67
 $VERSION = eval $VERSION; ## no critic (ProhibitStringyEval)
68 68
 
69 69
 #
@@ -873,7 +873,7 @@ better integration with the B<Apache::Status> package. If the C<FLAG>
873 873
 parameter is passed and is any true value, then the resulting URL will be
874 874
 tailored for use with B<Apache::Status>. The first argument must be either the
875 875
 original request object as passed by mod_perl, or a reference to a CGI object
876  
-created from the request (see L<CGI> for more on the CGI class).
  876
+created from the request (see L<CGI|CGI> for more on the CGI class).
877 877
 
878 878
 =item main_screen(REQUEST, QUERY, INTERNAL)
879 879
 
@@ -1043,7 +1043,8 @@ specification.
1043 1043
 
1044 1044
 =head1 SEE ALSO
1045 1045
 
1046  
-L<Apache::Status>, L<Apache::RPC::Server>, L<RPC::XML::Method>
  1046
+L<Apache::Status|Apache::Status>, L<Apache::RPC::Server|Apache::RPC::Server>,
  1047
+L<RPC::XML::Method|RPC::XML::Method>
1047 1048
 
1048 1049
 =head1 AUTHOR
1049 1050
 
69  lib/RPC/XML.pm
@@ -26,7 +26,8 @@ use 5.006001;
26 26
 use strict;
27 27
 use warnings;
28 28
 use vars qw(@EXPORT_OK %EXPORT_TAGS $VERSION $ERROR
29  
-            %XMLMAP $XMLRE $ENCODING $FORCE_STRING_ENCODING $ALLOW_NIL);
  29
+            %XMLMAP $XMLRE $ENCODING $FORCE_STRING_ENCODING $ALLOW_NIL
  30
+            $DATETIME_REGEXP);
30 31
 use subs qw(time2iso8601 smart_encode utf8_downgrade);
31 32
 use base 'Exporter';
32 33
 
@@ -78,6 +79,25 @@ $ERROR = q{};
78 79
 );
79 80
 $XMLRE = join q{} => keys %XMLMAP; $XMLRE = qr/([$XMLRE])/;
80 81
 
  82
+# The XMLRPC spec only allows for the incorrect iso8601 format
  83
+# without dashes, but dashes are part of the standard so we include
  84
+# them. Note that the actual RPC::XML::datetime_iso8601 class will strip
  85
+# them out if present.
  86
+my $date_re =
  87
+    qr{
  88
+          (\d{4})-?
  89
+          ([01]\d)-?
  90
+          ([0123]\d)
  91
+    }x;
  92
+my $time_re =
  93
+    qr{
  94
+          ([012]\d):
  95
+          ([0-5]\d):
  96
+          ([0-5]\d)([.]\d+)?
  97
+          (Z|[-+]\d\d:\d\d)?
  98
+    }x;
  99
+$DATETIME_REGEXP = qr{^${date_re}T${time_re}$};
  100
+
81 101
 # All of the RPC_* functions are convenience-encoders
82 102
 sub RPC_STRING ($)
83 103
 {
@@ -169,7 +189,7 @@ sub time2iso8601
169 189
 
170 190
         foreach (@values)
171 191
         {
172  
-            if (! defined $_) ## no critic (ProhibitCascadingIfElse)
  192
+            if (! defined $_)
173 193
             {
174 194
                 $type = $ALLOW_NIL ?
175 195
                     RPC::XML::nil->new() : RPC::XML::string->new(q{});
@@ -179,7 +199,7 @@ sub time2iso8601
179 199
                 # Skip any that we've already seen
180 200
                 next if $seenrefs->{$_}++;
181 201
 
182  
-                if (blessed($_) && ## no critic (ProhibitCascadingIfElse)
  202
+                if (blessed($_) &&
183 203
                     ($_->isa('RPC::XML::datatype') || $_->isa('DateTime')))
184 204
                 {
185 205
                     # Only if the reference is a datatype or a DateTime
@@ -263,31 +283,13 @@ sub time2iso8601
263 283
             }
264 284
             # Pattern taken from perldata(1)
265 285
             elsif (! $FORCE_STRING_ENCODING &&
266  
-                   /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/x &&
  286
+                   /^[+-]?(?=\d|[.]\d)\d*(?:[.]\d*)?(?:[Ee](?:[+-]?\d+))?$/x &&
267 287
                    $_ > $MIN_DOUBLE &&
268 288
                    $_ < $MAX_DOUBLE)
269 289
             {
270 290
                 $type = RPC::XML::double->new($_);
271 291
             }
272  
-            # The XMLRPC spec only allows for the incorrect iso8601 format
273  
-            # without dashes, but dashes are part of the standard so we include
274  
-            # them (DateTime->now->iso8601 includes them). Note that the actual
275  
-            # RPC::XML::datetime_iso8601 class will strip them out if present.
276  
-            elsif (m{
277  
-                       ^           # start
278  
-                       \d{4}       # 4 digit year
279  
-                       -?          # "optional" dash
280  
-                       [01]\d      # month
281  
-                       -?          # optional dash
282  
-                       [0123]\d    # day of month
283  
-                       T           # Yes, "T"
284  
-                       [012]\d:    # hours
285  
-                       [012345]\d: # min
286  
-                       [012345]\d  # seconds
287  
-                       (?:\.\d+)?  # optional fractional seconds
288  
-                       Z?          # optional "Z" to indicate UTC
289  
-                       $           # end
290  
-                }x)
  292
+            elsif (/$DATETIME_REGEXP/)
291 293
             {
292 294
                 $type = RPC::XML::datetime_iso8601->new($_);
293 295
             }
@@ -469,7 +471,7 @@ sub as_string
469 471
         return;
470 472
     }
471 473
 
472  
-    (my $value = sprintf '%.20f', ${$self}) =~ s/(\.\d+?)0+$/$1/;
  474
+    (my $value = sprintf '%.20f', ${$self}) =~ s/([.]\d+?)0+$/$1/;
473 475
 
474 476
     return "<$class>$value</$class>";
475 477
 }
@@ -569,9 +571,7 @@ sub new
569 571
         $value = ${$value};
570 572
     }
571 573
 
572  
-    if ($value && $value =~ m{^(\d{4})-?([01]\d)-?([0123]\d)T
573  
-                              ([012]\d):([012345]\d):([012345]\d)(\.\d+)?
574  
-                              (Z|[-+]\d\d:\d\d)?$}x)
  574
+    if ($value && $value =~ /$RPC::XML::DATETIME_REGEXP/)
575 575
     {
576 576
         # This is the WRONG way to represent this, but it's the way it is
577 577
         # given in the spec, so assume that other implementations can only
@@ -1567,14 +1567,15 @@ RPC::XML - A set of classes for core data, message and XML handling
1567 1567
 The B<RPC::XML> package is an implementation of the B<XML-RPC> standard.
1568 1568
 
1569 1569
 The package provides a set of classes for creating values to pass to the
1570  
-constructors for requests and responses. These are lightweight objects, most
1571  
-of which are implemented as tied scalars so as to associate specific type
  1570
+constructors for requests and responses. These are lightweight objects, most of
  1571
+which are implemented as tied scalars so as to associate specific type
1572 1572
 information with the value. Classes are also provided for requests, responses,
1573  
-faults (errors) and a parser based on the L<XML::Parser> package from CPAN.
  1573
+faults (errors) and a parsers based on the L<XML::Parser|XML::Parser> and
  1574
+L<XML::LibXML|XML::LibXML> packages from CPAN.
1574 1575
 
1575  
-This module does not actually provide any transport implementation or
1576  
-server basis. For these, see L<RPC::XML::Client> and L<RPC::XML::Server>,
1577  
-respectively.
  1576
+This module does not actually provide any transport implementation or server
  1577
+basis. For these, see L<RPC::XML::Client|RPC::XML::Client> and
  1578
+L<RPC::XML::Server|RPC::XML::Server>, respectively.
1578 1579
 
1579 1580
 =head1 SUBROUTINES/METHODS
1580 1581
 
@@ -2006,7 +2007,7 @@ specification.
2006 2007
 
2007 2008
 =head1 SEE ALSO
2008 2009
 
2009  
-L<RPC::XML::Client>, L<RPC::XML::Server>, L<RPC::XML::Parser>, L<XML::Parser>
  2010
+L<RPC::XML::Client|RPC::XML::Client>, L<RPC::XML::Server|RPC::XML::Server>
2010 2011
 
2011 2012
 =head1 AUTHOR
2012 2013
 
8  lib/RPC/XML/Client.pm
... ...
@@ -1,6 +1,6 @@
1 1
 ###############################################################################
2 2
 #
3  
-# This file copyright (c) 2001-2010 Randy J. Ray, all rights reserved
  3
+# This file copyright (c) 2001-2011 Randy J. Ray, all rights reserved
4 4
 #
5 5
 # Copying and distribution are permitted under the terms of the Artistic
6 6
 # License 2.0 (http://www.opensource.org/licenses/artistic-license-2.0.php) or
@@ -60,7 +60,7 @@ BEGIN
60 60
     }
61 61
 }
62 62
 
63  
-$VERSION = '1.32';
  63
+$VERSION = '1.33';
64 64
 $VERSION = eval $VERSION; ## no critic (ProhibitStringyEval)
65 65
 
66 66
 ###############################################################################
@@ -240,7 +240,7 @@ sub send_request ## no critic (ProhibitExcessComplexity)
240 240
 
241 241
     # Start by setting up the request-clone for using in this instance
242 242
     $reqclone = $self->request->clone;
243  
-    unless ($reqclone->header('Host')) {
  243
+    if (! $reqclone->header('Host')) {
244 244
         $reqclone->header(Host => URI->new($reqclone->uri)->host);
245 245
     }
246 246
     $can_compress = $self->compress; # Avoid making 4+ calls to the method
@@ -915,7 +915,7 @@ specification.
915 915
 
916 916
 =head1 SEE ALSO
917 917
 
918  
-L<RPC::XML>, L<RPC::XML::Server>
  918
+L<RPC::XML|RPC::XML>, L<RPC::XML::Server|RPC::XML::Server>
919 919
 
920 920
 =head1 AUTHOR
921 921
 
18  lib/RPC/XML/Function.pm
... ...
@@ -1,6 +1,6 @@
1 1
 ###############################################################################
2 2
 #
3  
-# This file copyright (c) 2002-2010 Randy J. Ray, all rights reserved
  3
+# This file copyright (c) 2002-2011 Randy J. Ray, all rights reserved
4 4
 #
5 5
 # Copying and distribution are permitted under the terms of the Artistic
6 6
 # License 2.0 (http://www.opensource.org/licenses/artistic-license-2.0.php) or
@@ -37,7 +37,7 @@ use base qw(RPC::XML::Procedure);
37 37
 
38 38
 use AutoLoader 'AUTOLOAD';
39 39
 
40  
-$VERSION = '1.09';
  40
+$VERSION = '1.10';
41 41
 $VERSION = eval $VERSION; ## no critic (ProhibitStringyEval)
42 42
 
43 43
 ###############################################################################
@@ -173,16 +173,17 @@ RPC::XML::Function - Object class for RPC routines that do not check signatures
173 173
 =head1 DESCRIPTION
174 174
 
175 175
 The B<RPC::XML::Function> is a class that derives from B<RPC::XML::Procedure>
176  
-(see L<RPC::XML::Procedure>), while bypassing all the signature-specific logic
177  
-associated with server-side methods in the B<RPC::XML> suite.
  176
+(see L<RPC::XML::Procedure|RPC::XML::Procedure>), while bypassing all the
  177
+signature-specific logic associated with server-side methods in the B<RPC::XML>
  178
+suite.
178 179
 
179 180
 By doing this, the encapsulated code becomes responsible for how the server
180 181
 (and ultimately, the client) interprets returned values. For the classes that
181 182
 adhere to signatures, the signature includes the expected type of the returned
182 183
 value. If an object of this class anticipates that the data may be ambiguous
183  
-(an intended string being interpreted as an integer, for example), the code
184  
-it encapsulates should consider encoding the response with the data-classes
185  
-documented in L<RPC::XML> prior to return.
  184
+(an intended string being interpreted as an integer, for example), the code it
  185
+encapsulates should consider encoding the response with the data-classes
  186
+documented in L<RPC::XML|RPC::XML> prior to return.
186 187
 
187 188
 =head1 SUBROUTINES/METHODS
188 189
 
@@ -273,7 +274,8 @@ specification.
273 274
 
274 275
 =head1 SEE ALSO
275 276
 
276  
-L<RPC::XML>, L<RPC::XML::Procedure>, L<make_method>
  277
+L<RPC::XML|RPC::XML>, L<RPC::XML::Procedure|RPC::XML::Procedure>,
  278
+L<make_method|make_method>
277 279
 
278 280
 =head1 AUTHOR
279 281
 
14  lib/RPC/XML/Method.pm
... ...
@@ -1,6 +1,6 @@
1 1
 ###############################################################################
2 2
 #
3  
-# This file copyright (c) 2001-2010 Randy J. Ray, all rights reserved
  3
+# This file copyright (c) 2001-2011 Randy J. Ray, all rights reserved
4 4
 #
5 5
 # Copying and distribution are permitted under the terms of the Artistic
6 6
 # License 2.0 (http://www.opensource.org/licenses/artistic-license-2.0.php) or
@@ -30,11 +30,14 @@ use warnings;
30 30
 use vars qw($VERSION);
31 31
 use base qw(RPC::XML::Procedure);
32 32
 
33  
-$VERSION = '1.13';
  33
+$VERSION = '1.14';
34 34
 $VERSION = eval $VERSION; ## no critic (ProhibitStringyEval)
35 35
 
36 36
 1;
37 37
 
  38
+# This is now a skeleton, so it doesn't have a full POD section
  39
+## no critic (Documentation::RequirePodSections)
  40
+
38 41
 __END__
39 42
 
40 43
 =head1 NAME
@@ -54,8 +57,9 @@ RPC::XML::Method - Object encapsulation of server-side RPC methods
54 57
 =head1 DESCRIPTION
55 58
 
56 59
 This package is no longer a distinct, separate entity. It has become an empty
57  
-sub-class of B<RPC::XML::Procedure>. Please see L<RPC::XML::Procedure> for
58  
-details on the methods and usage.
  60
+sub-class of B<RPC::XML::Procedure>. Please see
  61
+L<RPC::XML::Procedure|RPC::XML::Procedure> for details on the methods and
  62
+usage.
59 63
 
60 64
 By the time of 1.0 release of this software package, this file will be removed
61 65
 completely.
@@ -110,7 +114,7 @@ specification.
110 114
 
111 115
 =head1 SEE ALSO
112 116
 
113  
-L<RPC::XML::Procedure>
  117
+L<RPC::XML::Procedure|RPC::XML::Procedure>
114 118
 
115 119
 =head1 AUTHOR
116 120
 
10  lib/RPC/XML/Parser.pm
... ...
@@ -1,6 +1,6 @@
1 1
 ###############################################################################
2 2
 #
3  
-# This file copyright (c) 2001-2010 Randy J. Ray, all rights reserved
  3
+# This file copyright (c) 2001-2011 Randy J. Ray, all rights reserved
4 4
 #
5 5
 # Copying and distribution are permitted under the terms of the Artistic
6 6
 # License 2.0 (http://www.opensource.org/licenses/artistic-license-2.0.php) or
@@ -29,7 +29,7 @@ use warnings;
29 29
 use vars qw($VERSION);
30 30
 use subs qw(new parse);
31 31
 
32  
-$VERSION = '1.22';
  32
+$VERSION = '1.23';
33 33
 $VERSION = eval $VERSION; ## no critic (ProhibitStringyEval)
34 34
 
35 35
 ###############################################################################
@@ -135,7 +135,8 @@ RPC::XML::Parser - Interface for parsers created by RPC::XML::ParserFactory
135 135
 
136 136
 =head1 SYNOPSIS
137 137
 
138  
-This class is not instantiated directly; see L<RPC::XML::ParserFactory>.
  138
+This class is not instantiated directly; see
  139
+L<RPC::XML::ParserFactory|RPC::XML::ParserFactory>.
139 140
 
140 141
 =head1 DESCRIPTION
141 142
 
@@ -317,7 +318,8 @@ specification.
317 318
 
318 319
 =head1 SEE ALSO
319 320
 
320  
-L<RPC::XML>, L<RPC::XML::ParserFactory>, L<RPC::XML::Parser::XMLParser>
  321
+L<RPC::XML|RPC::XML>, L<RPC::XML::ParserFactory|RPC::XML::ParserFactory>,
  322
+L<RPC::XML::Parser::XMLParser|RPC::XML::Parser::XMLParser>
321 323
 
322 324
 =head1 AUTHOR
323 325
 
38  lib/RPC/XML/Parser/XMLLibXML.pm
... ...
@@ -1,6 +1,6 @@
1 1
 ###############################################################################
2 2
 #
3  
-# This file copyright (c) 2010 by Randy J. Ray, all rights reserved
  3
+# This file copyright (c) 2010-2011 by Randy J. Ray, all rights reserved
4 4
 #
5 5
 # Copying and distribution are permitted under the terms of the Artistic
6 6
 # License 2.0 (http://www.opensource.org/licenses/artistic-license-2.0.php) or
@@ -42,7 +42,7 @@ use base 'RPC::XML::Parser';
42 42
 use Scalar::Util 'reftype';
43 43
 use XML::LibXML;
44 44
 
45  
-$VERSION = '1.13';
  45
+$VERSION = '1.14';
46 46
 $VERSION = eval $VERSION; ## no critic (ProhibitStringyEval)
47 47
 
48 48
 # This is to identify valid types that don't already have special handling
@@ -91,11 +91,14 @@ sub parse
91 91
     my ($self, $stream) = @_;
92 92
 
93 93
     my $parser = XML::LibXML->new(
94  
-        no_network => 1,
  94
+        no_network      => 1,
95 95
         expand_xinclude => 0,
96 96
         expand_entities => 1,
97  
-        load_ext_dtd => 0,
98  
-        ext_ent_handler => sub { warn "External entities disabled."; '' },
  97
+        load_ext_dtd    => 0,
  98
+        ext_ent_handler => sub {
  99
+            warn "External entities disabled.\n";
  100
+            return q{}
  101
+        },
99 102
     );
100 103
 
101 104
     # RT58323: It's not enough to just test $stream, I have to check
@@ -125,8 +128,8 @@ sub parse
125 128
             if (! $result)
126 129
             {
127 130
                 # Certain cases cause $@ to be a XML::LibXML::Error object
128  
-                # instead of a string. So force it to stringify with "".
129  
-                return "$@";
  131
+                # instead of a string. So force it to stringify with qq().
  132
+                return qq($@);
130 133
             }
131 134
         }
132 135
         elsif (reftype($stream) eq 'SCALAR')
@@ -138,8 +141,8 @@ sub parse
138 141
             if (! $result)
139 142
             {
140 143
                 # Certain cases cause $@ to be a XML::LibXML::Error object
141  
-                # instead of a string. So force it to stringify with "".
142  
-                return "$@";
  144
+                # instead of a string. So force it to stringify with qq().
  145
+                return qq($@);
143 146
             }
144 147
         }
145 148
         else
@@ -156,8 +159,8 @@ sub parse
156 159
         if (! $result)
157 160
         {
158 161
             # Certain cases cause $@ to be a XML::LibXML::Error object
159  
-            # instead of a string. So force it to stringify with "".
160  
-            return "$@";
  162
+            # instead of a string. So force it to stringify with qq().
  163
+            return qq($@);
161 164
         }
162 165
     }
163 166
 
@@ -274,7 +277,7 @@ sub dom_request
274 277
         $method_name = $nodes[0]->textContent;
275 278
         $method_name =~ s/^\s+//;
276 279
         $method_name =~ s/\s+$//;
277  
-        if ($method_name !~ m{[\w\.:/]+})
  280
+        if ($method_name !~ m{[\w.:/]+})
278 281
         {
279 282
             return qq{methodName value "$method_name" not a valid name};
280 283
         }
@@ -620,13 +623,13 @@ RPC::XML::Parser::XMLLibXML - A container class for XML::LibXML
620 623
 =head1 DESCRIPTION
621 624
 
622 625
 This class implements the interface defined in the B<RPC::XML::Parser>
623  
-factory-class (see L<RPC::XML::Parser>) using the B<XML::LibXML> module
624  
-to handle the actual manipulation of XML.
  626
+factory-class (see L<RPC::XML::Parser|RPC::XML::Parser>) using the
  627
+B<XML::LibXML> module to handle the actual manipulation of XML.
625 628
 
626 629
 =head1 SUBROUTINES/METHODS
627 630
 
628 631
 This module implements the public-facing methods as described in
629  
-L<RPC::XML::Parser>:
  632
+L<RPC::XML::Parser|RPC::XML::Parser>:
630 633
 
631 634
 =over 4
632 635
 
@@ -655,7 +658,7 @@ push-parser, an exception is thrown.
655 658
 (Only callable on a push-parser instance) Finishes the parsing process and
656 659
 returns either a message object (one of B<RPC::XML::request> or
657 660
 B<RPC::XML::response>) or an error (if the document was incomplete, not
658  
-wel-formed, or not valid). If this method is called on a parser instance that
  661
+well-formed, or not valid). If this method is called on a parser instance that
659 662
 is not a push-parser, an exception is thrown.
660 663
 
661 664
 =back
@@ -716,7 +719,8 @@ specification.
716 719
 
717 720
 =head1 SEE ALSO
718 721
 
719  
-L<RPC::XML>, L<RPC::XML::Parser>, L<XML::LibXML>
  722
+L<RPC::XML|RPC::XML>, L<RPC::XML::Parser|RPC::XML::Parser>,
  723
+L<XML::LibXML|XML::LibXML>
720 724
 
721 725
 =head1 AUTHOR
722 726
 
17  lib/RPC/XML/Parser/XMLParser.pm
... ...
@@ -1,6 +1,6 @@
1 1
 ###############################################################################
2 2
 #
3  
-# This file copyright (c) 2001-2010 Randy J. Ray, all rights reserved
  3
+# This file copyright (c) 2001-2011 Randy J. Ray, all rights reserved
4 4
 #
5 5
 # Copying and distribution are permitted under the terms of the Artistic
6 6
 # License 2.0 (http://www.opensource.org/licenses/artistic-license-2.0.php) or
@@ -98,7 +98,7 @@ use XML::Parser;
98 98
 
99 99
 require RPC::XML;
100 100
 
101  
-$VERSION = '1.22';
  101
+$VERSION = '1.23';
102 102
 $VERSION = eval $VERSION; ## no critic (ProhibitStringyEval)
103 103
 
104 104
 ###############################################################################
@@ -355,7 +355,7 @@ sub tag_end ## no critic (ProhibitExcessComplexity)
355 355
         {
356 356
             if ($cdata !~
357 357
                 # Taken from perldata(1)
358  
-                /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/x)
  358
+                /^[+-]?(?=\d|[.]\d)\d*(?:[.]\d*)?(?:[Ee](?:[+-]?\d+))?$/x)
359 359
             {
360 360
                 return error($robj, $self, 'Bad floating-point data read');
361 361
             }
@@ -718,13 +718,13 @@ RPC::XML::Parser::XMLParser - A container class for XML::Parser
718 718
 =head1 DESCRIPTION
719 719
 
720 720
 This class implements the interface defined in the B<RPC::XML::Parser>
721  
-factory-class (see L<RPC::XML::Parser>) using the B<XML::Parser> module
722  
-to handle the actual manipulation of XML.
  721
+factory-class (see L<RPC::XML::Parser|RPC::XML::Parser>) using the
  722
+B<XML::Parser> module to handle the actual manipulation of XML.
723 723
 
724 724
 =head1 SUBROUTINES/METHODS
725 725
 
726 726
 This module implements the public-facing methods as described in
727  
-L<RPC::XML::Parser>:
  727
+L<RPC::XML::Parser|RPC::XML::Parser>:
728 728
 
729 729
 =over 4
730 730
 
@@ -753,7 +753,7 @@ push-parser, an exception is thrown.
753 753
 (Only callable on a push-parser instance) Finishes the parsing process and
754 754
 returns either a message object (one of B<RPC::XML::request> or
755 755
 B<RPC::XML::response>) or an error (if the document was incomplete, not
756  
-wel-formed, or not valid). If this method is called on a parser instance that
  756
+well-formed, or not valid). If this method is called on a parser instance that
757 757
 is not a push-parser, an exception is thrown.
758 758
 
759 759
 =back
@@ -814,7 +814,8 @@ specification.
814 814
 
815 815
 =head1 SEE ALSO
816 816
 
817  
-L<RPC::XML>, L<RPC::XML::Parser>, L<XML::Parser>
  817
+L<RPC::XML|RPC::XML>, L<RPC::XML::Parser|RPC::XML::Parser>,
  818
+L<XML::Parser|XML::Parser>
818 819
 
819 820
 =head1 AUTHOR
820 821
 
13  lib/RPC/XML/ParserFactory.pm
... ...
@@ -1,6 +1,6 @@
1 1
 ###############################################################################
2 2
 #
3  
-# This file copyright (c) 2001-2010 Randy J. Ray, all rights reserved
  3
+# This file copyright (c) 2001-2011 Randy J. Ray, all rights reserved
4 4
 #
5 5
 # Copying and distribution are permitted under the terms of the Artistic
6 6
 # License 2.0 (http://www.opensource.org/licenses/artistic-license-2.0.php) or
@@ -37,7 +37,7 @@ use subs qw(import new register);
37 37
 # critic policy, but can't be worked around:
38 38
 ## no critic (RequireCheckingReturnValueOfEval)
39 39
 
40  
-$VERSION = '1.01';
  40
+$VERSION = '1.02';
41 41
 $VERSION = eval $VERSION; ## no critic (ProhibitStringyEval)
42 42
 
43 43
 # These are the known parsers supported, not including any that are specified
@@ -170,9 +170,9 @@ RPC::XML::ParserFactory - A factory class for RPC::XML::Parser objects
170 170
 =head1 DESCRIPTION
171 171
 
172 172
 The B<RPC::XML::ParserFactory> class encapsulates the process of creating
173  
-parser objects that adhere to the interface described in L<RPC::XML::Parser>.
174  
-Under the hood, the parser object created and returned could be from any of
175  
-a number of implementation classes.
  173
+parser objects that adhere to the interface described in
  174
+L<RPC::XML::Parser|RPC::XML::Parser>.  Under the hood, the parser object
  175
+created and returned could be from any of a number of implementation classes.
176 176
 
177 177
 =head1 IMPORT-TIME ARGUMENTS
178 178
 
@@ -303,7 +303,8 @@ specification.
303 303
 
304 304
 =head1 SEE ALSO
305 305
 
306  
-L<RPC::XML>, L<RPC::XML::Client>, L<RPC::XML::Server>, L<XML::Parser>
  306
+L<RPC::XML|RPC::XML>, L<RPC::XML::Client|RPC::XML::Client>,
  307
+L<RPC::XML::Server|RPC::XML::Server>, L<XML::Parser|XML::Parser>
307 308
 
308 309
 =head1 AUTHOR
309 310
 
16  lib/RPC/XML/Procedure.pm
... ...
@@ -1,6 +1,6 @@
1 1
 ###############################################################################
2 2
 #
3  
-# This file copyright (c) 2001-2010 Randy J. Ray, all rights reserved
  3
+# This file copyright (c) 2001-2011 Randy J. Ray, all rights reserved
4 4
 #
5 5
 # Copying and distribution are permitted under the terms of the Artistic
6 6
 # License 2.0 (http://www.opensource.org/licenses/artistic-license-2.0.php) or
@@ -56,7 +56,7 @@ use RPC::XML 'smart_encode';
56 56
 # This module also provides RPC::XML::Method
57 57
 ## no critic (ProhibitMultiplePackages)
58 58
 
59  
-$VERSION = '1.21';
  59
+$VERSION = '1.22';
60 60
 $VERSION = eval $VERSION;    ## no critic (ProhibitStringyEval)
61 61
 
62 62
 ###############################################################################
@@ -318,7 +318,7 @@ The B<RPC::XML::Procedure> package is designed primarily for behind-the-scenes
318 318
 use by the B<RPC::XML::Server> class and any subclasses of it. It is
319 319
 documented here in case a project chooses to sub-class it for their purposes
320 320
 (which would require setting the C<method_class> attribute when creating
321  
-server objects, see L<RPC::XML::Server>).
  321
+server objects, see L<RPC::XML::Server|RPC::XML::Server>).
322 322
 
323 323
 This package grew out of the increasing need to abstract the operations that
324 324
 related to the methods a given server instance was providing. Previously,
@@ -594,9 +594,9 @@ document the method, is also marked as optional.  Having some degree of
594 594
 documentation for all the methods a server provides is a good rule of thumb,
595 595
 however.
596 596
 
597  
-The default methods that this package provides are turned into XPL files by
598  
-the B<make_method> tool (see L<make_method>). The final forms of these may
599  
-serve as examples of what the file should look like.
  597
+The default methods that this package provides are turned into XPL files by the
  598
+B<make_method> tool (see L<make_method|make_method>). The final forms of these
  599
+may serve as examples of what the file should look like.
600 600
 
601 601
 =item Information used only for book-keeping
602 602
 
@@ -648,7 +648,7 @@ features and options, and is out of the scope of this particular manual
648 648
 page. The package F<Makefile.PL> features an example of engineering the
649 649
 automatic generation of XPL files and their delivery as a part of the normal
650 650
 Perl module build process. Using this tool is highly recommended over managing
651  
-XPL files directly. For the full details, see L<make_method>.
  651
+XPL files directly. For the full details, see L<make_method|make_method>.
652 652
 
653 653
 =head1 NAMESPACES
654 654
 
@@ -733,7 +733,7 @@ specification.
733 733
 
734 734
 =head1 SEE ALSO
735 735
 
736  
-L<RPC::XML::Server>, L<make_method>
  736
+L<RPC::XML::Server|RPC::XML::Server>, L<make_method|make_method>