The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Build.PL 44
Changes 16671
MANIFEST 04
META.json 090
META.yml 1415
Makefile.PL 44
TODO 11
examples/0.9/rss-0.9.dtd 99
examples/0.9/slashdot.rdf 1111
examples/0.91/create_rss_0.91.pl 11
examples/0.91/create_rss_0.91_full.pl 11
examples/0.91/rss-0.91.dtd 99
examples/1.0/create_rss_1.0.pl 22
examples/1.0/update_rss_1.0.pl 33
examples/2.0/flickr-rss-with-both-desc-and-media-desc.xml 22
examples/2.0/rss-2.0-sample-from-rssboard-multiple-skip-days-and-hours.xml 44
examples/convert.pl 11
examples/rss2html.pl 11
inc/Test/Run/Builder/Manifest.pm 22
lib/XML/RSS/Private/Output/Base.pm 1557
lib/XML/RSS.pm 3231
t/0.9-strict.t 99
t/1.0-gen-errors-on-missing-fields.t 050
t/1.0-generate.t 33
t/1.0-parse-2.t 33
t/1.0-to-2.0.t 511
t/2.0-generate.t 22
t/2.0-parse-2.t 88
t/2.0-parse-cloud.t 33
t/2.0-parse-self.t 11
t/2.0-parse.t 22
t/2.0-permalink.t 44
t/2.0-wo-title.t 11
t/add-item-insert-vs-append.t 22
t/auto_add_modules.t 22
t/charset1.t 22
t/cpan-changes.t 012
t/data/1.0/rss1.0.exotic.rdf 33
t/data/2.0/empty-desc.rss 1111
t/data/2.0/no-desc.rss 1111
t/data/2.0/sf-hs-with-lastBuildDate.rss 1111
t/data/2.0/sf-hs-with-pubDate.rss 1111
t/data/rss-permalink.xml 11
t/enclosures.t 22
t/enclosures2.t 55
t/encoding.t 55
t/guid.t 33
t/load.t 33
t/render-upon-init.t 22
t/save-while-in-taint-mode.t 22
t/style-trailing-space.t 029
t/test-generated-items.t 150150
t/test_manifest 03
t/version.t 33
t/xml-base.t 77
t/xml-header.t 33
testlib/Test/Run/CmdLine/WithTestManifest.pm 33
57 files changed (This is a version diff) 565706
@@ -8,7 +8,7 @@ use Test::Run::Builder::Manifest;
 
 my $build = Test::Run::Builder::Manifest->new(
     'module_name' => "XML::RSS",
-    'requires' => 
+    'requires' =>
     {
         'DateTime' => 0,
         'DateTime::Format::Mail' => 0,
@@ -23,7 +23,7 @@ my $build = Test::Run::Builder::Manifest->new(
         'Test::More' => 0,
     },
     configure_requires =>
-    { 
+    {
         'Module::Build' => '0.36',
     },
     'license' => "perl",
@@ -32,7 +32,7 @@ my $build = Test::Run::Builder::Manifest->new(
     {
         resources =>
         {
-            repository => "https://svn.perl.org/modules/XML-RSS/trunk",
+            repository => "https://github.com/shlomif/perl-XML-RSS",
             homepage => "http://perl-rss.sourceforge.net/",
         },
         keywords =>
@@ -49,6 +49,6 @@ my $build = Test::Run::Builder::Manifest->new(
             "web-feeds",
             "xml",
         ],
-    },    
+    },
 );
 $build->create_build_script;
@@ -1,23 +1,48 @@
 Revision history for Perl module XML::RSS
 
-1.49 - April 7, 2011
+1.55    2014-04-15
+    - Fix the tests for DateTime-Format-Mail-0.400.
+
+1.54    2013-06-05
+    - Apply a patch from Debian for correcting a typo.
+        - https://rt.cpan.org/Public/Bug/Display.html?id=85962
+        - Thanks to Gregor Herrmann
+
+1.53    2013-06-04
+    - Implement a more user-friendly error with XML::RSS->new(version=>1.0)
+    and a missing "link" and/or "title" field.
+        - Thanks to Gabor Szabo for reporting it.
+
+1.52    2013-05-21
+    - Add t/style-trailing-space.t.
+        - Got rid of trailing space.
+    - Convert to t/cpan-changes.t .
+
+1.51    2013-05-11
+    - Sort the XML namespaces before outputting.
+        - became broken in perl-5.18.0-RC1.
+
+1.50    2013-04-07
+    - Update the repository URL to its new location on GitHub.
+
+1.49    2011-04-07
     - Some correctness and Modern Perl changes to the rss2html.pl
     script (it still appears to be very hairy.)
     - Add support for parsing rssCloud:
         - https://rt.cpan.org/Ticket/Display.html?id=67241
         - Thanks to STUIFZAND for the patch.
 
-1.48 - April 23, 2010
+1.48    2010-04-23
     - Fix the $rss->parse($string)->other_method() display (had to add
     spaces between the << and >>). See:
         - https://rt.cpan.org/Public/Bug/Display.html?id=56848
         - Thanks to Slaven_Rezic for the report.
 
-1.47 - December 8, 2009
+1.47    2009-12-08
     - Made sure XML::RSS::save() can do its thing when in taint mode:
         - http://rt.cpan.org/Public/Bug/Display.html?id=52334
 
-1.46 - October 8, 2009
+1.46    2009-10-08
     - Updated the E-mail address of Adam Trickett.
     - Removed the perl-5.6.x-specific workarounds and made perl-5.8.x as
     a requirement. This was done in order to:
@@ -28,33 +53,33 @@ Revision history for Perl module XML::RSS
     - Convert all occurences of "new XML::RSS" to "XML::RSS->new()" everywhere.
         - a best practice.
 
-1.45 - August 5, 2009
+1.45    2009-08-05
     - Removed some unused module requirements statements from lib/**.pm.
     - Added a note about date parsing/generation (thanks to an email
     correspondent).
-    - Applied a patch by "David White" to have uppercase letter in 
+    - Applied a patch by "David White" to have uppercase letter in
     namespace/module identifiers.
         - https://rt.cpan.org/Ticket/Display.html?id=48405
     - Added "resources" and "keywords" to the Build.PL.
 
-1.44 - April 1, 2009
+1.44    2009-04-01
     - Applied a patch from Simon Wistow (after some modifications) to
     add support for multiple enclosures.
     - Added the t/xml-base.t test file from Simon Wistow to test for
     xml:base. Corrected for style.
 
-1.43 - January 12, 2009
+1.43    2009-01-12
     - Fixed the date on the last entry on this changelog, to say "2009"
     instead of "2008".
         - http://rt.cpan.org/Ticket/Display.html?id=42304
 
-1.42 - January 3, 2009
+1.42    2009-01-03
     - When transforming elements with attributes into hash-refs - make
-    sure they are placed in the correct namespace. Previously 
+    sure they are placed in the correct namespace. Previously
     <media:description> over-rided the plain <description>. (as in Flickr).
 
-1.41 - December 4, 2008    
-    - Made the default keys for the channel link, description and title undef 
+1.41    2008-12-04
+    - Made the default keys for the channel link, description and title undef
     instead of ''. They become '' once they are opened.
         - http://rt.cpan.org/Public/Bug/Display.html?id=40686
     - Now keeping track of rdf:resource of <image> in RSS 1.0:
@@ -62,9 +87,9 @@ Revision history for Perl module XML::RSS
     - Made sure that channel/{link,description,title} are localized to
     the empty string before rendering, to allow for better backwards
     compatibility.
-        - http://rt.cpan.org/Public/Bug/Display.html?id=40686    
+        - http://rt.cpan.org/Public/Bug/Display.html?id=40686
 
-1.40 - December 1, 2008
+1.40    2008-12-01
     - Now outputting an arrayref of <skipDays>/<day>'s and <skipHours>/<hours>
     properly.
         - http://rt.cpan.org/Public/Bug/Display.html?id=40978
@@ -77,14 +102,14 @@ Revision history for Perl module XML::RSS
         - http://rt.cpan.org/Public/Bug/Display.html?id=9729
     - Rendering multiple <channel>/<category> elements from array refs.
         - http://rt.cpan.org/Public/Bug/Display.html?id=9729
-    - Now parsing multiple dc:items into an array 
+    - Now parsing multiple dc:items into an array
     reference (at least inside an <item>):
         - http://rt.cpan.org/Public/Bug/Display.html?id=6000
     - Added the modules_as_arrays option to parse repeatable module elements
     into an array ref.
-        
 
-1.38 - November 27, 2008
+
+1.38    2008-11-27
     - Added support for duplicate items of RSS modules.
         - http://rt.cpan.org/Public/Bug/Display.html?id=4495
     - Added support for multiple Dublin Core elements. One can point
@@ -94,18 +119,18 @@ Revision history for Perl module XML::RSS
     an array reference instead of concatenating them together.
         - http://rt.cpan.org/Public/Bug/Display.html?id=40978
 
-1.37 - November 18, 2008
+1.37    2008-11-18
     - Extracted the common parts of parse() and parsefile() into one
     method (Refactoring - Shlomi Fish)
     - Incorporated a modified version of a patch from Simon Wistow to
     add support for the "xml:base" attribute.
-    - Renamed t/items-are-0.t into the more descriptive 
+    - Renamed t/items-are-0.t into the more descriptive
     t/test-generated-items.t , to highlight its significance and make
     it easier to notice.
     - Enabled backwards-compatibility mode for the "description" item
     to not become a hash-ref by default if xml:base is specified.
 
-1.36 - October 7, 2008
+1.36    2008-10-07
     - ->parse() now explicitly returns $self.
         - http://rt.cpan.org/Public/Bug/Display.html?id=34914
     - ->parsefile() now explicitly returns $self.
@@ -117,16 +142,16 @@ Revision history for Perl module XML::RSS
     - Small documentation patch: (add_item with dc:date)
         - http://rt.cpan.org/Ticket/Display.html?id=39780
 
-1.35 - September 13, 2008
-    - Added a Module::Build-based Build.PL so we'll have an easier time 
+1.35    2008-09-13
+    - Added a Module::Build-based Build.PL so we'll have an easier time
     with the META.yml and the Kwalitee.
     - Kwalitee - added "use warnings" to all Perl files.
         - now depending on at least perl-5.6.0.
     - Kwalitee - fixed the "use" statement of
     "Test::Run::CmdLine::Iface" to a runtime require.
 
-1.34 - September 12, 2008
-    - fixed a typo in the documentation of lib/XML/RSS.pm - 
+1.34    2008-09-12
+    - fixed a typo in the documentation of lib/XML/RSS.pm -
     "regardless" instead of "regarless".
         - http://rt.cpan.org/Public/Bug/Display.html?id=37916
         - (Reported by Reuben Thomas, Fixed by Shlomif).
@@ -135,12 +160,12 @@ Revision history for Perl module XML::RSS
         - http://rt.cpan.org/Public/Bug/Display.html?id=39231
         - (Reported by Dave, Fixed by Shlomif).
 
-1.33 - June 8, 2008
-    - Allowed the end-user to customise the _encode() routine in 
+1.33    2008-06-08
+    - Allowed the end-user to customise the _encode() routine in
     XML::RSS::Private::Output::Base from XML::RSS using the
     encode_cb key.
 
-1.32 - February 8, 2008
+1.32    2008-02-08
     - Fixed http://rt.cpan.org/Public/Bug/Display.html?id=25336 :
         - made sure the namespace specified elements can have a hash
         as a value in which case they'll be outputted as a standalone tag
@@ -150,55 +175,56 @@ Revision history for Perl module XML::RSS
         example in lib/XML/RSS.pm, per the comments in the bug report.
     - Fixed http://rt.cpan.org/Ticket/Display.html?id=24329#txn-296761 :
         - updated the URLs for information about RSS mentioned under
-        "=head1 DESCRIPTION", based on a Google search. 
+        "=head1 DESCRIPTION", based on a Google search.
         - (Shlomi Fish)
     - Fixed http://rt.cpan.org/Ticket/Display.html?id=33001 :
         - made sure that isPermalink is true if and only if the isPermalink
         attribute is "true". Not if it is non-existent, etc.
         - this modified the behaviour of the module.
 
-1.31 - June 29, 2007
+1.31    2007-06-29
     - Fixed the save() function to handle perl-5.6.x (and possibly below)
     where the ":encoding(...)" filehandle are not available (Shlomi Fish)
 
-1.30 - June 18, 2007
+1.30    2007-06-18
     - Same as 1.29_02 (from February 23, 2007)
     - Removed some methods that were not used.
     - Added more tests to increase the test coverage.
     - Fixed a bug where prefixes could be specified with invalid characters
       because there was a range (.-_) instead of three individual
       characters (.\-_).
-    - Many files were left in the distribution or Subversion repository 
+    - Many files were left in the distribution or Subversion repository
       that were executable but need not be. Made them non-executable.
     - Clean up examples/ directory and move generated files out of t/
-    - isPermaLink / guid fixes (RT#23983, Shlomi)
+    - isPerCould not parse Line '1.04 - Web Mar 03 20:49:43 2004' at /home/shlomif/bin/upgrade-to-CPAN-Changes line 40, <STDIN> line 271.
+maLink / guid fixes (RT#23983, Shlomi)
     - increased the test coverage of XML::RSS up to 100%. (Shlomif)
     - SECURITY BUG FIX: eliminated a markup injection vulnerability in the
       taxo:topics output of RSS 1.0. (Shlomif)
-    - Moved the append function, which is unused and cannot be effectively 
+    - Moved the append function, which is unused and cannot be effectively
       used, out of the main module and into the rejects directory inside
       the repository (but outside the module). (Shlomif)
     - Added POD for full POD coverage. (Shlomif)
     - Several other bug fixes. (Shlomif)
     - Heavy refactoring of the code. (Shlomif)
-    - perltidy configuration file; run perltidy on XML::RSS (and 
+    - perltidy configuration file; run perltidy on XML::RSS (and
       intentionally not on the tests) (ABH).
     - Removed the remaining tab characters. (Shlomif)
     - Fixed a bug in one of the tests. (Shlomif)
-    - Converted the rendering processes of the various RSS versions to 
+    - Converted the rendering processes of the various RSS versions to
       one class per RSS version and applied the "Convert Conditionals
       to Polymorphism" refactoring. (Shlomif)
     - Removed the languages hash which was completely unused. (Shlomif)
     - Converted the parsing routines to be methods of XML::RSS to increase
       modularity. XML::RSS no longer inherits from XML::Parser. (Shlomif)
     - Extracted several methods from the parsing stage. (Shlomif)
-    - Added a regression test to 
+    - Added a regression test to
       https://rt.cpan.org/Ticket/Display.html?id=24742   (Shlomif)
     - Tweaked the Makefile.PL Test::Run integration according to:
       http://www.nntp.perl.org/group/perl.qa/2006/11/msg7400.html
       (Shlomif)
 
-1.22 - December 17th, 2006 
+1.22    2006-12-17
     - Fix XML::Feed compatability. Make sure $item->{content} is always setup
       (broke in 1.20, RT#23822, Shlomi, Andreas J. Koenig)
     - Fix the tests to work on Win32 (RT#23752, Shlomi, Kenichi Ishigaki)
@@ -211,17 +237,17 @@ Revision history for Perl module XML::RSS
     - Don't fail the tests if Test::Pod::Coverage is missing
       (reported by Andreas J. Koenig)
 
-1.21 - December 5th, 2006
+1.21    2006-12-05
     - Support inserting a XSL stylesheet URL into the XML output
       (RT#11569, Jason A. Smith, Shlomi Fish)
     - Remove empty lines in the test_manifest - some versions of
       Test::Manifest doesn't do the right thing with
       those. (RT#23678, Hugo van der Sanden)
     - Add Pod::Coverage tests
-    - More Date Conversion (Shlomi) 
+    - More Date Conversion (Shlomi)
     - Fix for a Markup Injection Vulnerability (RT#23435, Shlomi)
 
-1.20 - November 10th, 2006
+1.20    2006-11-10
     - Value for $XML::RSS::modules gets destroyed (RT#18755, Shlomi)
       - Note that YOU CAN NO LONGER USE $XML::RSS::modules, you
            have to use the add_modules call as documented!
@@ -236,13 +262,13 @@ Revision history for Perl module XML::RSS
     - Add test to test regression of CPAN RT#5438 (Shlomi)
     - More tests...
 
-1.12 - October 25, 2006
+1.12    2006-10-25
     - Add more tests
     - make sure META.yml is correctly generated
     - Fix enclosure parsing (RT#7920, Tatsuhiko Miyagawa)
     - Incorrect entity encoding in XML output (RT#22467, reported by Stephen Hall)
 
-1.11 - October 19, 2006
+1.11    2006-10-19
     - use HTML::Entities instead of the "homegrown" entity encoding code
     - Minor doc fix (David Steinbrunner)
     - Fix encoding of the > char, added tests (RT#19420, Shlomi Fish)
@@ -252,135 +278,14 @@ Revision history for Perl module XML::RSS
     - use base instead of @ISA
     - Thanks to Shlomi Fish for helping sorting through the RT queue!
 
-1.10 - March 11, 2006
+1.10    2006-03-11
     - Module (for now) maintained by Ask Bjoern Hansen
     - Fixed category output in RSS 2.0 (RT#17303, Yasuhiro Onishi)
     - Update documentation with new Subversion server and bug tracking
     - Clean up distribution (tests, Makefile.PL, file locations, ...)
 
-1.05 - Thu Aug 12 20:54:31 2004
+1.05    2004-08-12
     - fixed version number
     - improved RSS 2.0 generation support
     - typo and documentation fixes
-    
-1.04 - Web Mar 03 20:49:43 2004
-    - update Changes to include changes for 1.03
-    
-1.03 - Web Mar 03 00:24:07 2004
-    - quell warnings when parsing RSS 0.9x, RSS 2.0
-   
-1.02 - Mon Feb 20 15:34:21 2003
-    - fixed bug in encode().  encode() did not respect CDATA
-      sections and would mangle them when encountered.  now behaves
-      properly (we hope) even when CDATA and #PCDATA are mixed
-      together liberally
-
-1.01 - Mon Feb  3 15:46:25 2003
-    * fixed bug with handle_char().  i (brian d foy) mis-diagnosed a
-    previous bug and broke handle_char() when what I should have done
-    was initialise the object for each call to parse*()
-
-    * if you have version 1.0, you should upgrade to this version, 1.01
-
-1.00 - Fri Jan 31 11:26:41 2003
-    * the as_string method now encodes special characters. valid output!
-    * a new "Auto Add" feature can add modules for namespaces found
-    while parsing (off by default)
-    * can output RSS 2.0, but not parse it yet
-    * this is the last major release in this track.  we are going to
-    completely rewrite XML::RSS as something more extendable.
-
-0.98_05 - Mon Jan 27 15:54:32 2003
-    * The auto add_feature is not controlled by the $AUTO_ADD variable
-    and is off by default
-    * removed the distribution tests now that it is ready to distribute
-
-0.98_04 - Fri Jan 17 20:00:29 2003
-    * the parse and parsefile routines now automatically add non-
-    standard namespace to the modules list
-
-0.98_03 - Fri Jan 17 19:22:20 2003
-    * changed the handle_char() routine to replace data rather than
-    append to existing data.  this takes care of the doubling problem
-    in the last issue.
- 
-    * set the RSS 2.0 namespace in the _initializer routine
- 
-    * all tests now pass.  if this works for people, it could turn into
-    a release candidate
-
-0.98_02 - Fri Jan 17 19:15:45 2003
-    * changed the handle_char() routine to replace data rather than
-    append to existing data.  this takes care of the doubling problem
-    in the last issue.
-
-    * set the RSS 2.0 namespace in the _initializer routine
-
-    * all tests now pass.  if this works for people, it could turn into
-    a release candidate
-
-0.98_02 - Fri Jan 17 15:47:29 2003
-    * added initial RSS 2.0 support
-    * first fix to properly encode special characters in output
-    * need to fix feature to add namespace (tests are TO DO)
-
-0.98 Tue Nov 12 05:45:36 CST 2002
-    - module taken over by brian d foy <bdfoy@cpan.org>
-    - module now in SourceForge (http://www.sourceforge.net/projects/perl-rss)
-    - added support for arbitrary namespaces (with defaults to the
-    usual suspects)
-    - fixed ommission of encoding with version 0.9 output
-
-0.97 Wed Mar 21 03:13:29 EST 2001
-    - added support for the Taxonomy module (taxo). It only works
-      inside the channel or item elements and only supports one
-      form of the module syntax. See the XML::RSS documentation
-      for examples.      
-
-0.96 Sat Mar 17 17:21:27 EST 2001
-     - fixed RSS 0.91 output. When the source file that is parsed was
-    1.0, it did not properly translate all of the dc elements to
-    0.91 channel elements.
-
-0.95 Sat Dec 23 11:28:03 EST 2000
-     - added support for including external namespaces and elements
-
-0.94 Sat Dec 16 12:42:21 EST 2000
-     - added support for RSS1.0 RC1 release
-     - added support for Syndication and Dublin Core modules
-
-
-0.9 Mon Aug 14 17:05:00 EDT 2000
-    - fixed DESTROY() error when using Perl 5.6
-    - added support for RSS 1.0 and rss091 namespace
-
-0.8 Mon Dec 27 03:42:27 EST 1999
-    - fixed shallow copy problem when working with multiple instances
-
-0.7 Wed Oct 20 22:41:05 EDT 1999
-    - parameters were not getting set unless the strict parameter was set 
-    - fixed spelling for managingEditor and webMaster
-
-0.6 - numerous minor bug fixes
-    - it no longer checks for size as specified by Netscape's RSS spec
-      unless otherwise specified
-
-0.5 - fixed handle_char method which croaked on cdata
-      that contained entities. Reported by 
-      Wojciech Zwiefka <wojtekz@cnt.pl>
-    - prettied up the output from rss2html.pl. It's
-      now more suitable for including news feeds on
-      a Web site. Also added ability to give local
-      filename or http URL.
-
-0.4 - removed extraneous print
-    - added stuff in examples/rss2html.pl
-
-0.3  Tue Aug 24 05:14:18 EDT 1999
-     - added support for RSS 0.91
-
-0.2  Sat Jul 24 21:12:22 EDT 1999
-     - added documentation
-
-0.1  Wed Jul  7 16:22:25 1999
-    - original version; created by h2xs 1.19
+
@@ -34,6 +34,7 @@ lib/XML/RSS/Private/Output/V1_0.pm
 lib/XML/RSS/Private/Output/V2_0.pm
 Makefile.PL
 MANIFEST
+META.json
 META.yml
 README
 t/0.91-parse.t
@@ -41,6 +42,7 @@ t/0.9-generate.t
 t/0.9-parse.t
 t/0.9-strict.t
 t/1.0-generate.t
+t/1.0-gen-errors-on-missing-fields.t
 t/1.0-parse-2.t
 t/1.0-parse-exotic.t
 t/1.0-parse.t
@@ -56,6 +58,7 @@ t/2.0-wo-title.t
 t/add-item-insert-vs-append.t
 t/auto_add_modules.t
 t/charset1.t
+t/cpan-changes.t
 t/data/1.0/rss1.0.exotic.rdf
 t/data/1.0/with_content.rdf
 t/data/2.0/empty-desc.rss
@@ -80,6 +83,7 @@ t/pod.t
 t/render-upon-init.t
 t/rss2-gt-encoding.t
 t/save-while-in-taint-mode.t
+t/style-trailing-space.t
 t/test-generated-items.t
 t/test_manifest
 t/version.t
@@ -0,0 +1,90 @@
+{
+   "abstract" : "creates and updates RSS files",
+   "author" : [
+      "Shlomi Fish <shlomif@cpan.org>"
+   ],
+   "dynamic_config" : 1,
+   "generated_by" : "Module::Build version 0.4205",
+   "keywords" : [
+      "feed",
+      "feeds",
+      "generate",
+      "generating",
+      "parse",
+      "parsing",
+      "rss",
+      "RSS",
+      "web-feed",
+      "web-feeds",
+      "xml"
+   ],
+   "license" : [
+      "perl_5"
+   ],
+   "meta-spec" : {
+      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
+      "version" : "2"
+   },
+   "name" : "XML-RSS",
+   "prereqs" : {
+      "build" : {
+         "requires" : {
+            "Test::Manifest" : "0.9",
+            "Test::More" : "0"
+         }
+      },
+      "configure" : {
+         "requires" : {
+            "Module::Build" : "0.36"
+         }
+      },
+      "runtime" : {
+         "requires" : {
+            "DateTime" : "0",
+            "DateTime::Format::Mail" : "0",
+            "DateTime::Format::W3CDTF" : "0",
+            "HTML::Entities" : "0",
+            "XML::Parser" : "2.23",
+            "perl" : "5.008"
+         }
+      }
+   },
+   "provides" : {
+      "XML::RSS" : {
+         "file" : "lib/XML/RSS.pm",
+         "version" : "1.55"
+      },
+      "XML::RSS::Private::Output::Base" : {
+         "file" : "lib/XML/RSS/Private/Output/Base.pm"
+      },
+      "XML::RSS::Private::Output::Roles::ImageDims" : {
+         "file" : "lib/XML/RSS/Private/Output/Roles/ImageDims.pm"
+      },
+      "XML::RSS::Private::Output::Roles::ModulesElems" : {
+         "file" : "lib/XML/RSS/Private/Output/Roles/ModulesElems.pm"
+      },
+      "XML::RSS::Private::Output::V0_9" : {
+         "file" : "lib/XML/RSS/Private/Output/V0_9.pm"
+      },
+      "XML::RSS::Private::Output::V0_91" : {
+         "file" : "lib/XML/RSS/Private/Output/V0_91.pm"
+      },
+      "XML::RSS::Private::Output::V1_0" : {
+         "file" : "lib/XML/RSS/Private/Output/V1_0.pm"
+      },
+      "XML::RSS::Private::Output::V2_0" : {
+         "file" : "lib/XML/RSS/Private/Output/V2_0.pm"
+      }
+   },
+   "release_status" : "stable",
+   "resources" : {
+      "homepage" : "http://perl-rss.sourceforge.net/",
+      "license" : [
+         "http://dev.perl.org/licenses/"
+      ],
+      "repository" : {
+         "url" : "https://github.com/shlomif/perl-XML-RSS"
+      }
+   },
+   "version" : "1.55"
+}
@@ -3,11 +3,12 @@ abstract: 'creates and updates RSS files'
 author:
   - 'Shlomi Fish <shlomif@cpan.org>'
 build_requires:
-  Test::Manifest: 0.9
-  Test::More: 0
+  Test::Manifest: '0.9'
+  Test::More: '0'
 configure_requires:
-  Module::Build: 0.36
-generated_by: 'Module::Build version 0.3617'
+  Module::Build: '0.36'
+dynamic_config: 1
+generated_by: 'Module::Build version 0.4205, CPAN::Meta::Converter version 2.140640'
 keywords:
   - feed
   - feeds
@@ -23,12 +24,12 @@ keywords:
 license: perl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
-  version: 1.4
+  version: '1.4'
 name: XML-RSS
 provides:
   XML::RSS:
     file: lib/XML/RSS.pm
-    version: 1.49
+    version: '1.55'
   XML::RSS::Private::Output::Base:
     file: lib/XML/RSS/Private/Output/Base.pm
   XML::RSS::Private::Output::Roles::ImageDims:
@@ -44,14 +45,14 @@ provides:
   XML::RSS::Private::Output::V2_0:
     file: lib/XML/RSS/Private/Output/V2_0.pm
 requires:
-  DateTime: 0
-  DateTime::Format::Mail: 0
-  DateTime::Format::W3CDTF: 0
-  HTML::Entities: 0
-  XML::Parser: 2.23
-  perl: 5.008
+  DateTime: '0'
+  DateTime::Format::Mail: '0'
+  DateTime::Format::W3CDTF: '0'
+  HTML::Entities: '0'
+  XML::Parser: '2.23'
+  perl: '5.008'
 resources:
   homepage: http://perl-rss.sourceforge.net/
   license: http://dev.perl.org/licenses/
-  repository: https://svn.perl.org/modules/XML-RSS/trunk
-version: 1.49
+  repository: https://github.com/shlomif/perl-XML-RSS
+version: '1.55'
@@ -25,7 +25,7 @@ if ($ExtUtils::MakeMaker::Version >= 6.36)
 
     sub test_via_harness {
         my($self, $perl, $tests) = @_;
-        
+
         return qq|\t$perl "-MTest::Manifest" | .
           qq|"-e" "run_t_manifest(\$(TEST_VERBOSE), '\$(INST_LIB)', | .
             qq|'\$(INST_ARCHLIB)')"\n|;
@@ -49,11 +49,11 @@ MAKE_FRAG
 WriteMakefile(
               'NAME'         => 'XML::RSS',
               'VERSION_FROM' => 'lib/XML/RSS.pm', # finds $VERSION,
-              'PREREQ_PM'    => { 
+              'PREREQ_PM'    => {
                                  'Test::Manifest'   => '0.9',
                                  'Test::More'       => '0',
-                                 'XML::Parser'      => '2.23', 
-                                 'HTML::Entities'   => 0, 
+                                 'XML::Parser'      => '2.23',
+                                 'HTML::Entities'   => 0,
                                  'DateTime' => 0,
                                  'DateTime::Format::Mail' => 0,
                                  'DateTime::Format::W3CDTF' => 0,
@@ -17,7 +17,7 @@ http://rt.cpan.org/Public/Dist/Display.html?Name=XML-RSS
 
 - fix skipHour and skipDay methods (bdf: what's wrong with them?)
 
-- rewrite for extendability (base class with a derived one for 
+- rewrite for extendability (base class with a derived one for
   each version)
 
 - auto encode text?
@@ -1,23 +1,23 @@
 <!--
 
   RDF Site Summary (RSS) 0.9 official DTD, proposed.
-  
+
   RSS is an XML/RDF vocabulary for describing
   metadata about websites, and enabling the display of
   "channels" on the "My Netscape" website.
-  
+
   RSS Info can be found at http://my.netscape.com/publish/
-  XML Info can be found at http://www.w3.org/XML/ 
+  XML Info can be found at http://www.w3.org/XML/
   RDF Info can be found at http://www.w3.org/RDF/
-  
+
   copyright Netscape Communications, 1999
 
   Dan Libby - danda@netscape.com
-  
+
   Based on RSS DTD originally created by
   Lars Marius Garshol - larsga@ifi.uio.no.
   $Id: rss-0.9.dtd,v 1.1.1.1 2002/11/12 07:48:15 comdog Exp $
-  
+
 -->
 
 <!ELEMENT rdf:RDF (channel | image? | item+ | textinput?)*>
@@ -40,9 +40,9 @@
      http://www.w3.org/TR/REC-html32.html#dtd
      =============== BEGIN ===================
 -->
-<!-- 
+<!--
      Character Entities for ISO Latin-1
-     
+
      (C) International Organization for Standardization 1986
      Permission to copy in any form is granted for use with
      conforming SGML systems and applications as defined in
@@ -151,7 +151,7 @@
     <!ENTITY yacute "&#253;"> <!-- small y, acute accent -->
     <!ENTITY thorn  "&#254;"> <!-- small thorn, Icelandic -->
     <!ENTITY yuml   "&#255;"> <!-- small y, dieresis or umlaut mark -->
-    
+
 <!--
      Copied from HTML 3.2 DTD, with modifications (removed CDATA)
      http://www.w3.org/TR/REC-html32.html#dtd
@@ -13,54 +13,54 @@ xmlns="http://my.netscape.com/rdf/simple/0.9/">
     <url>http://slashdot.org/images/slashdotlg.gif</url>
     <link>http://slashdot.org</link>
   </image>
-  
+
   <item>
     <title>Red Hat Tightening Trademarks?</title>
     <link>http://slashdot.org/articles/99/09/01/0943219.shtml</link>
   </item>
-  
+
   <item>
     <title>Scientists map schematic of brain's fibers</title>
     <link>http://slashdot.org/articles/99/09/01/1429226.shtml</link>
   </item>
-  
+
   <item>
     <title>More Mission-Critical Linux</title>
     <link>http://slashdot.org/articles/99/09/01/1827215.shtml</link>
   </item>
-  
+
   <item>
     <title>Amiga's president unexpectedly resigns</title>
     <link>http://slashdot.org/articles/99/09/01/1856251.shtml</link>
   </item>
-  
+
   <item>
     <title>XFree86 3.3.5 released</title>
     <link>http://slashdot.org/articles/99/09/01/0716233.shtml</link>
   </item>
-  
+
   <item>
     <title>GT Interactive Sued for piracy</title>
     <link>http://slashdot.org/articles/99/09/01/1347204.shtml</link>
   </item>
-  
+
   <item>
     <title>ProjectUDI spec goes 1.0</title>
     <link>http://slashdot.org/articles/99/09/01/1430242.shtml</link>
   </item>
-  
+
   <item>
     <title>Chad Davis May Be the Next Kevin Mitnick</title>
     <link>http://slashdot.org/articles/99/09/01/1547226.shtml</link>
   </item>
-  
+
   <item>
     <title>Clearing up FreeBSD confusion</title>
     <link>http://slashdot.org/articles/99/09/01/141247.shtml</link>
   </item>
-  
+
   <item>
     <title>Linuxcare and Sun partner on StarOffice for Linux</title>
     <link>http://slashdot.org/articles/99/09/01/1333220.shtml</link>
   </item>
-</rdf:RDF>
\ No newline at end of file
+</rdf:RDF>
@@ -9,7 +9,7 @@ use XML::RSS;
 my $rss = XML::RSS->new (version => "0.91") ;
 $rss->channel(title       => "freshmeat.net",
 	      link        => "http://freshmeat.net",
-	      language    => "en", 
+	      language    => "en",
 	      description => "the one-stop-shop for all your Linux software needs",
 	      );
 
@@ -17,7 +17,7 @@ $rss->strict("1");
 
 $rss->channel(title          => 'freshmeat.net',
 	      link           => 'http://freshmeat.net',
-	      language       => 'en', 
+	      language       => 'en',
 	      description    => 'the one-stop-shop for all your Linux software needs',
 	      rating         => '(PICS-1.1 "http://www.classify.org/safesurf/" 1 r (SS~~000 1))',
 	      copyright      => 'Copyright 1999, Freshmeat.net',
@@ -1,22 +1,22 @@
 <!--
 
   Rich Site Summary (RSS) 0.91 official DTD, proposed.
-  
+
   RSS is an XML vocabulary for describing
   metadata about websites, and enabling the display of
   "channels" on the "My Netscape" website.
-  
+
   RSS Info can be found at http://my.netscape.com/publish/
-  XML Info can be found at http://www.w3.org/XML/ 
-  
+  XML Info can be found at http://www.w3.org/XML/
+
   copyright Netscape Communications, 1999
 
   Dan Libby - danda@netscape.com
-  
+
   Based on RSS DTD originally created by
   Lars Marius Garshol - larsga@ifi.uio.no.
   $Id: rss-0.91.dtd,v 1.1.1.1 2002/11/12 07:48:15 comdog Exp $
-  
+
 -->
 
 <!ELEMENT rss (channel)>
@@ -52,9 +52,9 @@
      http://www.w3.org/TR/REC-html32.html#dtd
      =============== BEGIN ===================
 -->
-<!-- 
+<!--
      Character Entities for ISO Latin-1
-     
+
      (C) International Organization for Standardization 1986
      Permission to copy in any form is granted for use with
      conforming SGML systems and applications as defined in
@@ -163,7 +163,7 @@
     <!ENTITY yacute "&#253;"> <!-- small y, acute accent -->
     <!ENTITY thorn  "&#254;"> <!-- small thorn, Icelandic -->
     <!ENTITY yuml   "&#255;"> <!-- small y, dieresis or umlaut mark -->
-    
+
 <!--
      Copied from HTML 3.2 DTD, with modifications (removed CDATA)
      http://www.w3.org/TR/REC-html32.html#dtd
@@ -37,10 +37,10 @@ my $rss = XML::RSS->new (version => '1.0');
    dc => {
      creator  => "G. Raphics (graphics at freshmeat.net)",
    },
- ); 
+ );
 
 $rss->add_item(
-   title       => "GTKeyboard 0.85",  
+   title       => "GTKeyboard 0.85",
    link        => "http://freshmeat.net/news/1999/06/21/930003829.html",
    description => "GTKeyboard is a graphical keyboard that ...",
    dc => {
@@ -1,7 +1,7 @@
 #!/usr/bin/perl -w
 # this script adds a new item to an existing rss file and
 # updates the channel date and publisher
- 
+
 use XML::RSS;
 
 # create a new instance of the XML::RSS
@@ -12,7 +12,7 @@ $rss->parsefile("rss1.0.rdf");
 
 # add a new item to the file
 $rss->add_item(
-   title       => "QScheme 0.2.2",  
+   title       => "QScheme 0.2.2",
    link        => "http://freshmeat.net/news/1999/06/21/930003829.html",
    description => "Really fast, small and easy to interface Scheme interpreter",
    dc => {
@@ -24,7 +24,7 @@ $rss->add_item(
 # update the dublin core information for the channel
 $rss->channel(dc => {
 		 date => "2000-01-01T12:00+00:00",
-		 publisher => "Jonathan Eisenzopf (eisen\@xif.com)" 
+		 publisher => "Jonathan Eisenzopf (eisen\@xif.com)"
 		    }
              );
 
@@ -29,7 +29,7 @@
 			                        <dc:date.Taken>2008-12-04T13:02:12-08:00</dc:date.Taken>
             			<author flickr:profile="http://www.flickr.com/people/shlomif/">nobody@flickr.com (shlomif2)</author>
 			<guid isPermaLink="false">tag:flickr.com,2004:/photo/3081446735</guid>
-                            			<media:content url="http://farm4.static.flickr.com/3043/3081446735_6ea84a6e37_o.png" 
+                            			<media:content url="http://farm4.static.flickr.com/3043/3081446735_6ea84a6e37_o.png"
 				       type="image/jpeg"
 				       height="859"
 				       width="1066"/>
@@ -54,7 +54,7 @@ The licence is Creative Commons Public Domain, but an attribution or donation wo
 			                        <dc:date.Taken>2008-11-23T15:04:42-08:00</dc:date.Taken>
             			<author flickr:profile="http://www.flickr.com/people/shlomif/">nobody@flickr.com (shlomif2)</author>
 			<guid isPermaLink="false">tag:flickr.com,2004:/photo/3059592974</guid>
-                            			<media:content url="http://farm4.static.flickr.com/3272/3059592974_ec763dd5c7_o.jpg" 
+                            			<media:content url="http://farm4.static.flickr.com/3272/3059592974_ec763dd5c7_o.jpg"
 				       type="image/jpeg"
 				       height="2304"
 				       width="3072"/>
@@ -45,7 +45,7 @@
       <title>Seventh Heaven! Ryan Hurls Another No Hitter</title>
       <link>http://dallas.example.com/1991/05/02/nolan.htm</link>
       <description>Texas Rangers pitcher Nolan Ryan hurled the seventh no-hitter of his legendary career on Arlington Appreciation Night, defeating the Toronto Blue Jays 3-0. The 44-year-old struck out 16 batters before a crowd of 33,439.</description>
-      <guid>http://dallas.example.com/1991/05/02/nolan.htm</guid>      
+      <guid>http://dallas.example.com/1991/05/02/nolan.htm</guid>
     </item>
     <item>
       <author>jbb@dallas.example.com (Joe Bob Briggs)</author>
@@ -64,8 +64,8 @@
       <guid isPermaLink="false">tag:dallas.example.com,4131:news</guid>
     </item>
     <item>
-      <description><![CDATA[I'm headed for France. I wasn't gonna go this year, but then last week <a href="http://www.imdb.com/title/tt0086525/">Valley Girl</a> came out and I said to myself, Joe Bob, you gotta get out of the country for a while.]]></description>      
+      <description><![CDATA[I'm headed for France. I wasn't gonna go this year, but then last week <a href="http://www.imdb.com/title/tt0086525/">Valley Girl</a> came out and I said to myself, Joe Bob, you gotta get out of the country for a while.]]></description>
       <guid isPermaLink="false">1983-05-06+lifestyle+joebob+2</guid>
-    </item>    
+    </item>
   </channel>
-</rss>
\ No newline at end of file
+</rss>
@@ -26,5 +26,5 @@ print $rss->as_string;
 
 sub syntax {
     die "Syntax: convert.pl <file.rss> <version>\n    ex: convert.pl fm.rdf 1.0\n\n";
-}   
+}
 
@@ -80,7 +80,7 @@ HTML
     if ($rss->{'textinput'}->{'title'}) {
 	print <<"HTML";
 <form method="get" action="$rss->{'textinput'}->{'link'}">
-$rss->{'textinput'}->{'description'}<BR> 
+$rss->{'textinput'}->{'description'}<BR>
 <input type="text" name="$rss->{'textinput'}->{'name'}"><BR>
 <input type="submit" value="$rss->{'textinput'}->{'title'}">
 </form>
@@ -62,7 +62,7 @@ sub do_test_run_tests
         Test::Run::CmdLine::Iface->new(
             {
                 'test_files' => $self->find_test_files(),
-            }   
+            }
             # 'backend_params' => $self->_get_backend_params(),
         );
 
@@ -72,7 +72,7 @@ sub do_test_run_tests
 sub ACTION_tags
 {
     my $self = shift;
-    return 
+    return
         $self->do_system(
             "ctags",
             qw(-f tags --recurse --totals
@@ -44,6 +44,18 @@ sub _encode_cb {
     return $self->{_encode_cb};
 }
 
+sub _item_idx
+{
+    my $self = shift;
+
+    if (@_)
+    {
+        $self->{_item_idx} = shift;
+    }
+
+    return $self->{_item_idx};
+}
+
 sub _initialize {
     my $self = shift;
     my $args = shift;
@@ -59,6 +71,8 @@ sub _initialize {
         $self->_encode_cb(\&_default_encode);
     }
 
+    $self->_item_idx(-1);
+
     return 0;
 }
 
@@ -112,7 +126,7 @@ sub _out_tag {
     my $attr    = "";
     if (ref($inner) eq 'HASH') {
         my %inner_copy = %$inner;
-        $content = delete $inner_copy{content}; 
+        $content = delete $inner_copy{content};
         foreach my $key (keys %inner_copy) {
             my $value = $inner->{$key};
             if (defined($value)) {
@@ -144,7 +158,7 @@ sub _out_ns_tag {
         foreach my $attr (sort { $a cmp $b } keys(%{$inner}))
         {
             $self->_out(
-                  q{ } 
+                  q{ }
                 . $self->_sanitize($attr)
                 . q{="}
                 . $self->_encode($inner->{$attr})
@@ -242,9 +256,9 @@ sub _get_top_elem_about {
 
 sub _start_top_elem {
     my ($self, $tag, $about_sub) = @_;
-    
+
     my $about = $self->_get_top_elem_about($tag, $about_sub);
-    
+
     return $self->_out("<$tag$about>\n");
 }
 
@@ -261,7 +275,7 @@ sub _output_complete_textinput {
     my $master_tag = $self->_get_textinput_tag();
 
     if (defined(my $link = $self->textinput('link'))) {
-        $self->_start_top_elem($master_tag, 
+        $self->_start_top_elem($master_tag,
             sub { $link }
         );
 
@@ -497,9 +511,22 @@ sub _out_item_desc {
 sub _output_common_item_tags {
     my ($self, $item) = @_;
 
+    my @fields = (qw( title link ));
+
+    my $defined = $self->_get_item_defined;
+
+    if (! $defined) {
+        foreach my $f (@fields)
+        {
+            if (!defined($item->{$f})) {
+                die qq/Item No. / . $self->_item_idx() . qq/ is missing the "$f" field./;
+            }
+        }
+    }
+
     $self->_output_multiple_tags(
-        {ext => $item, 'defined' => $self->_get_item_defined},
-        [qw(title link)],);
+        {ext => $item, type => 'item', idx => $self->_item_idx(), 'defined' => $defined,},
+        [@fields],);
 
     $self->_out_item_desc($item);
 
@@ -662,7 +689,7 @@ sub _out_module_prefix_elements_hash
     my $prefix = $args->{prefix};
     my $data = $args->{data};
     my $url = $args->{url};
-    
+
     while (my ($el, $value) = each(%$data)) {
         $self->_out_module_prefix_pair(
             {
@@ -682,7 +709,7 @@ sub _out_module_prefix_pair
 
     my $prefix = $args->{prefix};
     my $url = $args->{url};
-    
+
     my $el = $args->{el};
     my $value = $args->{val};
 
@@ -747,7 +774,7 @@ sub _out_modules_elements {
     # Ad-hoc modules
     while (my ($url, $prefix) = each %{$self->_modules}) {
         next if $prefix =~ /^(dc|syn|taxo)$/;
-        
+
         $self->_out_module_prefix_elements(
             {
                 prefix => $prefix,
@@ -849,11 +876,22 @@ sub _out_seq_items {
     # Seq items
     $self->_out("<items>\n <rdf:Seq>\n");
 
+    my $idx = 0;
     foreach my $item (@{$self->_main->_get_items()}) {
+
+        my $about_text = $self->_get_item_about($item);
+
+        if (!defined($about_text)) {
+            die qq/Item No. $idx is missing "about" or "link" fields./;
+        }
+
         $self->_out('  <rdf:li rdf:resource="' .
-            $self->_encode($self->_get_item_about($item)) .
+            $self->_encode($about_text) .
             '" />' . "\n");
     }
+    continue {
+        $idx++;
+    }
 
     $self->_out(" </rdf:Seq>\n</items>\n");
 }
@@ -871,7 +909,7 @@ sub _get_rdf_decl_mappings
     return
     [
         $self->_get_first_rdf_decl_mappings(),
-        map { [$modules->{$_}, $_] } keys(%$modules)
+        sort { $a->[0] cmp $b->[0] } map { [$modules->{$_}, $_] } keys(%$modules)
     ];
 }
 
@@ -879,14 +917,14 @@ sub _render_xmlns {
     my ($self, $prefix, $url) = @_;
 
     my $pp = defined($prefix) ? ":$prefix" : "";
-    
+
     return qq{ xmlns$pp="$url"\n};
 }
 
 sub _get_rdf_xmlnses {
     my $self = shift;
 
-    return 
+    return
         join("",
             map { $self->_render_xmlns(@$_) }
             @{$self->_get_rdf_decl_mappings}
@@ -1000,9 +1038,13 @@ sub _output_single_item {
 sub _output_items {
     my $self = shift;
 
+    $self->_item_idx(0);
     foreach my $item (@{$self->_get_filtered_items}) {
         $self->_output_single_item($item);
     }
+    continue {
+        $self->_item_idx($self->_item_idx()+1);
+    }
 }
 
 sub _output_main_elements {
@@ -1087,7 +1129,7 @@ sub _out_dates {
 sub _out_def_chan_tag {
     my ($self, $tag) = @_;
     return $self->_output_multiple_tags(
-        {ext => "channel", 'defined' => 1}, 
+        {ext => "channel", 'defined' => 1},
         [ $tag ],
     );
 }
@@ -16,7 +16,7 @@ use vars qw($VERSION $AUTOLOAD @ISA $AUTO_ADD);
 
 require 5.008;
 
-$VERSION = '1.49';
+$VERSION = '1.55';
 
 $AUTO_ADD = 0;
 
@@ -463,7 +463,7 @@ sub _get_encode_cb_params
 {
     my $self = shift;
 
-    return 
+    return
         defined($self->{encode_cb}) ?
             ("encode_cb" => $self->{encode_cb}) :
             ()
@@ -625,7 +625,7 @@ sub _is_rdf_resource {
     {
         $ns = $self->_parser->namespace($el);
     }
-    
+
     return (
            exists($self->_rdf_resource_fields->{ $ns })
         && exists($self->_rdf_resource_fields->{ $ns }{ $el })
@@ -922,7 +922,7 @@ sub _handle_start {
     my $parser = $self->_parser;
 
     my ($el_ns, $el_verdict) = $self->_get_elem_namespace($el);
-    
+
     if ($el eq "image")
     {
         if (exists($attribs{'resource'}))
@@ -1023,7 +1023,7 @@ sub _handle_start {
     }
     elsif ($el eq 'guid') {
         $self->_last_item->{'isPermaLink'} =
-          (exists($attribs{'isPermaLink'}) && 
+          (exists($attribs{'isPermaLink'}) &&
               (lc($attribs{'isPermaLink'}) eq 'true')
           );
 
@@ -1032,7 +1032,7 @@ sub _handle_start {
     }
     elsif (
            $self->_current_element eq "item"
-        && (($el eq "category") || 
+        && (($el eq "category") ||
             (
                    exists($self->{modules}->{$el_ns})
                 && ($self->{modules}->{$el_ns} eq "dc")
@@ -1071,8 +1071,8 @@ sub _handle_start {
     }
 
     # beginning of a channel element that stores its info in rdf:resource
-    elsif ( $parser->namespace($el) 
-        && $self->_is_rdf_resource($el) 
+    elsif ( $parser->namespace($el)
+        && $self->_is_rdf_resource($el)
         && $self->_current_element eq 'channel')
     {
         my $ns = $parser->namespace($el);
@@ -1145,7 +1145,7 @@ sub _handle_start {
     }
     elsif ($self->_start_array_element("image", $el)) {
         # Do nothing - already done in the predicate.
-    }    
+    }
     elsif (($el eq "category") &&
         (!$parser->within_element("item")) &&
         $self->_start_array_element("channel", $el)) {
@@ -1156,7 +1156,7 @@ sub _handle_start {
            {
         # Make sure an opening tag signifies that the element has been
         # encountered.
-        if (   exists($self->{'channel'}->{$el}) 
+        if (   exists($self->{'channel'}->{$el})
             && (!defined($self->{'channel'}->{$el})))
         {
             $self->{'channel'}->{$el} = "";
@@ -1268,7 +1268,7 @@ sub _get_parser {
                 $self->_parser(undef);
             },
         }
-    );    
+    );
 }
 
 sub _parse_options {
@@ -1348,7 +1348,7 @@ sub _untaint {
     my $self = shift;
 
     my $value = shift;
-    
+
     my ($untainted) = ($value =~ m{(.*)}s);
 
     return $untainted;
@@ -1605,7 +1605,7 @@ XML::RSS - creates and updates RSS files
         enclosure   => { url=>$url, type=>"application/x-bittorrent" },
         description => 'blah blah'
 );
- 
+
  $rss->textinput(title => "quick finder",
                  description => "Use the text input below to search freshmeat",
                  name  => "query",
@@ -1648,7 +1648,7 @@ XML::RSS - creates and updates RSS files
 
  while (@{$rss->{'items'}} >= 15)
  {
-     pop(@{$rss->{'items'});
+     shift (@{ $rss->{'items'} });
  }
 
  $rss->add_item(title => "MpegTV Player (mtv) 1.0.9.7",
@@ -1680,7 +1680,7 @@ site from sources like Slashdot and Freshmeat or if you want to syndicate
 your own content.
 
 XML::RSS currently supports 0.9, 0.91, and 1.0 versions of RSS.
-See http://backend.userland.com/rss091 for information on RSS 0.91. 
+See http://backend.userland.com/rss091 for information on RSS 0.91.
 See http://www.purplepages.ie/RSS/netscape/rss0.90.html for RSS 0.9.
 See http://web.resource.org/rss/1.0/ for RSS 1.0.
 
@@ -1688,10 +1688,10 @@ RSS was originally developed by Netscape as the format for
 Netscape Netcenter channels, however, many Web sites have since
 adopted it as a simple syndication format. With the advent of RSS 1.0,
 users are now able to syndication many different kinds of content
-including news headlines, threaded measages, products catalogs, etc.
+including news headlines, threaded messages, products catalogs, etc.
 
 B<Note:> In order to parse and generate dates (such as C<pubDate>
-and C<dc:date>) it is recommended to use L<DateTime::Format::Mail> and 
+and C<dc:date>) it is recommended to use L<DateTime::Format::Mail> and
 L<DateTime::Format::W3CDTF> , which is what L<XML::RSS> uses internally
 and requires.
 
@@ -1761,7 +1761,7 @@ be more the 40 characters, the B<link> 500, and the B<description>
 are required for RSS 1.0. B<language> is required for RSS 0.91.
 The other parameters are optional for RSS 0.91 and 1.0.
 
-To retreive the values of the channel, pass the name of the value
+To retrieve the values of the channel, pass the name of the value
 (title, link, or description) as the first and only argument
 like so:
 
@@ -1780,8 +1780,8 @@ is for B<channel()>.
 
 =item parse ($string, \%options)
 
-Parses an RDF Site Summary which is passed into B<parse()> as the first 
-parameter. Returns the instance of the object so one can say 
+Parses an RDF Site Summary which is passed into B<parse()> as the first
+parameter. Returns the instance of the object so one can say
 C<< $rss->parse($string)->other_method() >>.
 
 See the add_module() method for instructions on automatically adding
@@ -1810,9 +1810,9 @@ compatibility.
 
 =item * modules_as_arrays
 
-This option when true, will parse the modules key-value-pairs as an arrayref of 
+This option when true, will parse the modules key-value-pairs as an arrayref of
 C<<< { el => $key_name, value => $value, } >>> hash-refs to gracefully
-handle duplicate items (see below). It will not affect the known modules such 
+handle duplicate items (see below). It will not affect the known modules such
 as dc ("Dublin Core").
 
 =back
@@ -1851,13 +1851,13 @@ to a program on a Web server via an HTML form. B<name> is the HTML form name
 and B<link> is the URL to the program. Content is submitted using the GET
 method.
 
-Access to the B<textinput> values is the the same as B<channel()> and
+Access to the B<textinput> values is the same as B<channel()> and
 B<image()>.
 
 =item add_module(prefix=>$prefix, uri=>$uri)
 
 Adds a module namespace declaration to the XML::RSS object, allowing you
-to add modularity outside of the the standard RSS 1.0 modules.  At present,
+to add modularity outside of the standard RSS 1.0 modules.  At present,
 the standard modules Dublin Core (dc) and Syndication (syn) are predefined
 for your convenience. The Taxonomy (taxo) module is also internally supported.
 
@@ -1904,7 +1904,7 @@ one after the other. For example:
     $rss->add_item (
         title => $title,
         link => $link,
-        dc => { 
+        dc => {
             subject=> ["Jungle", "Desert", "Swamp"],
             creator=>$creator,
             date=>$date
@@ -1940,8 +1940,8 @@ Then proceed as usual:
 
   $rss->add_item (title=>$title, link=>$link, my=>{ rating=>$rating });
 
-You can also set the value of the module's prefix to an array reference 
-of C<<< { el => , val => } >>> hash-references, in which case duplicate 
+You can also set the value of the module's prefix to an array reference
+of C<<< { el => , val => } >>> hash-references, in which case duplicate
 elements are possible:
 
   $rss->add_item(title=>$title, link=>$link, my=> [
@@ -2036,17 +2036,16 @@ parameter to diff.
 
 =head1 SOURCE AVAILABILITY
 
-The source is available from the perl.org Subversion server:
-
-L<http://svn.perl.org/modules/XML-RSS/>
+The source is available from the GitHub repository:
 
+L<https://github.com/shlomif/perl-XML-RSS>
 
 =head1 AUTHOR
 
 Original code: Jonathan Eisenzopf <eisen@pobox.com>
 
-Further changes: Rael Dornfest <rael@oreilly.com>, Ask Bjoern Hansen 
-<ask@develooper.com> 
+Further changes: Rael Dornfest <rael@oreilly.com>, Ask Bjoern Hansen
+<ask@develooper.com>
 
 Currently: Shlomi Fish <shlomif@cpan.org>
 
@@ -32,36 +32,36 @@ sub item_throws_like
         );
 
     # TEST
-    item_throws_like($rss, [link => "http://foobar.tld/from/"], 
+    item_throws_like($rss, [link => "http://foobar.tld/from/"],
         qr{\Atitle and link elements are required},
         "strict - checking for exception on non-specified title"
     );
 
     # TEST
-    item_throws_like($rss, [title => "From Foobar"], 
+    item_throws_like($rss, [title => "From Foobar"],
         qr{\Atitle and link elements are required},
         "strict - checking for exception on non-specified link"
     );
 
     # TEST
-    item_throws_like($rss, [link => "http://foobar.tld/", 
-        title => ("Very long title indeed" x 50)], 
+    item_throws_like($rss, [link => "http://foobar.tld/",
+        title => ("Very long title indeed" x 50)],
         qr{\Atitle cannot exceed},
         "strict - checking for long title"
     );
 
     # TEST
     item_throws_like($rss, [
-        link => "http://" . ("foobarminimoni" x 200) . ".tld/", 
+        link => "http://" . ("foobarminimoni" x 200) . ".tld/",
         title => "Short Title"
-        ], 
+        ],
         qr{\Alink cannot exceed},
         "strict - checking for long link"
     );
 
     # TEST
     item_throws_like($rss, [
-        link => "http://foobar.tld/from/", 
+        link => "http://foobar.tld/from/",
         title => "Short Title",
         description => ("This description is way too long!" x 100),
         ],
@@ -91,7 +91,7 @@ sub item_throws_like
 
     # TEST
     item_throws_like($rss, [
-        link => "http://foobar.tld/from/", 
+        link => "http://foobar.tld/from/",
         title => "Short Title",
         description => "Good description",
         ],
@@ -167,7 +167,7 @@ sub item_throws_like
         "freshmeat.net",
         "Testing for an AUTOLOAD accessor with 0 arguments"
     );
-    
+
     # TEST
     is ($rss->channel('title'),
         "freshmeat.net",
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2;
+
+use XML::RSS;
+
+{
+    eval
+    {
+        my $rss = XML::RSS->new( version => '1.0' );
+
+        $rss->add_item(
+            # title =>  "Some text",
+            link  => 'http://a.com',
+            description => 'abc',
+        );
+        $rss->as_string;
+    };
+
+    my $Err = $@;
+
+    my $s = 'Item No. 0 is missing the "title" field.';
+
+    # TEST
+    like ($Err, qr/\A\Q$s\E/, "Exception on missing title field");
+}
+
+{
+    eval
+    {
+        my $rss = XML::RSS->new( version => '1.0' );
+
+        $rss->add_item(
+            title =>  "Some text",
+            # link  => 'http://a.com',
+            description => 'abc',
+        );
+        $rss->as_string;
+    };
+
+    my $Err = $@;
+
+    my $s = 'Item No. 0 is missing "about" or "link" fields.';
+
+    # TEST
+    like ($Err, qr/\A\Q$s\E/, "Exception on missing link field");
+}
@@ -12,7 +12,7 @@ use constant DATE_TEMPLATE_LONG  => "%Y-%m-%dT%H:%M:%S%z";
 use constant DATE_TEMPLATE_SHORT => "%Y/%m/%d";
 use constant DATE_TEMPLATE_PUB   => "%c GMT";
 
-my ($current_date, $short_date, $pub_date); 
+my ($current_date, $short_date, $pub_date);
 
 BEGIN {
   $current_date = &POSIX::strftime(DATE_TEMPLATE_LONG, gmtime);
@@ -135,7 +135,7 @@ cmp_ok($rss->{'xml:base'}, "eq", RSS_XML_BASE, "Base is still ".RSS_XML_BASE);
 # 20
 cmp_ok(ref($rss->{'items'}),"eq","ARRAY","RSS object has an array of objects");
 
-# 21 
+# 21
 cmp_ok(scalar(@{$rss->{'items'}}),"==",1,"RSS object has one item");
 
 # 22
@@ -144,7 +144,7 @@ cmp_ok($rss->{items}->[0]->{title},"eq",RSS_ITEM_TITLE,RSS_ITEM_TITLE);
 # 23
 cmp_ok($rss->{items}->[0]->{link},"eq",RSS_ITEM_LINK,RSS_ITEM_LINK);
 
-# 24 
+# 24
 cmp_ok($rss->{items}->[0]->{description},"eq",RSS_ITEM_DESC,RSS_ITEM_DESC);
 
 # 25
@@ -15,7 +15,7 @@ use XML::RSS;
         my $item = $rss->{items}->[0];
 
         # TEST
-        is ($item->{dc}->{creator}, "merlyn", 
+        is ($item->{dc}->{creator}, "merlyn",
             "item[0]/dc/creator in RSS 1.0"
         );
 
@@ -40,7 +40,7 @@ use XML::RSS;
         my $item = $rss->{items}->[0];
 
         # TEST
-        is ($item->{dc}->{creator}, "merlyn", 
+        is ($item->{dc}->{creator}, "merlyn",
             "item[0]/dc/creator in RSS 1.0"
         );
 
@@ -83,7 +83,7 @@ use XML::RSS;
             File::Spec->curdir(), "examples", "1.0", "rss1.0.rdf",
         )
     );
-    
+
     # TEST
     is (
         $rss->image("rdf:resource"),
@@ -16,15 +16,20 @@ use XML::RSS;
     $rss->{output} = "2.0";
     my $string = $rss->as_string;
 
+    # DateTime::Format::Mail emits +0000 starting from version 0.400
+    # and -0000 on older versions so we need to accomodate for that.
+    #
     # TEST
-    ok (index($string, q{<lastBuildDate>Sat, 14 Oct 2006 21:15:36 -0000</lastBuildDate>}) >= 0,
+    like ($string,
+        qr{<lastBuildDate>Sat, 14 Oct 2006 21:15:36 [+-]0000</lastBuildDate>},
         "Correct date was found",
     );
 
     # TEST
-    ok (index($string, q{<pubDate>Sat, 14 Oct 2006 21:15:36 -0000</pubDate>}) >= 0,
+    like ($string,
+        qr{<pubDate>Sat, 14 Oct 2006 21:15:36 [+-]0000</pubDate>},
         "Correct pubDate was found",
-    );    
+    );
 }
 
 {
@@ -34,9 +39,10 @@ use XML::RSS;
     $rss->{output} = "0.91";
     my $string = $rss->as_string;
 
-    my $index = index($string, qq{<pubDate>Sat, 14 Oct 2006 21:15:36 -0000</pubDate>\n<lastBuildDate>Sat, 14 Oct 2006 21:15:36 -0000</lastBuildDate>\n});
     # TEST
-    ok ($index >= 0,
+    like(
+        $string,
+        qr{<pubDate>Sat, 14 Oct 2006 21:15:36 [+-]0000</pubDate>\n<lastBuildDate>Sat, 14 Oct 2006 21:15:36 [+-]0000</lastBuildDate>\n},
         "Correct date was found in 1.0 -> 0.91 conversion",
     );
 }
@@ -38,7 +38,7 @@ isa_ok( $rss, "XML::RSS" );
 is( $rss->{'version'},  RSS_VERSION,  'Version is ' . RSS_VERSION );
 is( $rss->{'xml:base'}, RSS_XML_BASE, 'Base is ' . RSS_XML_BASE );
 
-# This includes all fields, only title, link, and description 
+# This includes all fields, only title, link, and description
 # are required.
 
 ok( $rss->channel(
@@ -110,7 +110,7 @@ my $file_contents;
     $file_contents = <I>;
     close(I);
 }
- 
+
 is($file_contents,$as_string,RSS_SAVEAS." contains the as_string() result");
 
 
@@ -43,7 +43,7 @@ use File::Spec;
 EOF
 
     # TEST
-    is ($rss->{textinput}->{link}, "http://www.topix.net/search/", 
+    is ($rss->{textinput}->{link}, "http://www.topix.net/search/",
         "Testing for textinput link"
     );
 
@@ -58,7 +58,7 @@ EOF
 
     $rss->parsefile(
         File::Spec->catfile(
-            File::Spec->curdir(), 
+            File::Spec->curdir(),
             "examples",
             "2.0",
             "rss-2.0-sample-from-rssboard-multiple-skip-days-and-hours.xml"
@@ -67,7 +67,7 @@ EOF
 
     # TEST
     is_deeply(
-        $rss->{'skipHours'}->{'hour'}, 
+        $rss->{'skipHours'}->{'hour'},
         [qw(0 1 2 22 23)],
         "skipHours/hour is parsed into an array with the individual elements",
     );
@@ -92,7 +92,7 @@ EOF
 
     $rss->parsefile(
         File::Spec->catfile(
-            File::Spec->curdir(), 
+            File::Spec->curdir(),
             "t", "data", "2.0",
             "sf-hs-with-pubDate.rss"
         ),
@@ -100,7 +100,7 @@ EOF
 
     # TEST
     is_deeply(
-        $rss->{'items'}->[0]->{'category'}, 
+        $rss->{'items'}->[0]->{'category'},
         [qw(
             mathml
             mathematics
@@ -121,7 +121,7 @@ EOF
 
     $rss->parsefile(
         File::Spec->catfile(
-            File::Spec->curdir(), 
+            File::Spec->curdir(),
             "t", "data", "2.0",
             "no-desc.rss",
         ),
@@ -143,7 +143,7 @@ EOF
 
     $rss->parsefile(
         File::Spec->catfile(
-            File::Spec->curdir(), 
+            File::Spec->curdir(),
             "t", "data", "2.0",
             "empty-desc.rss",
         ),
@@ -167,7 +167,7 @@ EOF
 
     $rss->parsefile(
         File::Spec->catfile(
-            File::Spec->curdir(), 
+            File::Spec->curdir(),
             qw(examples 2.0 flickr-rss-with-both-desc-and-media-desc.xml)
         ),
         { hashrefs_instead_of_strings => 1 },
@@ -16,8 +16,8 @@ use constant RSS_DOCUMENT      => qq(<?xml version="1.0"?>
   <link>http://example.com/</link>
   <description>To lead by example</description>
   <language>en-us</language>
-  <copyright>All content Public Domain, except comments which remains copyright the author</copyright> 
-  <managingEditor>editor\@example.com</managingEditor> 
+  <copyright>All content Public Domain, except comments which remains copyright the author</copyright>
+  <managingEditor>editor\@example.com</managingEditor>
   <webMaster>webmaster\@example.com</webMaster>
   <docs>http://backend.userland.com/rss</docs>
   <category  domain="http://www.dmoz.org">Reference/Libraries/Library_and_Information_Science/Technical_Services/Cataloguing/Metadata/RDF/Applications/RSS/</category>
@@ -104,7 +104,7 @@ __END__
 
 =head1 NAME
 
-2.0-parse-cloud.t - parse rssCloud: 
+2.0-parse-cloud.t - parse rssCloud:
 https://rt.cpan.org/Ticket/Display.html?id=67241
 
 =head1 SYNOPSIS
@@ -43,7 +43,7 @@ EOF
 
     # TEST
     is ($rss->parse($text)->{textinput}->{link},
-        "http://www.topix.net/search/", 
+        "http://www.topix.net/search/",
         "->parse() returns the object again"
     );
 
@@ -12,8 +12,8 @@ use constant RSS_DOCUMENT      => qq(<?xml version="1.0"?>
   <link>http://example.com/</link>
   <description>To lead by example</description>
   <language>en-us</language>
-  <copyright>All content Public Domain, except comments which remains copyright the author</copyright> 
-  <managingEditor>editor\@example.com</managingEditor> 
+  <copyright>All content Public Domain, except comments which remains copyright the author</copyright>
+  <managingEditor>editor\@example.com</managingEditor>
   <webMaster>webmaster\@example.com</webMaster>
   <docs>http://backend.userland.com/rss</docs>
   <category  domain="http://www.dmoz.org">Reference/Libraries/Library_and_Information_Science/Technical_Services/Cataloguing/Metadata/RDF/Applications/RSS/</category>
@@ -15,7 +15,7 @@ my $item_with_guid_missing = $rss->{'items'}->[1];
 my $item_with_guid_false = $rss->{'items'}->[2];
 
 # TEST
-is ($item_with_guid_true->{"permaLink"}, 
+is ($item_with_guid_true->{"permaLink"},
     "http://community.livejournal.com/lj_dev/714037.html",
     "guid's isPermaLink is set to true, so the item permalink property should be set to the value of the guid tag"
 );
@@ -26,9 +26,9 @@ ok ((!$item_with_guid_missing->{"permaLink"}),
 );
 
 # TEST
-is ($item_with_guid_missing->{"guid"}, 
+is ($item_with_guid_missing->{"guid"},
     "http://community.livejournal.com/lj_dev/713810.html",
-    "guid's isPermaLink is missing (implicitly false), so item->{guid}" . 
+    "guid's isPermaLink is missing (implicitly false), so item->{guid}" .
     " should be equal to the contents of the guid element",
 );
 
@@ -38,7 +38,7 @@ ok ((!$item_with_guid_false->{"permaLink"}),
 );
 
 # TEST
-is ($item_with_guid_false->{"guid"}, 
+is ($item_with_guid_false->{"guid"},
     "http://community.livejournal.com/lj_dev/713549.html",
     "guid's isPermaLink is false so item->{guid} should be equal to" .
     " the contents of the guid element"
@@ -37,7 +37,7 @@ my $string = $rss->as_string();
 
 # TEST
 ok (
-    (index($string, 
+    (index($string,
             '<description>My Life Changed Absolutely</description>'
         ) >= 0
     ),
@@ -38,7 +38,7 @@ sub create_rss
         title => "GTKeyboard 0.85",
         link  => "http://freshmeat.net/news/1999/06/21/930003829.html"
         );
-    
+
     return $rss;
 }
 
@@ -96,7 +96,7 @@ sub create_rss
     contains($rss,
         qq{<item>\n<title>gcc 10.0.10</title>\n} .
         qq{<link>http://gcc-compiler.tld/</link>\n} .
-        qq{</item>\n} .        
+        qq{</item>\n} .
         qq{<item>\n<title>GTKeyboard 0.85</title>\n} .
         qq{<link>http://freshmeat.net/news/1999/06/21/930003829.html</link>\n} .
         qq{</item>\n},
@@ -16,7 +16,7 @@ my $TAG = 'fm';
 
     $rss->parsefile(
         File::Spec->catfile(
-            File::Spec->curdir(), 't', 'data', 'freshmeat.rdf' 
+            File::Spec->curdir(), 't', 'data', 'freshmeat.rdf'
         )
     );
 
@@ -38,7 +38,7 @@ my $TAG = 'fm';
         local $/;
         local *I;
         open I, "<", File::Spec->catfile(
-            File::Spec->curdir(), 't', 'data', 'freshmeat.rdf' 
+            File::Spec->curdir(), 't', 'data', 'freshmeat.rdf'
         );
         $text = <I>;
         close(I);
@@ -46,7 +46,7 @@ else {
     # Save RSS content to file.
     #
 
-    open (RSS, ">", $rss_file) || 
+    open (RSS, ">", $rss_file) ||
         die "Unable to open $rss_file.";
 
 
@@ -73,7 +73,7 @@ else {
 
     close (RSS);
 
-    eq_or_diff($rss1, $rss2, 'got the same RSS both times'); 
+    eq_or_diff($rss1, $rss2, 'got the same RSS both times');
 
     #
     # And read it back in again.
@@ -0,0 +1,12 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+eval 'use Test::CPAN::Changes';
+plan skip_all => 'Test::CPAN::Changes required for this test' if $@;
+
+changes_ok();
+
@@ -3,13 +3,13 @@
 <!-- XHTML is declared as the default namespace, not RSS -->
 <!-- uses 3 modules that use rdf:resource: admin, annotate, and changed page -->
 
-<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
-         xmlns:dc="http://purl.org/dc/elements/1.1/" 
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+         xmlns:dc="http://purl.org/dc/elements/1.1/"
          xmlns:admin="http://webns.net/mvcb/"
 		 xmlns:annotate="http://purl.org/rss/1.0/modules/annotate/"
          xmlns:cp="http://my.theinfo.org/changed/1.0/rss/"
 		 xmlns:rss="http://purl.org/rss/1.0/"
-		 xmlns="http://www.w3.org/1999/xhtml" 
+		 xmlns="http://www.w3.org/1999/xhtml"
          >
 
 <rss:channel rdf:about="http://example.org/">
@@ -21,19 +21,19 @@ added or improved. Read below for what&apos;s new.
 Two of the pages in &lt;a href=&quot;http://www.shlomifish.org/MathVentures/&quot;&gt;the
     MathVentures section&lt;/a&gt; were converted to use embedded
 &lt;a href=&quot;http://www.w3.org/Math/&quot;&gt;MathML&lt;/a&gt;. This should make viewing
-them with MathML-compliant browsers easier. The old ASCII-art based pages are 
+them with MathML-compliant browsers easier. The old ASCII-art based pages are
 still available.
 &lt;/p&gt;
 
 &lt;p&gt;
-The ideas 
+The ideas
 &lt;a href=&quot;http://www.shlomifish.org/philosophy/ideas/#tucan&quot;&gt;Tucan&lt;/a&gt; and
 &lt;a href=&quot;http://www.shlomifish.org/philosophy/ideas/#unixdoc&quot;&gt;Unixdoc&lt;/a&gt;
 were added to the Random Ideas page.
 &lt;/p&gt;
 
 &lt;p&gt;
-I&apos;ve placed &lt;a href=&quot;http://www.shlomifish.org/open-source/nostalgia/&quot;&gt;some of 
+I&apos;ve placed &lt;a href=&quot;http://www.shlomifish.org/open-source/nostalgia/&quot;&gt;some of
     my old DOS-era programs online&lt;/a&gt; for your amusement.
 &lt;/p&gt;
 
@@ -77,12 +77,12 @@ It&apos;s been about two weeks since my last update, and here&apos;s what&apos;s
     &lt;p&gt;
     &lt;a href=&quot;http://www.shlomifish.org/art/recommendations/music/&quot;&gt;A currently
         partial list&lt;/a&gt; of my favourite compact discs is now live. Creating
-    this list involved a large amount of 
+    this list involved a large amount of
     &lt;a href=&quot;http://en.wikipedia.org/wiki/Document_Type_Definition&quot;&gt;DTD&lt;/a&gt;,
-    &lt;a href=&quot;http://www.w3.org/TR/xslt&quot;&gt;XSLT&lt;/a&gt;, &lt;a href=&quot;http://perl-begin.berlios.de/&quot;&gt;Perl&lt;/a&gt;, and CSS hacking on the 
-    &lt;a href=&quot;http://search.cpan.org/dist/XML-Grammar-ProductsSyndication/&quot;&gt;XML-Grammar-ProductsSyndication&lt;/a&gt; 
-    framework, that was written from scratch to facilitate making construction 
-    of such lists possible by and others. 
+    &lt;a href=&quot;http://www.w3.org/TR/xslt&quot;&gt;XSLT&lt;/a&gt;, &lt;a href=&quot;http://perl-begin.berlios.de/&quot;&gt;Perl&lt;/a&gt;, and CSS hacking on the
+    &lt;a href=&quot;http://search.cpan.org/dist/XML-Grammar-ProductsSyndication/&quot;&gt;XML-Grammar-ProductsSyndication&lt;/a&gt;
+    framework, that was written from scratch to facilitate making construction
+    of such lists possible by and others.
     &lt;/p&gt;
     &lt;p&gt;
     I will add the missing CDs as time goes by, and will also later on add
@@ -93,15 +93,15 @@ It&apos;s been about two weeks since my last update, and here&apos;s what&apos;s
     &lt;/li&gt;
     &lt;li&gt;
     &lt;p&gt;
-    More pages on the site were made to validate according to the 
+    More pages on the site were made to validate according to the
     &lt;a href=&quot;http://www.w3.org/&quot;&gt;World-wide-web consortium&lt;/a&gt; standards, and
     some ancient leftovers that were no longer important were removed.
     &lt;/p&gt;
     &lt;/li&gt;
     &lt;li&gt;
     &lt;p&gt;
-    &lt;a href=&quot;http://www.shlomifish.org/open-source/favourite/&quot;&gt;My list of 
-        favourite open source software&lt;/a&gt; was updated, with many corrections, 
+    &lt;a href=&quot;http://www.shlomifish.org/open-source/favourite/&quot;&gt;My list of
+        favourite open source software&lt;/a&gt; was updated, with many corrections,
     added programs and a new navigation menu.
     &lt;/p&gt;
     &lt;/li&gt;
@@ -19,19 +19,19 @@ added or improved. Read below for what&apos;s new.
 Two of the pages in &lt;a href=&quot;http://www.shlomifish.org/MathVentures/&quot;&gt;the
     MathVentures section&lt;/a&gt; were converted to use embedded
 &lt;a href=&quot;http://www.w3.org/Math/&quot;&gt;MathML&lt;/a&gt;. This should make viewing
-them with MathML-compliant browsers easier. The old ASCII-art based pages are 
+them with MathML-compliant browsers easier. The old ASCII-art based pages are
 still available.
 &lt;/p&gt;
 
 &lt;p&gt;
-The ideas 
+The ideas
 &lt;a href=&quot;http://www.shlomifish.org/philosophy/ideas/#tucan&quot;&gt;Tucan&lt;/a&gt; and
 &lt;a href=&quot;http://www.shlomifish.org/philosophy/ideas/#unixdoc&quot;&gt;Unixdoc&lt;/a&gt;
 were added to the Random Ideas page.
 &lt;/p&gt;
 
 &lt;p&gt;
-I&apos;ve placed &lt;a href=&quot;http://www.shlomifish.org/open-source/nostalgia/&quot;&gt;some of 
+I&apos;ve placed &lt;a href=&quot;http://www.shlomifish.org/open-source/nostalgia/&quot;&gt;some of
     my old DOS-era programs online&lt;/a&gt; for your amusement.
 &lt;/p&gt;
 
@@ -75,12 +75,12 @@ It&apos;s been about two weeks since my last update, and here&apos;s what&apos;s
     &lt;p&gt;
     &lt;a href=&quot;http://www.shlomifish.org/art/recommendations/music/&quot;&gt;A currently
         partial list&lt;/a&gt; of my favourite compact discs is now live. Creating
-    this list involved a large amount of 
+    this list involved a large amount of
     &lt;a href=&quot;http://en.wikipedia.org/wiki/Document_Type_Definition&quot;&gt;DTD&lt;/a&gt;,
-    &lt;a href=&quot;http://www.w3.org/TR/xslt&quot;&gt;XSLT&lt;/a&gt;, &lt;a href=&quot;http://perl-begin.berlios.de/&quot;&gt;Perl&lt;/a&gt;, and CSS hacking on the 
-    &lt;a href=&quot;http://search.cpan.org/dist/XML-Grammar-ProductsSyndication/&quot;&gt;XML-Grammar-ProductsSyndication&lt;/a&gt; 
-    framework, that was written from scratch to facilitate making construction 
-    of such lists possible by and others. 
+    &lt;a href=&quot;http://www.w3.org/TR/xslt&quot;&gt;XSLT&lt;/a&gt;, &lt;a href=&quot;http://perl-begin.berlios.de/&quot;&gt;Perl&lt;/a&gt;, and CSS hacking on the
+    &lt;a href=&quot;http://search.cpan.org/dist/XML-Grammar-ProductsSyndication/&quot;&gt;XML-Grammar-ProductsSyndication&lt;/a&gt;
+    framework, that was written from scratch to facilitate making construction
+    of such lists possible by and others.
     &lt;/p&gt;
     &lt;p&gt;
     I will add the missing CDs as time goes by, and will also later on add
@@ -91,15 +91,15 @@ It&apos;s been about two weeks since my last update, and here&apos;s what&apos;s
     &lt;/li&gt;
     &lt;li&gt;
     &lt;p&gt;
-    More pages on the site were made to validate according to the 
+    More pages on the site were made to validate according to the
     &lt;a href=&quot;http://www.w3.org/&quot;&gt;World-wide-web consortium&lt;/a&gt; standards, and
     some ancient leftovers that were no longer important were removed.
     &lt;/p&gt;
     &lt;/li&gt;
     &lt;li&gt;
     &lt;p&gt;
-    &lt;a href=&quot;http://www.shlomifish.org/open-source/favourite/&quot;&gt;My list of 
-        favourite open source software&lt;/a&gt; was updated, with many corrections, 
+    &lt;a href=&quot;http://www.shlomifish.org/open-source/favourite/&quot;&gt;My list of
+        favourite open source software&lt;/a&gt; was updated, with many corrections,
     added programs and a new navigation menu.
     &lt;/p&gt;
     &lt;/li&gt;
@@ -20,19 +20,19 @@ added or improved. Read below for what&apos;s new.
 Two of the pages in &lt;a href=&quot;http://www.shlomifish.org/MathVentures/&quot;&gt;the
     MathVentures section&lt;/a&gt; were converted to use embedded
 &lt;a href=&quot;http://www.w3.org/Math/&quot;&gt;MathML&lt;/a&gt;. This should make viewing
-them with MathML-compliant browsers easier. The old ASCII-art based pages are 
+them with MathML-compliant browsers easier. The old ASCII-art based pages are
 still available.
 &lt;/p&gt;
 
 &lt;p&gt;
-The ideas 
+The ideas
 &lt;a href=&quot;http://www.shlomifish.org/philosophy/ideas/#tucan&quot;&gt;Tucan&lt;/a&gt; and
 &lt;a href=&quot;http://www.shlomifish.org/philosophy/ideas/#unixdoc&quot;&gt;Unixdoc&lt;/a&gt;
 were added to the Random Ideas page.
 &lt;/p&gt;
 
 &lt;p&gt;
-I&apos;ve placed &lt;a href=&quot;http://www.shlomifish.org/open-source/nostalgia/&quot;&gt;some of 
+I&apos;ve placed &lt;a href=&quot;http://www.shlomifish.org/open-source/nostalgia/&quot;&gt;some of
     my old DOS-era programs online&lt;/a&gt; for your amusement.
 &lt;/p&gt;
 
@@ -76,12 +76,12 @@ It&apos;s been about two weeks since my last update, and here&apos;s what&apos;s
     &lt;p&gt;
     &lt;a href=&quot;http://www.shlomifish.org/art/recommendations/music/&quot;&gt;A currently
         partial list&lt;/a&gt; of my favourite compact discs is now live. Creating
-    this list involved a large amount of 
+    this list involved a large amount of
     &lt;a href=&quot;http://en.wikipedia.org/wiki/Document_Type_Definition&quot;&gt;DTD&lt;/a&gt;,
-    &lt;a href=&quot;http://www.w3.org/TR/xslt&quot;&gt;XSLT&lt;/a&gt;, &lt;a href=&quot;http://perl-begin.berlios.de/&quot;&gt;Perl&lt;/a&gt;, and CSS hacking on the 
-    &lt;a href=&quot;http://search.cpan.org/dist/XML-Grammar-ProductsSyndication/&quot;&gt;XML-Grammar-ProductsSyndication&lt;/a&gt; 
-    framework, that was written from scratch to facilitate making construction 
-    of such lists possible by and others. 
+    &lt;a href=&quot;http://www.w3.org/TR/xslt&quot;&gt;XSLT&lt;/a&gt;, &lt;a href=&quot;http://perl-begin.berlios.de/&quot;&gt;Perl&lt;/a&gt;, and CSS hacking on the
+    &lt;a href=&quot;http://search.cpan.org/dist/XML-Grammar-ProductsSyndication/&quot;&gt;XML-Grammar-ProductsSyndication&lt;/a&gt;
+    framework, that was written from scratch to facilitate making construction
+    of such lists possible by and others.
     &lt;/p&gt;
     &lt;p&gt;
     I will add the missing CDs as time goes by, and will also later on add
@@ -92,15 +92,15 @@ It&apos;s been about two weeks since my last update, and here&apos;s what&apos;s
     &lt;/li&gt;
     &lt;li&gt;
     &lt;p&gt;
-    More pages on the site were made to validate according to the 
+    More pages on the site were made to validate according to the
     &lt;a href=&quot;http://www.w3.org/&quot;&gt;World-wide-web consortium&lt;/a&gt; standards, and
     some ancient leftovers that were no longer important were removed.
     &lt;/p&gt;
     &lt;/li&gt;
     &lt;li&gt;
     &lt;p&gt;
-    &lt;a href=&quot;http://www.shlomifish.org/open-source/favourite/&quot;&gt;My list of 
-        favourite open source software&lt;/a&gt; was updated, with many corrections, 
+    &lt;a href=&quot;http://www.shlomifish.org/open-source/favourite/&quot;&gt;My list of
+        favourite open source software&lt;/a&gt; was updated, with many corrections,
     added programs and a new navigation menu.
     &lt;/p&gt;
     &lt;/li&gt;
@@ -21,19 +21,19 @@ added or improved. Read below for what&apos;s new.
 Two of the pages in &lt;a href=&quot;http://www.shlomifish.org/MathVentures/&quot;&gt;the
     MathVentures section&lt;/a&gt; were converted to use embedded
 &lt;a href=&quot;http://www.w3.org/Math/&quot;&gt;MathML&lt;/a&gt;. This should make viewing
-them with MathML-compliant browsers easier. The old ASCII-art based pages are 
+them with MathML-compliant browsers easier. The old ASCII-art based pages are
 still available.
 &lt;/p&gt;
 
 &lt;p&gt;
-The ideas 
+The ideas
 &lt;a href=&quot;http://www.shlomifish.org/philosophy/ideas/#tucan&quot;&gt;Tucan&lt;/a&gt; and
 &lt;a href=&quot;http://www.shlomifish.org/philosophy/ideas/#unixdoc&quot;&gt;Unixdoc&lt;/a&gt;
 were added to the Random Ideas page.
 &lt;/p&gt;
 
 &lt;p&gt;
-I&apos;ve placed &lt;a href=&quot;http://www.shlomifish.org/open-source/nostalgia/&quot;&gt;some of 
+I&apos;ve placed &lt;a href=&quot;http://www.shlomifish.org/open-source/nostalgia/&quot;&gt;some of
     my old DOS-era programs online&lt;/a&gt; for your amusement.
 &lt;/p&gt;
 
@@ -77,12 +77,12 @@ It&apos;s been about two weeks since my last update, and here&apos;s what&apos;s
     &lt;p&gt;
     &lt;a href=&quot;http://www.shlomifish.org/art/recommendations/music/&quot;&gt;A currently
         partial list&lt;/a&gt; of my favourite compact discs is now live. Creating
-    this list involved a large amount of 
+    this list involved a large amount of
     &lt;a href=&quot;http://en.wikipedia.org/wiki/Document_Type_Definition&quot;&gt;DTD&lt;/a&gt;,
-    &lt;a href=&quot;http://www.w3.org/TR/xslt&quot;&gt;XSLT&lt;/a&gt;, &lt;a href=&quot;http://perl-begin.berlios.de/&quot;&gt;Perl&lt;/a&gt;, and CSS hacking on the 
-    &lt;a href=&quot;http://search.cpan.org/dist/XML-Grammar-ProductsSyndication/&quot;&gt;XML-Grammar-ProductsSyndication&lt;/a&gt; 
-    framework, that was written from scratch to facilitate making construction 
-    of such lists possible by and others. 
+    &lt;a href=&quot;http://www.w3.org/TR/xslt&quot;&gt;XSLT&lt;/a&gt;, &lt;a href=&quot;http://perl-begin.berlios.de/&quot;&gt;Perl&lt;/a&gt;, and CSS hacking on the
+    &lt;a href=&quot;http://search.cpan.org/dist/XML-Grammar-ProductsSyndication/&quot;&gt;XML-Grammar-ProductsSyndication&lt;/a&gt;
+    framework, that was written from scratch to facilitate making construction
+    of such lists possible by and others.
     &lt;/p&gt;
     &lt;p&gt;
     I will add the missing CDs as time goes by, and will also later on add
@@ -93,15 +93,15 @@ It&apos;s been about two weeks since my last update, and here&apos;s what&apos;s
     &lt;/li&gt;
     &lt;li&gt;
     &lt;p&gt;
-    More pages on the site were made to validate according to the 
+    More pages on the site were made to validate according to the
     &lt;a href=&quot;http://www.w3.org/&quot;&gt;World-wide-web consortium&lt;/a&gt; standards, and
     some ancient leftovers that were no longer important were removed.
     &lt;/p&gt;
     &lt;/li&gt;
     &lt;li&gt;
     &lt;p&gt;
-    &lt;a href=&quot;http://www.shlomifish.org/open-source/favourite/&quot;&gt;My list of 
-        favourite open source software&lt;/a&gt; was updated, with many corrections, 
+    &lt;a href=&quot;http://www.shlomifish.org/open-source/favourite/&quot;&gt;My list of
+        favourite open source software&lt;/a&gt; was updated, with many corrections,
     added programs and a new navigation menu.
     &lt;/p&gt;
     &lt;/li&gt;
@@ -104,7 +104,7 @@
    &amp;lt;messageContents type=&amp;quot;PICTURE&amp;quot;&amp;gt;
       &amp;lt;messageText&amp;gt;Hi&amp;lt;/messageText&amp;gt;
       &amp;lt;mediaItems&amp;gt;
-         &amp;lt;mediaItem id=&amp;quot;1&amp;quot;&amp;gt;                        
+         &amp;lt;mediaItem id=&amp;quot;1&amp;quot;&amp;gt;
             &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;
             &amp;amp;lt;url&amp;amp;gt;http://pictures.sprintpcs.com/getMMBOXMessageMedia?id=Xw1004H8sLv6S3x76lVPYmsnJP2O20g3zlhB%2Fx7njqW9MscUXIEXBQmk5gW%2FZUWGmojEaNnHPws%2F%0A5lpklQ8%2Bufjui%2BAXcLyJG3ClZw2m2Gi1qkXdBdb5KgoH8KyzBNpwHmgReddy4aqnGyBYMpsPyA%3D%3D%0A&amp;amp;lt;/url&amp;amp;gt;
 
@@ -12,8 +12,8 @@ use constant RSS_DOCUMENT      => qq(<?xml version="1.0"?>
   <link>http://example.com/</link>
   <description>To lead by example</description>
   <language>en-us</language>
-  <copyright>All content Public Domain, except comments which remains copyright the author</copyright> 
-  <managingEditor>editor\@example.com</managingEditor> 
+  <copyright>All content Public Domain, except comments which remains copyright the author</copyright>
+  <managingEditor>editor\@example.com</managingEditor>
   <webMaster>webmaster\@example.com</webMaster>
   <docs>http://backend.userland.com/rss</docs>
   <category  domain="http://www.dmoz.org">Reference/Libraries/Library_and_Information_Science/Technical_Services/Cataloguing/Metadata/RDF/Applications/RSS/</category>
@@ -14,8 +14,8 @@ use constant RSS_DOCUMENT      		=> qq(<?xml version="1.0"?>
   <link>http://example.com/</link>
   <description>To lead by example</description>
   <language>en-us</language>
-  <copyright>All content Public Domain, except comments which remains copyright the author</copyright> 
-  <managingEditor>editor\@example.com</managingEditor> 
+  <copyright>All content Public Domain, except comments which remains copyright the author</copyright>
+  <managingEditor>editor\@example.com</managingEditor>
   <webMaster>webmaster\@example.com</webMaster>
   <docs>http://backend.userland.com/rss</docs>
   <category  domain="http://www.dmoz.org">Reference/Libraries/Library_and_Information_Science/Technical_Services/Cataloguing/Metadata/RDF/Applications/RSS/</category>
@@ -62,13 +62,13 @@ if($xml->{items} && ref($xml->{items}) eq 'ARRAY'){
 	cmp_ok($encl->{'url'},"eq",RSS_ENCLOSURE_URL, "ENCLOSURE URL is ".RSS_ENCLOSURE_URL);
 	cmp_ok($encl->{'length'},"eq",RSS_ENCLOSURE_LENGTH, "ENCLOSURE URL is ".RSS_ENCLOSURE_LENGTH);
 	cmp_ok($encl->{'type'},"eq",RSS_ENCLOSURE_TYPE, "ENCLOSURE URL is ".RSS_ENCLOSURE_TYPE);
-    
+
     }else{
-	
+
 	ok(0,"Parsing Enclosure element, sub-element of Item");
     }
 
-    
+
 }
 
 
@@ -16,7 +16,7 @@ foreach my $version ( @versions )
 	make_rss( $rss );
 	like( $rss->as_string, qr/^<\?xml version="1.0" encoding="UTF-8"\?>/,
 		"Default encoding for version $version" );
-		
+
 	# UTF-8
 	$rss = XML::RSS->new( version => $version,
 		encoding => 'UTF-8' );
@@ -24,7 +24,7 @@ foreach my $version ( @versions )
 	make_rss( $rss );
 	like( $rss->as_string, qr/^<\?xml version="1.0" encoding="UTF-8"\?>/,
 		"Default encoding for version $version" );
-	
+
 	# home brew
 	$rss = XML::RSS->new( version => $version,
 		encoding => 'Fooey' );
@@ -33,15 +33,15 @@ foreach my $version ( @versions )
 	like( $rss->as_string, qr/^<\?xml version="1.0" encoding="Fooey"\?>/,
 		"Default encoding for version $version" );
 	}
-	
+
 sub make_rss
 	{
 	my $rss = shift;
-	
+
 	$rss->channel(
 		title => 'Test RSS',
 		link  => 'http://www.example.com',
         description => "Hello",
 		);
-		
+
 	}
@@ -16,8 +16,8 @@ use XML::RSS;
       <link>http://example.com/</link>
       <description>To lead by example</description>
       <language>en-us</language>
-      <copyright>All content Public Domain, except comments which remains copyright the author</copyright> 
-      <managingEditor>editor\@example.com</managingEditor> 
+      <copyright>All content Public Domain, except comments which remains copyright the author</copyright>
+      <managingEditor>editor\@example.com</managingEditor>
       <webMaster>webmaster\@example.com</webMaster>
       <docs>http://backend.userland.com/rss</docs>
       <category  domain="http://www.dmoz.org">Reference/Libraries/Library_and_Information_Science/Technical_Services/Cataloguing/Metadata/RDF/Applications/RSS/</category>
@@ -45,7 +45,7 @@ use XML::RSS;
 
     # TEST
     ok (
-        (index($xml->as_string(), q{<guid isPermaLink="true">http://example.com/2002/09/02</guid>}) >= 0), 
+        (index($xml->as_string(), q{<guid isPermaLink="true">http://example.com/2002/09/02</guid>}) >= 0),
         "Checking for correct guid"
     );
 }
@@ -1,13 +1,13 @@
 BEGIN {
 	use File::Find;
-	
+
 	@files = ();
 
         my $lib = 'lib';
         $lib = 'blib/lib' if -e 'blib/lib';
 
 	find(sub { push @files, $File::Find::name if $_ =~ m/\.pm$/;}, ($lib));
-	
+
 	@classes = map { my $x = $_;
 		$x =~ s|^blib/lib/||;
 		$x =~ s|/|::|g;
@@ -17,7 +17,7 @@ BEGIN {
 	}
 
 use Test::More tests => scalar @classes;
-	
+
 foreach my $class ( @classes ){
 	print "bail out! $class did not compile" unless use_ok( $class );
 }
@@ -8,7 +8,7 @@ use XML::RSS;
 {
 my $rss = XML::RSS->new( version => '0.9' );
 # TEST
-like( $rss->as_string, 
+like( $rss->as_string,
 	qr|<rdf:RDF[\d\D]+xmlns="http://my.netscape.com/rdf/simple/0.9/"[^>]*>|,
 	"rdf tag for version 0.9" );
 
@@ -20,7 +20,7 @@ like( $rss->as_string, qr/<rss version="0.91">/,
 $rss = XML::RSS->new( version => '1.0' );
 
 # TEST
-like( $rss->as_string, 
+like( $rss->as_string,
 	qr|<rdf:RDF[\d\D]+xmlns="http://purl.org/rss/1.0/"[^>]*>|,
 	"rdf tag for version 1.0" );
 }
@@ -14,8 +14,8 @@ use XML::RSS;
             File::Spec->curdir(), "t", "data", "2.0", "sf-hs-with-pubDate.rss"
         )
     );
-    
-    my $target_fn = 
+
+    my $target_fn =
         File::Spec->catfile(
             File::Spec->curdir(), "t", "data", "2.0", "sf-hs-temp.rss"
         )
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+eval "use Test::TrailingSpace";
+if ($@)
+{
+    plan skip_all => "Test::TrailingSpace required for trailing space test.";
+}
+else
+{
+    plan tests => 1;
+}
+
+my $finder = Test::TrailingSpace->new(
+    {
+        root => '.',
+        filename_regex => qr/(?:(?:\.(?:t|pm|pl|PL|yml|json|arc|vim))|README|Changes|LICENSE|MANIFEST)\z/,
+    },
+);
+
+# TEST
+$finder->no_trailing_space(
+    "No trailing space was found."
+);
+
@@ -21,7 +21,7 @@ sub output_contains
     {
         diag("Could not find the substring [$sub_string] in:{{{{\n$rss_output\n}}}}\n");
     }
-    return $ok;    
+    return $ok;
 }
 
 sub contains
@@ -47,7 +47,7 @@ sub create_rss_1
 
     my $extra_rss_args = $args->{rss_args} || [];
     my $rss = XML::RSS->new (version => $args->{version}, @$extra_rss_args);
-    my $image_link = exists($args->{image_link}) ? $args->{image_link} : 
+    my $image_link = exists($args->{image_link}) ? $args->{image_link} :
         "http://freshmeat.net/";
 
     my $extra_image_params = $args->{image_params} || [];
@@ -97,7 +97,7 @@ sub create_item_with_0_rss
 {
     my $args = shift;
     my $rss = XML::RSS->new (version => $args->{version});
-    my $image_link = exists($args->{image_link}) ? $args->{image_link} : 
+    my $image_link = exists($args->{image_link}) ? $args->{image_link} :
         "http://freshmeat.net/";
 
     my $extra_image_params = $args->{image_params} || [];
@@ -129,7 +129,7 @@ sub create_textinput_with_0_rss
 {
     my $args = shift;
     my $rss = XML::RSS->new (version => $args->{version});
-    my $image_link = exists($args->{image_link}) ? $args->{image_link} : 
+    my $image_link = exists($args->{image_link}) ? $args->{image_link} :
         "http://freshmeat.net/";
 
     my $extra_image_params = $args->{image_params} || [];
@@ -339,7 +339,7 @@ sub create_rss_without_item
     not_contains($rss, "<image rdf:resource=\"",
         "1.0 - if an image was not specified it isn't there."
     );
-    
+
 }
 
 {
@@ -370,7 +370,7 @@ sub create_rss_without_item
     ok ($rss->as_string =~ m{<image rdf:about="0">.*?<title>freshmeat.net</title>.*?<url>0</url>.*?<link>http://freshmeat.net/</link>.*?</image>}s,
          "Checking for image in RSS 1.0");
     # TEST
-    contains ($rss, 
+    contains ($rss,
         "</items>\n<image rdf:resource=\"0\" />\n",
         "1.0 - contains image rdf:resource."
     );
@@ -425,12 +425,12 @@ sub create_rss_without_item
 {
     my $version = "0.91";
     my $rss = create_rss_1({
-            version => $version, 
+            version => $version,
             image_params => [width => 0, height => 0, description => 0],
         }
     );
     # TEST
-    contains($rss, 
+    contains($rss,
             "<image>\n<title>freshmeat.net</title>\n<url>0</url>\n"
             . "<link>http://freshmeat.net/</link>\n"
             . "<width>0</width>\n<height>0</height>\n"
@@ -441,12 +441,12 @@ sub create_rss_without_item
 
 {
     my $rss = create_rss_1({
-            version => "2.0", 
+            version => "2.0",
             image_params => [width => 0, height => 0, description => 0],
         }
     );
     # TEST
-    contains($rss, 
+    contains($rss,
             "<image>\n<title>freshmeat.net</title>\n<url>0</url>\n"
             . "<link>http://freshmeat.net/</link>\n"
             . "<width>0</width>\n<height>0</height>\n"
@@ -466,7 +466,7 @@ sub create_rss_without_item
 }
 
 {
-    my $rss = create_item_with_0_rss({version => "0.91", 
+    my $rss = create_item_with_0_rss({version => "0.91",
             item_params => [description => "Hello There"],
         });
     # TEST
@@ -478,7 +478,7 @@ sub create_rss_without_item
 }
 
 {
-    my $rss = create_item_with_0_rss({version => "0.91", 
+    my $rss = create_item_with_0_rss({version => "0.91",
             item_params => [description => "0"],
         });
     # TEST
@@ -490,7 +490,7 @@ sub create_rss_without_item
 }
 
 {
-    my $rss = create_item_with_0_rss({version => "1.0", 
+    my $rss = create_item_with_0_rss({version => "1.0",
             item_params => [description => "Hello There", about => "Yowza"],
         });
     # TEST
@@ -502,7 +502,7 @@ sub create_rss_without_item
 }
 
 {
-    my $rss = create_item_with_0_rss({version => "1.0", 
+    my $rss = create_item_with_0_rss({version => "1.0",
             item_params => [description => "0", about => "Yowza"],
         });
     # TEST
@@ -516,8 +516,8 @@ sub create_rss_without_item
 
 {
     my @subs = (qw(title link description author category comments pubDate));
-    my $rss = create_item_with_0_rss({version => "2.0", 
-            item_params => 
+    my $rss = create_item_with_0_rss({version => "2.0",
+            item_params =>
             [
                 map { $_ => 0 } @subs
             ],
@@ -528,15 +528,15 @@ sub create_rss_without_item
     contains(
         $rss,
         ("<item>\n"
-        . join("", map { "<$_>0</$_>\n" } @subs) 
+        . join("", map { "<$_>0</$_>\n" } @subs)
         . "</item>"),
         "2.0 - item/* == 0 - 1",
     );
 }
 
 {
-    my $rss = create_item_with_0_rss({version => "2.0", 
-            item_params => 
+    my $rss = create_item_with_0_rss({version => "2.0",
+            item_params =>
             [
                 title => "Foo&Bar",
                 link => "http://www.mytld/",
@@ -559,8 +559,8 @@ sub create_rss_without_item
 }
 
 {
-    my $rss = create_item_with_0_rss({version => "2.0", 
-            item_params => 
+    my $rss = create_item_with_0_rss({version => "2.0",
+            item_params =>
             [
                 title => "Foo&Bar",
                 link => "http://www.mytld/",
@@ -592,7 +592,7 @@ sub create_rss_without_item
         )
     {
         my $rss = create_item_with_0_rss({version => "2.0",
-                item_params => 
+                item_params =>
                 [
                     title => "Foo&Bar",
                     link => "http://www.mytld/",
@@ -662,7 +662,7 @@ sub create_rss_without_item
     not_contains($rss, "<textinput rdf:resource=",
         "1.0 - if a textinput was not specified it isn't there."
     );
-    
+
 }
 
 {
@@ -678,7 +678,7 @@ sub create_rss_without_item
         $rss,
         "<textinput rdf:resource=\"0\" />\n</channel>\n",
         "1.0 - textinput/link == 0 and textinput rdf:resource",
-    );    
+    );
 }
 
 
@@ -715,7 +715,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "0.91", 
+            version => "0.91",
             channel_params => [dc => { language => "0",},],
         });
     # TEST
@@ -732,7 +732,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "0.91", 
+            version => "0.91",
             channel_params => [language => "0",],
         });
     # TEST
@@ -761,7 +761,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "1.0", 
+            version => "1.0",
             channel_params => [dc => { language => "0",},],
         });
     # TEST
@@ -777,7 +777,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "1.0", 
+            version => "1.0",
             channel_params => [language => "0",],
         });
     # TEST
@@ -799,7 +799,7 @@ sub create_rss_without_item
         "<title>freshmeat.net</title>\n" .
         "<link>http://freshmeat.net</link>\n" .
         "<description>Linux software</description>\n" .
-        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" . 
+        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" .
         "\n" .
         "<item>\n",
         "2.0 - if a channel/dc/language was not specified it isn't there."
@@ -808,7 +808,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "2.0", 
+            version => "2.0",
             channel_params => [dc => { language => "0",},],
         });
     # TEST
@@ -817,7 +817,7 @@ sub create_rss_without_item
         "<link>http://freshmeat.net</link>\n" .
         "<description>Linux software</description>\n" .
         "<language>0</language>\n" .
-        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" . 
+        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" .
         "\n" .
         "<item>\n",
         "2.0 - channel/dc/language == 0"
@@ -826,7 +826,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "2.0", 
+            version => "2.0",
             channel_params => [language => "0",],
         });
     # TEST
@@ -835,7 +835,7 @@ sub create_rss_without_item
         "<link>http://freshmeat.net</link>\n" .
         "<description>Linux software</description>\n" .
         "<language>0</language>\n" .
-        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" . 
+        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" .
         "\n" .
         "<item>\n",
         "2.0 - channel/language == 0"
@@ -844,7 +844,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "0.91", 
+            version => "0.91",
             channel_params => [rating => "0",],
         });
     # TEST
@@ -861,7 +861,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "0.91", 
+            version => "0.91",
             channel_params => [rating => "Hello", dc => {rights => "0"},],
         });
     # TEST
@@ -880,7 +880,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "0.91", 
+            version => "0.91",
             channel_params => [rating => "Hello", copyright => "0",],
         });
     # TEST
@@ -898,7 +898,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "2.0", 
+            version => "2.0",
             channel_params => [dc => {rights => "0"},],
         });
     # TEST
@@ -907,7 +907,7 @@ sub create_rss_without_item
         "<link>http://freshmeat.net</link>\n" .
         "<description>Linux software</description>\n" .
         "<copyright>0</copyright>\n" .
-        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" . 
+        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" .
         "\n" .
         "<item>\n",
         "2.0 - channel/dc/rights == 0"
@@ -916,7 +916,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "2.0", 
+            version => "2.0",
             channel_params => [copyright=> "0",],
         });
     # TEST
@@ -925,7 +925,7 @@ sub create_rss_without_item
         "<link>http://freshmeat.net</link>\n" .
         "<description>Linux software</description>\n" .
         "<copyright>0</copyright>\n" .
-        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" . 
+        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" .
         "\n" .
         "<item>\n",
         "2.0 - channel/copyright == 0"
@@ -934,8 +934,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "0.91", 
-            channel_params => 
+            version => "0.91",
+            channel_params =>
             [rating => "Hello", copyright => "Martha",docs => "0",],
         });
     # TEST
@@ -954,7 +954,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "2.0", 
+            version => "2.0",
             channel_params => [copyright => "Martha", docs => "0",],
         });
     # TEST
@@ -963,7 +963,7 @@ sub create_rss_without_item
         "<link>http://freshmeat.net</link>\n" .
         "<description>Linux software</description>\n" .
         "<copyright>Martha</copyright>\n" .
-        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" . 
+        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" .
         "<docs>0</docs>\n" .
         "\n" .
         "<item>\n",
@@ -973,8 +973,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "0.91", 
-            channel_params => 
+            version => "0.91",
+            channel_params =>
             [rating => "Hello", copyright => "Martha",
             docs => "MyDr. docs",dc => {publisher => 0}],
         });
@@ -995,8 +995,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "0.91", 
-            channel_params => 
+            version => "0.91",
+            channel_params =>
             [rating => "Hello", copyright => "Martha",
             docs => "MyDr. docs",managingEditor => 0],
         });
@@ -1017,8 +1017,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "2.0", 
-            channel_params => 
+            version => "2.0",
+            channel_params =>
             [copyright => "Martha",
             docs => "MyDr. docs",managingEditor => 0],
         });
@@ -1028,7 +1028,7 @@ sub create_rss_without_item
         "<link>http://freshmeat.net</link>\n" .
         "<description>Linux software</description>\n" .
         "<copyright>Martha</copyright>\n" .
-        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" . 
+        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" .
         "<docs>MyDr. docs</docs>\n" .
         "<managingEditor>0</managingEditor>\n" .
         "\n" .
@@ -1039,8 +1039,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "2.0", 
-            channel_params => 
+            version => "2.0",
+            channel_params =>
             [copyright => "Martha", docs => "MyDr. docs",
             dc => {publisher => 0}],
         });
@@ -1050,7 +1050,7 @@ sub create_rss_without_item
         "<link>http://freshmeat.net</link>\n" .
         "<description>Linux software</description>\n" .
         "<copyright>Martha</copyright>\n" .
-        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" . 
+        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" .
         "<docs>MyDr. docs</docs>\n" .
         "<managingEditor>0</managingEditor>\n" .
         "\n" .
@@ -1061,8 +1061,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "1.0", 
-            channel_params => 
+            version => "1.0",
+            channel_params =>
             [copyright => "Martha", dc => {publisher => 0}],
         });
     # TEST
@@ -1081,7 +1081,7 @@ sub create_rss_without_item
     # Here we create an RSS 2.0 object and render it as 1.0 to get the
     # "managingEditor" field acknowledged.
     my $rss = create_channel_rss({
-            version => "2.0", 
+            version => "2.0",
             channel_params =>
             [copyright => "Martha", managingEditor => 0,],
             omit_date => 1,
@@ -1101,8 +1101,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "0.91", 
-            channel_params => 
+            version => "0.91",
+            channel_params =>
             [rating => "Hello", copyright => "Martha",
             docs => "MyDr. docs",dc => {creator => 0}],
         });
@@ -1123,8 +1123,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "0.91", 
-            channel_params => 
+            version => "0.91",
+            channel_params =>
             [rating => "Hello", copyright => "Martha",
             docs => "MyDr. docs",webMaster => 0],
         });
@@ -1145,8 +1145,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "1.0", 
-            channel_params => 
+            version => "1.0",
+            channel_params =>
             [copyright => "Martha", dc => {creator => 0}],
         });
     # TEST
@@ -1165,7 +1165,7 @@ sub create_rss_without_item
     # Here we create an RSS 2.0 object and render it as 1.0 to get the
     # "managingEditor" field acknowledged.
     my $rss = create_channel_rss({
-            version => "2.0", 
+            version => "2.0",
             channel_params =>
             [copyright => "Martha", webMaster => 0,],
             omit_date => 1,
@@ -1185,8 +1185,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "2.0", 
-            channel_params => 
+            version => "2.0",
+            channel_params =>
             [copyright => "Martha",
             docs => "MyDr. docs",webMaster => 0],
         });
@@ -1196,7 +1196,7 @@ sub create_rss_without_item
         "<link>http://freshmeat.net</link>\n" .
         "<description>Linux software</description>\n" .
         "<copyright>Martha</copyright>\n" .
-        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" . 
+        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" .
         "<docs>MyDr. docs</docs>\n" .
         "<webMaster>0</webMaster>\n" .
         "\n" .
@@ -1207,8 +1207,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "2.0", 
-            channel_params => 
+            version => "2.0",
+            channel_params =>
             [copyright => "Martha", docs => "MyDr. docs",
             dc => {creator => 0}],
         });
@@ -1218,7 +1218,7 @@ sub create_rss_without_item
         "<link>http://freshmeat.net</link>\n" .
         "<description>Linux software</description>\n" .
         "<copyright>Martha</copyright>\n" .
-        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" . 
+        "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" .
         "<docs>MyDr. docs</docs>\n" .
         "<webMaster>0</webMaster>\n" .
         "\n" .
@@ -1237,7 +1237,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_skipHours_rss({
-            version => "0.91", 
+            version => "0.91",
             skipHours_params => [ hour => "0" ],
         });
     # TEST
@@ -1256,7 +1256,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_skipHours_rss({
-            version => "2.0", 
+            version => "2.0",
             skipHours_params => [ hour => "0" ],
         });
     # TEST
@@ -1275,7 +1275,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_skipDays_rss({
-            version => "0.91", 
+            version => "0.91",
             skipDays_params => [ day => "0" ],
         });
     # TEST
@@ -1294,7 +1294,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_skipDays_rss({
-            version => "2.0", 
+            version => "2.0",
             skipDays_params => [ day => "0" ],
         });
     # TEST
@@ -1305,7 +1305,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "1.0", 
+            version => "1.0",
         });
     # TEST
     contains($rss, "<channel rdf:about=\"http://freshmeat.net\">\n" .
@@ -1319,8 +1319,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "1.0", 
-            channel_params => 
+            version => "1.0",
+            channel_params =>
             [copyright => 0,],
         });
     # TEST
@@ -1336,8 +1336,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "1.0", 
-            channel_params => 
+            version => "1.0",
+            channel_params =>
             [dc => { rights => 0},],
         });
     # TEST
@@ -1353,8 +1353,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "1.0", 
-            channel_params => 
+            version => "1.0",
+            channel_params =>
             [dc => { title => 0},],
         });
     # TEST
@@ -1370,8 +1370,8 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "1.0", 
-            channel_params => 
+            version => "1.0",
+            channel_params =>
             [syn => { updateBase=> 0},],
         });
     # TEST
@@ -1386,20 +1386,20 @@ sub create_rss_without_item
 }
 
 {
-    my $rss = create_rss_1({version => "1.0", 
+    my $rss = create_rss_1({version => "1.0",
             image_params => [ dc => { subject => 0, }]
         });
     # TEST
-    contains ($rss, 
+    contains ($rss,
         (qq{<image rdf:about="0">\n<title>freshmeat.net</title>\n} .
-        qq{<url>0</url>\n<link>http://freshmeat.net/</link>\n} . 
+        qq{<url>0</url>\n<link>http://freshmeat.net/</link>\n} .
         qq{<dc:subject>0</dc:subject>\n</image>}),
          "1.0 - Checking for image/dc/subject == 0");
 }
 
 {
-    my $rss = create_item_with_0_rss({version => "1.0", 
-            item_params => 
+    my $rss = create_item_with_0_rss({version => "1.0",
+            item_params =>
             [
                 description => "Hello There",
                 about => "Yowza",
@@ -1436,7 +1436,7 @@ sub create_rss_without_item
             my $rss = create_channel_rss({
                     version => "2.0",
                     channel_params =>
-                    [$dc ? 
+                    [$dc ?
                         (dc => {$field => 0 }) :
                         ($field => 0)
                     ],
@@ -1446,7 +1446,7 @@ sub create_rss_without_item
                 "<title>freshmeat.net</title>\n" .
                 "<link>http://freshmeat.net</link>\n" .
                 "<description>Linux software</description>\n" .
-                "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" . 
+                "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" .
                 "<$field>0</$field>\n" .
                 "\n" .
                 "<item>\n",
@@ -1458,7 +1458,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "0.91", 
+            version => "0.91",
             channel_params => [pubDate => "</pubDate><hello>There&amp;Everywhere</hello>"],
         });
     # TEST
@@ -1475,7 +1475,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "0.91", 
+            version => "0.91",
             channel_params => [lastBuildDate => "</pubDate><hello>There&amp;Everywhere</hello>"],
         });
     # TEST
@@ -1493,9 +1493,9 @@ sub create_rss_without_item
 {
     my $rss = create_channel_rss({
         version => "1.0",
-        channel_params => 
+        channel_params =>
         [
-            dc => 
+            dc =>
             {
                 date => "</pubDate><hello>There&amp;Everywhere</hello>"
             },
@@ -1513,7 +1513,7 @@ sub create_rss_without_item
 }
 
 {
-    my $rss = create_channel_rss({version => "2.0", 
+    my $rss = create_channel_rss({version => "2.0",
             channel_params => [pubDate => "</pubDate><hello>There&amp;Everywhere</hello>"],
             omit_date => 1,
         });
@@ -1530,7 +1530,7 @@ sub create_rss_without_item
 }
 
 {
-    my $rss = create_channel_rss({version => "2.0", 
+    my $rss = create_channel_rss({version => "2.0",
             channel_params => [lastBuildDate => "</pubDate><hello>There&amp;Everywhere</hello>"],
             omit_date => 1,
         });
@@ -1558,8 +1558,8 @@ sub create_rss_without_item
 {
     my $rss = create_rss_with_image_w_undef_link({version => "1.0"});
     # TEST
-    contains ($rss, 
-        qq{<image rdf:about="0">\n<title>freshmeat.net</title>\n} . 
+    contains ($rss,
+        qq{<image rdf:about="0">\n<title>freshmeat.net</title>\n} .
         qq{<url>0</url>\n</image>\n},
         "Image with undefined link does not render the Image - RSS version 1.0"
     );
@@ -1567,7 +1567,7 @@ sub create_rss_without_item
 
 {
     my $rss = create_channel_rss({
-            version => "1.0", 
+            version => "1.0",
             channel_params => [about => "http://xml-rss-hackers.tld/"],
         });
     # TEST
@@ -1583,7 +1583,7 @@ sub create_rss_without_item
 {
     my $rss = create_channel_rss({
         version => "1.0",
-        channel_params => 
+        channel_params =>
         [
             taxo => ["Foo", "Bar", "QuGof", "Lambda&Delta"],
         ],
@@ -1607,7 +1607,7 @@ sub create_rss_without_item
 {
     my $rss = create_channel_rss({
         version => "1.0",
-        channel_params => 
+        channel_params =>
         [
             admin => { 'foobar' => "Quod", },
         ],
@@ -1626,7 +1626,7 @@ sub create_rss_without_item
 {
     my $rss = create_channel_rss({
         version => "1.0",
-        channel_params => 
+        channel_params =>
         [
             eloq => { 'grow' => "There", },
         ],
@@ -1647,7 +1647,7 @@ sub create_rss_without_item
 {
     my $rss = create_rss_1({
         version => "1.0",
-        image_params => 
+        image_params =>
         [
             admin => { 'foobar' => "Quod", },
         ],
@@ -1666,7 +1666,7 @@ sub create_rss_without_item
 {
     my $rss = create_rss_1({
         version => "1.0",
-        image_params => 
+        image_params =>
         [
             eloq => { 'grow' => "There", },
         ],
@@ -1687,7 +1687,7 @@ sub create_rss_without_item
 {
     my $rss = create_rss_1({
         version => "1.0",
-        image_params => 
+        image_params =>
         [
             admin => { 'generatorAgent' => "Spozilla 5.5", },
         ],
@@ -1718,13 +1718,13 @@ sub create_rss_without_item
     contains($rss, "<item rdf:about=\"http://jungle.tld/Enter/\">\n" .
         "<title>In the Jungle</title>\n" .
         "<link>http://jungle.tld/Enter/</link>\n" .
-        qq{<taxo:topics>\n} . 
+        qq{<taxo:topics>\n} .
         qq{  <rdf:Bag>\n} .
         qq{    <rdf:li resource="Foo" />\n} .
         qq{    <rdf:li resource="Loom" />\n} .
         qq{    <rdf:li resource="&#x3C;Ard&#x3E;" />\n} .
         qq{    <rdf:li resource="Yok&#x26;Dol" />\n} .
-        qq{  </rdf:Bag>\n} . 
+        qq{  </rdf:Bag>\n} .
         qq{</taxo:topics>\n} .
         "</item>\n",
         "1.0 - item/taxo:topics (with escaping)"
@@ -1736,7 +1736,7 @@ sub create_rss_without_item
 {
     my $rss = create_item_rss({
         version => "1.0",
-        item_params => 
+        item_params =>
         [
             admin => { 'foobar' => "Quod", },
         ],
@@ -1755,7 +1755,7 @@ sub create_rss_without_item
 {
     my $rss = create_item_rss({
         version => "1.0",
-        item_params => 
+        item_params =>
         [
             eloq => { 'grow' => "There", },
         ],
@@ -1767,7 +1767,7 @@ sub create_rss_without_item
     contains($rss, "<item rdf:about=\"http://fc-solve.berlios.de/\">\n" .
         "<title>Freecell Solver</title>\n" .
         "<link>http://fc-solve.berlios.de/</link>\n" .
-        "<eloq:grow>There</eloq:grow>\n" .        
+        "<eloq:grow>There</eloq:grow>\n" .
         "</item>",
         '1.0 - item/[module] with new module'
     );
@@ -1776,7 +1776,7 @@ sub create_rss_without_item
 {
     my $rss = create_item_rss({
         version => "1.0",
-        item_params => 
+        item_params =>
         [
             admin => { 'generatorAgent' => "Spozilla 5.5", },
         ],
@@ -1811,7 +1811,7 @@ sub create_rss_without_item
 {
     my $rss = create_channel_rss({
         version => "2.0",
-        channel_params => 
+        channel_params =>
         [
             admin => { 'generatorAgent' => "Spozilla 5.5", },
         ],
@@ -1826,7 +1826,7 @@ sub create_rss_without_item
         "<description>Linux software</description>\n" .
         "<lastBuildDate>Sat, 07 Sep 2002 09:42:31 GMT</lastBuildDate>\n" .
         "<admin:generatorAgent rdf:resource=\"Spozilla 5.5\" />\n" .
-        "\n" . 
+        "\n" .
         "<item>\n",
         '2.0 - channel/[module] with known module and key'
     );
@@ -1836,7 +1836,7 @@ sub create_rss_without_item
 {
     my $rss = create_channel_rss({
         version => "2.0",
-        channel_params => 
+        channel_params =>
         [
             admin => { 'foobar' => "Quod", },
         ],
@@ -1858,7 +1858,7 @@ sub create_rss_without_item
 {
     my $rss = create_channel_rss({
         version => "2.0",
-        channel_params => 
+        channel_params =>
         [
             eloq => { 'grow' => "There", },
         ],
@@ -1884,7 +1884,7 @@ sub create_rss_without_item
 {
     my $rss = create_rss_1({
         version => "2.0",
-        image_params => 
+        image_params =>
         [
             admin => { 'foobar' => "Quod", },
         ],
@@ -1904,7 +1904,7 @@ sub create_rss_without_item
 {
     my $rss = create_rss_1({
         version => "2.0",
-        image_params => 
+        image_params =>
         [
             eloq => { 'grow' => "There", },
         ],
@@ -1925,7 +1925,7 @@ sub create_rss_without_item
 {
     my $rss = create_rss_1({
         version => "2.0",
-        image_params => 
+        image_params =>
         [
             admin => { 'generatorAgent' => "Spozilla 5.5", },
         ],
@@ -1947,7 +1947,7 @@ sub create_rss_without_item
 {
     my $rss = create_item_rss({
         version => "2.0",
-        item_params => 
+        item_params =>
         [
             admin => { 'foobar' => "Quod", },
         ],
@@ -1967,7 +1967,7 @@ sub create_rss_without_item
 {
     my $rss = create_item_rss({
         version => "2.0",
-        item_params => 
+        item_params =>
         [
             eloq => { 'grow' => "There", },
         ],
@@ -1979,7 +1979,7 @@ sub create_rss_without_item
     contains($rss, "<item>\n" .
         "<title>Freecell Solver</title>\n" .
         "<link>http://fc-solve.berlios.de/</link>\n" .
-        "<eloq:grow>There</eloq:grow>\n" .        
+        "<eloq:grow>There</eloq:grow>\n" .
         "</item>",
         '2.0 - item/[module] with new module'
     );
@@ -1988,7 +1988,7 @@ sub create_rss_without_item
 {
     my $rss = create_item_rss({
         version => "2.0",
-        item_params => 
+        item_params =>
         [
             admin => { 'generatorAgent' => "Spozilla 5.5", },
         ],
@@ -2031,7 +2031,7 @@ sub create_rss_without_item
         )
     {
         my $rss = create_item_with_0_rss({version => "2.0",
-                item_params => 
+                item_params =>
                 [
                     title => "Foo&Bar",
                     link => "http://www.mylongtldyeahbaby/",
@@ -2059,7 +2059,7 @@ sub create_rss_without_item
     # version "3.5" in order to test that version 1.0 is the default
     # version for output.
     my $rss = create_channel_rss({
-            version => "2.0", 
+            version => "2.0",
             channel_params =>
             [copyright => "Martha", managingEditor => 0,],
             omit_date => 1,
@@ -2156,12 +2156,12 @@ sub parse_generated_rss
     $rss_generator->{output} = $args->{version};
 
     my $output = $rss_generator->as_string();
-    
+
     if ($args->{postproc})
     {
         $args->{postproc}->(\$output);
     }
-    
+
     my $parser = XML::RSS->new(version => $args->{version});
 
     $parser->parse($output);
@@ -2175,7 +2175,7 @@ sub parse_generated_rss
             func => \&create_textinput_with_0_rss,
             version => "0.9",
             textinput_params => [
-                description => "Welcome to the Jungle.", 
+                description => "Welcome to the Jungle.",
                 'link' => "http://fooque.tld/",
                 'title' => "The Jungle of the City",
                 'name' => "There's more than one way to do it.",
@@ -2221,7 +2221,7 @@ sub parse_generated_rss
                 func => \&create_textinput_with_0_rss,
                 version => "0.9",
                 textinput_params => [
-                    description => "Welcome to the Jungle.", 
+                    description => "Welcome to the Jungle.",
                     'link' => "http://fooque.tld/",
                     'title' => "The Jungle of the City",
                     'name' => "There's more than one way to do it.",
@@ -2232,7 +2232,7 @@ sub parse_generated_rss
                         s{(<rdf:RDF)[^>]*(>)}{<rss version="0.9">};
                         s{</rdf:RDF>}{</rss>};
                         s{<(/?)textinput>}{<$1textInput>}g;
-                    }   
+                    }
                 },
             }
         );
@@ -2269,7 +2269,7 @@ sub parse_generated_rss
                 func => \&create_textinput_with_0_rss,
                 version => "0.9",
                 textinput_params => [
-                    description => "Welcome to the Jungle.", 
+                    description => "Welcome to the Jungle.",
                     'link' => "http://fooque.tld/",
                     'title' => "The Jungle of the City",
                     'name' => "There's more than one way to do it.",
@@ -2313,7 +2313,7 @@ sub parse_generated_rss
         parse_generated_rss(
             {
                 func => \&create_skipHours_rss,
-                version => "0.91", 
+                version => "0.91",
                 skipHours_params => [ hour => "5" ],
             }
         );
@@ -2330,11 +2330,11 @@ sub parse_generated_rss
         parse_generated_rss(
             {
                 func => \&create_skipHours_rss,
-                version => "2.0", 
+                version => "2.0",
                 skipHours_params => [ hour => "5" ],
             }
         );
-    
+
     # TEST
     is ($rss_parser->{skipHours}->{hour},
         "5",
@@ -2349,7 +2349,7 @@ sub parse_generated_rss
         parse_generated_rss(
             {
                 func => \&create_skipDays_rss,
-                version => "0.91", 
+                version => "0.91",
                 skipDays_params => [ day => "5" ],
             }
         );
@@ -2366,11 +2366,11 @@ sub parse_generated_rss
         parse_generated_rss(
             {
                 func => \&create_skipDays_rss,
-                version => "2.0", 
+                version => "2.0",
                 skipDays_params => [ day => "5" ],
             }
         );
-    
+
     # TEST
     is ($rss_parser->{skipDays}->{day},
         "5",
@@ -3908,7 +3908,7 @@ EOF
     $rss->add_module(prefix=>'media', uri=>'http://search.yahoo.com/mrss/');
 
     # TEST
-    contains($rss, 
+    contains($rss,
         qq{<media:content height="100" type="image/jpeg" url="http://somrurl.org/img/foo.jpg" width="100"/>\n},
         "namespaces with attributes are rendered correctly. (bug #25336)"
     );
@@ -3919,7 +3919,7 @@ EOF
 
     {
         my $rss = XML::RSS->new( 'xml:base' => 'http://example.com/' );
-        
+
         # TEST
         ok($rss, "Created new rss");
 
@@ -3979,7 +3979,7 @@ EOF
 
         # TEST
         is(
-            $rss->{'xml:base'}, 
+            $rss->{'xml:base'},
             'http://foo.com/',
             "Found parsed rss base"
         );
@@ -3989,7 +3989,7 @@ EOF
 
         my $item = $rss->{items}->[0];
 
-        # TEST        
+        # TEST
         is($item->{'xml:base'}, 'http://foo.com/archive/',
             "Found parsed item base"
         );
@@ -4010,7 +4010,7 @@ EOF
 
         # TEST
         is(
-            $rss->{'xml:base'}, 
+            $rss->{'xml:base'},
             'http://foo.com/',
             "Found parsed rss base"
         );
@@ -4020,12 +4020,12 @@ EOF
 
         my $item = $rss->{items}->[0];
 
-        # TEST        
+        # TEST
         is($item->{'xml:base'}, 'http://foo.com/archive/',       "Found parsed item base");
         # TEST
         is($item->{description}->{'xml:base'}, 'http://foo.com/archive/1.html', "Found parsed description base");
     }
-    
+
 }
 
 {
@@ -4033,7 +4033,7 @@ EOF
 
     {
         my $rss = XML::RSS->new( 'xml:base' => 'http://example.com/' );
-        
+
         # TEST
         ok($rss, "Created new rss");
 
@@ -4075,7 +4075,7 @@ EOF
 {
     my $rss = create_rss_1({
         version => "1.0",
-        image_params => 
+        image_params =>
         [
             eloq =>
             [
@@ -4165,7 +4165,7 @@ EOF
 
 {
     my $rss = create_skipDays_rss({
-            version => "2.0", 
+            version => "2.0",
             skipDays_params => [ day => [qw(Sunday Thursday Saturday)] ],
         });
     # TEST
@@ -4181,7 +4181,7 @@ EOF
 
 {
     my $rss = create_skipHours_rss({
-            version => "2.0", 
+            version => "2.0",
             skipHours_params => [ hour => [qw(5 10 16)] ],
         });
     # TEST
@@ -4196,8 +4196,8 @@ EOF
 
 
 {
-    my $rss = create_item_with_0_rss({version => "2.0", 
-            item_params => 
+    my $rss = create_item_with_0_rss({version => "2.0",
+            item_params =>
             [
                 title => "Foo&Bar",
                 link => "http://www.mytld/",
@@ -4226,7 +4226,7 @@ EOF
     # version "3.5" in order to test that version 1.0 is the default
     # version for output.
     my $rss = create_channel_rss({
-            version => "2.0", 
+            version => "2.0",
             channel_params =>
             [category => [qw(OneCat TooManyCats KittensGalore)]],
             omit_date => 1,
@@ -1,5 +1,7 @@
 load.t
 pod.t
+cpan-changes.t
+style-trailing-space.t
 version.t
 render-upon-init.t
 encoding.t
@@ -8,6 +10,7 @@ encoding.t
 0.9-strict.t
 0.91-parse.t
 1.0-generate.t
+1.0-gen-errors-on-missing-fields.t
 1.0-parse.t
 1.0-parse-2.t
 1.0-parse-exotic.t
@@ -12,7 +12,7 @@ my $rss = XML::RSS->new( version => '0.9' );
 isa_ok( $rss, 'XML::RSS' );
 make_rss( $rss );
 # TEST
-like( $rss->as_string, 
+like( $rss->as_string,
 	qr|<rdf:RDF[\d\D]+xmlns="http://my.netscape.com/rdf/simple/0.9/"[^>]*>|,
 	"rdf tag for version 0.9" );
 
@@ -31,7 +31,7 @@ isa_ok( $rss, 'XML::RSS' );
 make_rss( $rss );
 
 # TEST
-like( $rss->as_string, 
+like( $rss->as_string,
 	qr|<rdf:RDF[\d\D]+xmlns="http://purl.org/rss/1.0/"[^>]*>|,
 	"rdf tag for version 1.0" );
 }
@@ -45,7 +45,7 @@ sub make_rss
         link  => 'http://www.example.com',
         description => '',
         );
-        
+
 }
 
 {
@@ -27,11 +27,11 @@ sub output_contains
 
 my $xml;
 
-{ 
+{
     my $rss;
 
     $rss  = XML::RSS->new( 'xml:base' => 'http://example.com' );
-    
+
     # TEST
     ok ($rss, "Created new rss");
 
@@ -41,8 +41,8 @@ my $xml;
     $rss->{'xml:base'} = 'http://foo.com/';
 
     # TEST
-    ok($rss->channel( 
-        title       => 'Test Feed', 
+    ok($rss->channel(
+        title       => 'Test Feed',
         link        => "http://example.com",
         description => "Foo",
     ), "Added channel");
@@ -89,7 +89,7 @@ my $xml;
 
     # TEST
     ok(
-        $rss->parse($xml, { hashrefs_instead_of_strings => 1 }), 
+        $rss->parse($xml, { hashrefs_instead_of_strings => 1 }),
         "Reparsed xml"
     );
 
@@ -106,7 +106,7 @@ my $xml;
         1,
         "Got 1 item"
     );
-    
+
     my $item = $rss->{items}->[0];
 
     # TEST
@@ -121,7 +121,7 @@ my $xml;
             # TEST
             is(
                 $item->{description}->{'xml:base'},
-                'http://foo.com/archive/1.html', 
+                'http://foo.com/archive/1.html',
                 "Found parsed description base"
             );
         } else {
@@ -11,7 +11,7 @@ sub starts_with
 {
     local $Test::Builder::Level = $Test::Builder::Level + 1;
     my ($rss, $prefix, $msg) = @_;
-    
+
     my $rss_output = $rss->as_string();
     my $ok = is (
         substr($rss_output, 0, length($prefix)-1),
@@ -24,7 +24,7 @@ sub create_rss_1
 {
     my $args = shift;
     my @style =
-        exists($args->{stylesheet}) ? 
+        exists($args->{stylesheet}) ?
             (stylesheet => $args->{stylesheet}) :
             ()
             ;
@@ -32,7 +32,7 @@ sub create_rss_1
         version => $args->{version},
         @style
     );
-    my $image_link = exists($args->{image_link}) ? $args->{image_link} : 
+    my $image_link = exists($args->{image_link}) ? $args->{image_link} :
         "http://freshmeat.net/";
 
     my $extra_image_params = $args->{image_params} || [];
@@ -14,13 +14,13 @@ sub run_t_manifest
     require Test::Run::CmdLine::Iface;
     my ($test_verbose, $inst_lib, $inst_archlib, $test_level) = @_;
     local @INC = @INC;
-    unshift @INC, map { File::Spec->rel2abs($_) } ($inst_lib, $inst_archlib); 
-    
+    unshift @INC, map { File::Spec->rel2abs($_) } ($inst_lib, $inst_archlib);
+
     my $test_iface = Test::Run::CmdLine::Iface->new({
             test_files => [Test::Manifest::get_t_files()]
         }
     );
-    
+
     return $test_iface->run();
 }