gnu: hidapi: Fix 'license'.
[jackhill/guix/guix.git] / gnu / packages / perl.scm
index 8fec270..6b3d0a7 100644 (file)
@@ -1,9 +1,17 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
-;;; Copyright © 2015 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2015, 2016 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
+;;; Copyright © 2016 Mark H Weaver <mhw@netris.org>
+;;; Copyright © 2016 Jochem Raat <jchmrt@riseup.net>
+;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
+;;; Coypright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;; Copyright © 2016 Alex Sassmannshausen <alex@pompo.co>
+;;; Copyright © 2016 Roel Janssen <roel@gnu.org>
+;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
+;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   ;; Yeah, Perl...  It is required early in the bootstrap process by Linux.
   (package
     (name "perl")
-    (version "5.22.0")
+    (version "5.22.1")
     (source (origin
              (method url-fetch)
              (uri (string-append "http://www.cpan.org/src/5.0/perl-"
                                  version ".tar.gz"))
              (sha256
               (base32
-               "0g5bl8sdpzx9gx2g5jq3py4bj07z2ylk7s1qn0fvsss2yl3hhs8c"))
-             (patches (map search-patch
-                           '("perl-no-sys-dirs.patch"
-                             "perl-autosplit-default-time.patch")))))
+               "09wg24w5syyafyv87l6z8pxwz4bjgcdj996bx5844k6m9445sirb"))
+             (patches (search-patches
+                       "perl-no-sys-dirs.patch"
+                       "perl-autosplit-default-time.patch"
+                       "perl-source-date-epoch.patch"
+                       "perl-deterministic-ordering.patch"
+                       "perl-no-build-time.patch"
+                       "perl-CVE-2015-8607.patch"
+                       "perl-CVE-2016-2381.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:tests? #f
                         "-Dinstallstyle=lib/perl5"
                         "-Duseshrplib"
                         (string-append "-Dlocincpth=" libc "/include")
-                        (string-append "-Dloclibpth=" libc "/lib")
-
-                        ;; Force the library search path to contain only libc
-                        ;; because it is recorded in Config.pm and
-                        ;; Config_heavy.pl; we don't want to keep a reference
-                        ;; to everything that's in $LIBRARY_PATH at build
-                        ;; time (Binutils, bzip2, file, etc.)
-                        (string-append "-Dlibpth=" libc "/lib")
-                        (string-append "-Dplibpth=" libc "/lib"))))))
+                        (string-append "-Dloclibpth=" libc "/lib"))))))
 
          (add-before
           'strip 'make-shared-objects-writable
                    (lib (string-append out "/lib")))
               (for-each (lambda (dso)
                           (chmod dso #o755))
-                        (find-files lib "\\.so$"))))))))
+                        (find-files lib "\\.so$")))))
+
+         (add-after 'install 'remove-extra-references
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out     (assoc-ref outputs "out"))
+                    (libc    (assoc-ref inputs "libc"))
+                    (config1 (car (find-files (string-append out "/lib/perl5")
+                                              "^Config_heavy\\.pl$")))
+                    (config2 (find-files (string-append out "/lib/perl5")
+                                         "^Config\\.pm$")))
+               ;; Force the library search path to contain only libc because
+               ;; it is recorded in Config.pm and Config_heavy.pl; we don't
+               ;; want to keep a reference to everything that's in
+               ;; $LIBRARY_PATH at build time (GCC, Binutils, bzip2, file,
+               ;; etc.)
+               (substitute* config1
+                 (("^incpth=.*$")
+                  (string-append "incpth='" libc "/include'\n"))
+                 (("^(libpth|plibpth|libspath)=.*$" _ variable)
+                  (string-append variable "='" libc "/lib'\n")))
+
+               (for-each (lambda (file)
+                           (substitute* config2
+                             (("libpth => .*$")
+                              (string-append "libpth => '" libc
+                                             "/lib',\n"))))
+                         config2)
+               #t))))))
     (native-search-paths (list (search-path-specification
                                 (variable "PERL5LIB")
                                 (files '("lib/perl5/site_perl")))))
@@ -163,6 +195,7 @@ differences.")
         (base32
          "1syyqzy462501kn5ma9gl6xbmcahqcn4qpafhsmpz0nd0x2m4l63"))))
     (build-system perl-build-system)
+    (native-inputs `(("perl-module-build" ,perl-module-build)))
     (home-page "http://search.cpan.org/dist/aliased")
     (synopsis "Use shorter versions of class names")
     (description "The alias module loads the class you specify and exports
@@ -212,6 +245,27 @@ manipulate, read, and write Zip archive files.")
     (home-page "http://search.cpan.org/~phred/Archive-Zip-1.37/lib/Archive/Zip.pm")
     (license (package-license perl))))
 
+(define-public perl-array-utils
+  (package
+    (name "perl-array-utils")
+    (version "0.5")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/Z/ZM/ZMIJ/Array/Array-Utils-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0w1pwvnjdpb0n6k07zbknxwx6v7y75p4jxrs594pjhwvrmzippc9"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Array-Utils")
+    (synopsis "Small utils for array manipulation")
+    (description "@code{Array::Utils} is a small pure-perl module containing
+list manipulation routines.")
+    (license (package-license perl))))
+
 (define-public perl-base
   (package
     (name "perl-base")
@@ -350,7 +404,7 @@ in web applications to store data locally to save repeated and redundant
 expensive calls to remote machines or databases.  People have also been known
 to use Cache::Cache for its straightforward interface in sharing data between
 runs of an application or invocations of a CGI-style script or simply as an
-easy to use abstraction of the filesystem or shared memory.")
+easy to use abstraction of the file system or shared memory.")
     (license (package-license perl))))
 
 (define-public perl-cache-fastmmap
@@ -498,6 +552,8 @@ your class.")
         (base32
          "1lilrjy1s0q5hyr0888kf0ifxjyl2iyk4vxil4jsv0sgh39lkgx5"))))
     (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
     (propagated-inputs
      `(("perl-class-accessor" ,perl-class-accessor)))
     (home-page "http://search.cpan.org/dist/Class-Accessor-Chained")
@@ -645,6 +701,27 @@ subclasses and can be overridden.")
 type for perl.")
     (license (package-license perl))))
 
+(define-public perl-class-errorhandler
+  (package
+    (name "perl-class-errorhandler")
+    (version "0.04")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/T/TO/TOKUHIROM/"
+                                  "Class-ErrorHandler-" version ".tar.gz"))
+              (sha256
+               (base32
+                "00j5f0z4riyq7i95jww291dpmbn0hmmvkcbrh7p0p8lpqz7jsb9l"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Class-ErrorHandler")
+    (synopsis "Base class for error handling")
+    (description
+     "@code{Class::ErrorHandler} provides an error-handling mechanism that is generic
+enough to be used as the base class for a variety of OO classes.  Subclasses inherit
+its two error-handling methods, error and errstr, to communicate error messages back
+to the calling program.")
+    (license (package-license perl))))
+
 (define-public perl-class-factory-util
   (package
     (name "perl-class-factory-util")
@@ -658,6 +735,7 @@ type for perl.")
         (base32
          "09ifd6v0c94vr20n9yr1dxgcp7hyscqq851szdip7y24bd26nlbc"))))
     (build-system perl-build-system)
+    (native-inputs `(("perl-module-build" ,perl-module-build)))
     (home-page "http://search.cpan.org/dist/Class-Factory-Util")
     (synopsis "Utility methods for factory classes")
     (description "This module exports methods useful for factory classes.")
@@ -916,6 +994,8 @@ as defined by two typical specimens of Perl coders.")
         (base32
          "06n6jn3q3xhk57icwip0ihzqixxav6sgp6rrb35hahj1z748y3vi"))))
     (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-module-pluggable" ,perl-module-pluggable)))
     (home-page "http://search.cpan.org/dist/Config-Any")
     (synopsis "Load configuration from different file formats")
     (description "Config::Any provides a facility for Perl applications and
@@ -968,6 +1048,29 @@ some enhancements such as here-documents, C-style comments, and multiline
 options.")
     (license (package-license perl))))
 
+(define-public perl-config-ini
+  (package
+    (name "perl-config-ini")
+    (version "0.025")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/R/RJ/RJBS/Config-INI-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0clphq6a17chvb663fvjnxqvyvh26g03x0fl4bg9vy4ibdnzg2v2"))))
+    (build-system perl-build-system)
+    (inputs
+     `(("perl-mixin-linewise" ,perl-mixin-linewise)
+       ("perl-perlio-utf8_strict" ,perl-perlio-utf8_strict)
+       ("perl-sub-exporter" ,perl-sub-exporter)))
+    (home-page "http://search.cpan.org/dist/Config-INI")
+    (synopsis "Simple .ini-file format reader and writer")
+    (description "@code{Config::INI} is a module that facilates the reading
+and writing of @code{.ini}-style configuration files.")
+    (license (package-license perl))))
+
 (define-public perl-context-preserve
   (package
     (name "perl-context-preserve")
@@ -1173,7 +1276,8 @@ indentation and newlines plus sub deparsing.")
          "1hvi92c4h2angryc6pngw7gbm3ysc2jfmyxk2wh9ia4vdwpbs554"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     `(("perl-module-build" ,perl-module-build)
+       ("perl-test-exception" ,perl-test-exception)))
     (propagated-inputs
      `(("perl-class-accessor-chained" ,perl-class-accessor-chained)))
     (home-page "http://search.cpan.org/dist/Data-Page")
@@ -1351,6 +1455,7 @@ Date::Calc.")
         (base32
          "0zd0wbf91i49753rnf7m1lw197hdl5r97mxy0n43zdmcmhvkb3qq"))))
     (build-system perl-build-system)
+    (native-inputs `(("perl-module-build" ,perl-module-build)))
     (arguments
      ;; Tests would require tzdata for timezone information, but tzdata is in
      ;; (gnu packages base) which would create a circular dependency.  TODO:
@@ -1377,7 +1482,8 @@ time from another, or parsing international times.")
          "0fli1ls298qa8nfki15myxqqqfpxvslxk4j5r3vjk577wfgjrnms"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
+     `(("perl-module-build" ,perl-module-build)
+       ("perl-test-fatal" ,perl-test-fatal)
        ("perl-test-warnings" ,perl-test-warnings)))
     (propagated-inputs
      `(("perl-datetime-locale" ,perl-datetime-locale)
@@ -1404,6 +1510,8 @@ time before its creation (in 1582).")
         (base32
          "1b27699zkj68w5ll9chjhs52vmf39f9via6x5r5844as30qh9zxb"))))
     (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
     (propagated-inputs
      `(("perl-datetime" ,perl-datetime)
        ("perl-params-validate" ,perl-params-validate)
@@ -1506,6 +1614,7 @@ to do this without writing reams of structural code.")
        ("perl-datetime-format-builder" ,perl-datetime-format-builder)
        ("perl-datetime-timezone" ,perl-datetime-timezone)
        ("perl-list-moreutils" ,perl-list-moreutils)
+       ("perl-module-pluggable" ,perl-module-pluggable)
        ("perl-test-mocktime" ,perl-test-mocktime)))
     (home-page "http://search.cpan.org/dist/DateTime-Format-Flexible")
     (synopsis "Parse data/time strings")
@@ -1526,6 +1635,8 @@ give it and parse it into a DateTime object.")
         (base32
          "0cvwk7pigj7czsp81z35h7prxvylkrlk2l0kwvq0v72ykx9zc2cb"))))
     (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
     (propagated-inputs
      `(("perl-datetime" ,perl-datetime)
        ("perl-datetime-event-ical" ,perl-datetime-event-ical)
@@ -1553,7 +1664,8 @@ order to create the appropriate objects.")
          "1qq3adq1y08d0jlmwk9059s5d39hb26f3zjag099gjjyvs5c8yal"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-module-util" ,perl-module-util)
+     `(("perl-module-build" ,perl-module-build)
+       ("perl-module-util" ,perl-module-util)
        ("perl-test-mocktime" ,perl-test-mocktime)))
     (propagated-inputs
      `(("perl-boolean" ,perl-boolean)
@@ -1610,6 +1722,8 @@ takes a string and a pattern and returns the `DateTime` object associated.")
         (base32
          "175grkrxiv012n6ch3z1sip4zprcili6m5zqi3njdk5c1gdvi8ca"))))
     (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
     (propagated-inputs
      `(("perl-list-moreutils" ,perl-list-moreutils)
        ("perl-params-validate" ,perl-params-validate)))
@@ -1679,6 +1793,53 @@ to create DateTime objects, with some custom tweaks to smooth out the rough
 edges (mainly concerning timezone detection and selection).")
     (license (package-license perl))))
 
+(define-public perl-datetime-format-mail
+  (package
+    (name "perl-datetime-format-mail")
+    (version "0.403")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/B/BO/BOOK/"
+                                  "DateTime-Format-Mail-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1c7wapbi9g9p2za52l3skhh31vg4da5kx2yfqzsqyf3p8iff7y4d"))))
+    (build-system perl-build-system)
+    (inputs
+     `(("perl-datetime" ,perl-datetime)
+       ("perl-params-validate" ,perl-params-validate)))
+    (home-page "http://search.cpan.org/dist/DateTime-Format-Mail")
+    (synopsis "Convert between DateTime and RFC2822/822 formats")
+    (description "RFCs 2822 and 822 specify date formats to be used by email.
+This module parses and emits such dates.")
+    (license (package-license perl))))
+
+(define-public perl-datetime-format-w3cdtf
+  (package
+    (name "perl-datetime-format-w3cdtf")
+    (version "0.06")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/G/GW/GWILLIAMS/"
+                                  "DateTime-Format-W3CDTF-" version ".tar.gz"))
+              (sha256
+               (base32
+                "0ymxizwd2zfx8b4bmrmv4k439qwfwf2522jrvn4hlay5v6z459dr"))))
+    (build-system perl-build-system)
+    (inputs
+     `(("perl-datetime" ,perl-datetime)))
+    (native-inputs
+     `(("perl-test-pod" ,perl-test-pod)
+       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+    (home-page "http://search.cpan.org/dist/DateTime-Format-W3CDTF")
+    (synopsis "Parse and format W3CDTF datetime strings")
+    (description
+     "This module understands the W3CDTF date/time format, an ISO 8601 profile,
+defined at https://www.w3.org/TR/NOTE-datetime.  This format is the native date
+format of RSS 1.0.  It can be used to parse these formats in order to create
+the appropriate objects.")
+    (license (package-license perl))))
+
 (define-public perl-devel-caller
   (package
     (name "perl-devel-caller")
@@ -1712,6 +1873,7 @@ edges (mainly concerning timezone detection and selection).")
         (base32
          "0g71sma9jy0fjm619hcrcsb9spg2y03vjxx36y8k1xpa2553sr7m"))))
     (build-system perl-build-system)
+    (native-inputs `(("perl-module-build" ,perl-module-build)))
     (home-page "http://search.cpan.org/dist/Devel-CheckBin")
     (synopsis "Check that a command is available")
     (description "Devel::CheckBin is a perl module that checks whether a
@@ -1859,7 +2021,7 @@ each stack frame.")
 (define-public perl-devel-symdump
   (package
     (name "perl-devel-symdump")
-    (version "2.14")
+    (version "2.17")
     (source
      (origin
        (method url-fetch)
@@ -1867,7 +2029,7 @@ each stack frame.")
                            "Devel-Symdump-" version ".tar.gz"))
        (sha256
         (base32
-         "1phyyxgxsymgzbjd524zlaavvay6vjw34af5zn9153qffqign54v"))))
+         "0qkfjk7bm7jwn9d9qaldg298zvkqh2f19fgvfh5j1rp66mwzql1c"))))
     (build-system perl-build-system)
     (home-page "http://search.cpan.org/dist/Devel-Symdump")
     (synopsis "Dump symbol names or the symbol table")
@@ -1934,6 +2096,29 @@ SHA-1 message digest algorithm for use by Perl programs.")
 modules separately and deal with them after the module is done installing.")
     (license (package-license perl))))
 
+(define-public perl-env-path
+  (package
+    (name "perl-env-path")
+    (version "0.19")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/D/DS/DSB/Env-Path-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1qhmj15a66h90pjl2dgnxsb9jj3b1r5mpvnr87cafcl8g69z0jr4"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Env-Path")
+    (synopsis "Advanced operations on path variables")
+    (description "@code{Env::Path} presents an object-oriented interface to
+path variables, defined as that subclass of environment variables which name
+an ordered list of file system elements separated by a platform-standard
+separator.")
+    (license (package-license perl))))
+
 (define-public perl-error
   (package
     (name "perl-error")
@@ -1946,6 +2131,7 @@ modules separately and deal with them after the module is done installing.")
                (base32
                 "0dsxic78mxy30qvbbdzfyp501hbkwhnbmafqfxipr0yqfy8f2j5g"))))
     (build-system perl-build-system)
+    (native-inputs `(("perl-module-build" ,perl-module-build)))
     (home-page "http://search.cpan.org/dist/Error")
     (synopsis "OO-ish Error/Exception handling for Perl")
     (description "The Error package provides two interfaces.  Firstly Error
@@ -2011,22 +2197,21 @@ in your modules in a \"Java-esque\" manner.")
 (define-public perl-exporter-lite
   (package
     (name "perl-exporter-lite")
-    (version "0.06")
+    (version "0.08")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/N/NE/NEILB/"
                                   "Exporter-Lite-" version ".tar.gz"))
               (sha256
                (base32
-                "0k4gkvid4fr8yvwj0axdx5111mzfw2iipls3qllxr364fqhmclpj"))))
+                "1hns15imih8z2h6zv3m1wwmv9fiysacsb52y94v6zf2cmw4kjny0"))))
     (build-system perl-build-system)
     (synopsis "Lightweight exporting of functions and variables")
     (description
      "Exporter::Lite is an alternative to Exporter, intended to provide a
 lightweight subset of the most commonly-used functionality.  It supports
 import(), @@EXPORT and @@EXPORT_OK and not a whole lot else.")
-    (home-page (string-append "http://search.cpan.org/~neilb/"
-                              "Exporter-Lite-" version))
+    (home-page "http://search.cpan.org/dist/Exporter-Lite")
     (license (package-license perl))))
 
 (define-public perl-exporter-tiny
@@ -2125,10 +2310,12 @@ module building modules.")
          "090i265f73jlcl5rv250791vw32j9vvl4nd5abc7myg0klb8109w"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     `(("perl-module-build" ,perl-module-build)
+       ("perl-test-exception" ,perl-test-exception)))
     (propagated-inputs
      `(("perl-class-load" ,perl-class-load)
        ("perl-list-moreutils" ,perl-list-moreutils)
+       ("perl-module-pluggable" ,perl-module-pluggable)
        ("perl-moose" ,perl-moose)
        ("perl-moosex-params-validate" ,perl-moosex-params-validate)
        ("perl-moosex-semiaffordanceaccessor"
@@ -2207,6 +2394,29 @@ types Perl-related files, or replicating search queries run on a distribution
 in various parts of the CPAN ecosystem.")
     (license (package-license perl))))
 
+(define-public perl-file-grep
+  (package
+    (name "perl-file-grep")
+    (version "0.02")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/M/MN/MNEYLON/File-Grep-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0cjnz3ak7s3x3y3q48xb9ka2q9d7xvch58vy80hqa9xn9qkiabj6"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/File-Grep")
+    (synopsis "Matches patterns in a series of files")
+    (description "@code{File::Grep} provides similar functionality as perl's
+builtin @code{grep}, @code{map}, and @code{foreach} commands, but iterating
+over a passed filelist instead of arrays.  While trivial, this module can
+provide a quick dropin when such functionality is needed.")
+    (license (package-license perl))))
+
 (define-public perl-file-homedir
   (package
     (name "perl-file-homedir")
@@ -2232,6 +2442,28 @@ that arise trying to find them consistently across a wide variety of
 platforms.")
     (license (package-license perl))))
 
+(define-public perl-file-path
+  (package
+    (name "perl-file-path")
+    (version "2.12")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/R/RI/RICHE/File-Path-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0znihrlcnlpa0ziml0hkq9s59p1bjd2a6khgx2accdf16w6imxmv"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/File-Path")
+    (synopsis "Create or remove directory trees")
+    (description "This module provide a convenient way to create directories
+of arbitrary depth and to delete an entire directory subtree from the
+file system.")
+    (license (package-license perl))))
+
 (define-public perl-file-list
   (package
     (name "perl-file-list")
@@ -2349,6 +2581,47 @@ files with a simple call.  It also has a subroutine for reading the list of
 file names in a directory.")
     (license (package-license perl))))
 
+(define-public perl-file-slurper
+  (package
+    (name "perl-file-slurper")
+    (version "0.008")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/L/LE/LEONT/File-Slurper-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0cyjspspms6zyjcqz9v18dbs574g085h2jzjh41xvsrc1qa8bxhh"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-perlio-utf8_strict" ,perl-perlio-utf8_strict)))
+    (home-page "http://search.cpan.org/dist/File-Slurper")
+    (synopsis "Simple, sane and efficient module to slurp a file")
+    (description "This module provides functions for fast and correct file
+slurping and spewing.  All functions are optionally exported.")
+    (license (package-license perl))))
+
+(define-public perl-file-slurp-tiny
+  (package
+    (name "perl-file-slurp-tiny")
+    (version "0.004")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/L/LE/LEONT/"
+                                  "File-Slurp-Tiny-" version ".tar.gz"))
+              (sha256
+               (base32
+                "07kzfmibl43dq4c803f022g2rcfv4nkjgipxclz943mzxaz9aaa5"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/File-Slurp-Tiny")
+    (synopsis "Simple file reader and writer")
+    (description
+     "This module provides functions for fast reading and writing of files.")
+    (license (package-license perl))))
+
 (define-public perl-file-temp
   (package
     (name "perl-file-temp")
@@ -2392,6 +2665,54 @@ shell.")
                               "File-Which-" version))
     (license (package-license perl))))
 
+(define-public perl-file-zglob
+  (package
+    (name "perl-file-zglob")
+    (version "0.11")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/T/TO/TOKUHIROM/File-Zglob-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "16v61rn0yimpv5kp6b20z2f1c93n5kpsyjvr0gq4w2dc43gfvc8w"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/File-Zglob")
+    (synopsis "Extended Unix style glob functionality")
+    (description "@code{File::Zglob} provides a traditional Unix @code{glob}
+functionality; it returns a list of file names that match the given pattern.
+For instance, it supports the @code{**/*.pm} form.")
+    (license (package-license perl))))
+
+(define-public perl-getopt-long
+  (package
+    (name "perl-getopt-long")
+    (version "v2.49.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/J/JV/JV/"
+                           "Getopt-Long-" (substring version 1) ".tar.gz"))
+       (sha256
+        (base32
+         "0bw8gbhj8s5gmkqvs3m7pk9arqhgqssrby4yimh29ah9alix9ylq"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Getopt-Long")
+    (synopsis "Module to handle parsing command line options")
+    (description "The @code{Getopt::Long} module implements an extended getopt
+function called @code{GetOptions()}.  It parses the command line from
+@code{ARGV}, recognizing and removing specified options and their possible
+values.
+
+This function adheres to the POSIX syntax for command line options, with GNU
+extensions.  In general, this means that options have long names instead of
+single letters, and are introduced with a double dash \"--\".  Support for
+bundling of command line options, as was the case with the more traditional
+single-letter approach, is provided but not enabled by default.")
+    ;; Can be used with either license.
+    (license (list (package-license perl) gpl2+))))
+
 (define-public perl-getopt-long-descriptive
   (package
     (name "perl-getopt-long-descriptive")
@@ -2439,6 +2760,50 @@ vaguely inspired by John Ousterhout's Tk_ParseArgv.")
                               "Getopt-Tabular-" version))
     (license (package-license perl))))
 
+(define-public perl-graph
+  (package
+    (name "perl-graph")
+    (version "0.9704")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/J/JH/JHI/Graph-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "099a1gca0wj5zs0cffncjqp2mjrdlk9i6325ks89ml72gfq8wpij"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Graph")
+    (synopsis "Graph data structures and algorithms")
+    (description "This is @code{Graph}, a Perl module for dealing with graphs,
+the abstract data structures.")
+    (license (package-license perl))))
+
+(define-public perl-guard
+  (package
+    (name "perl-guard")
+    (version "1.023")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/M/ML/MLEHMANN/Guard-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1p6i9mfmbs9cw40jqdv71ihv2xfi0vvlv8bdv2810gf93zwxvi1l"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Guard")
+    (synopsis "Safe cleanup blocks implemented as guards")
+    (description "@code{Guard} implements so-called @dfn{guards}.  A guard is
+something (usually an object) that \"guards\" a resource, ensuring that it is
+cleaned up when expected.
+
+Specifically, this module supports two different types of guards: guard
+objects, which execute a given code block when destroyed, and scoped guards,
+which are tied to the scope exit.")
+    (license (package-license perl))))
+
 (define-public perl-hash-merge
   (package
     (name "perl-hash-merge")
@@ -2526,6 +2891,31 @@ dependencies for CPAN distributions.  These dependencies get bundled into the
 inc directory within a distribution and are used by Makefile.PL or Build.PL.")
     (license asl2.0)))
 
+(define-public perl-io-captureoutput
+  (package
+    (name "perl-io-captureoutput")
+    (version "1.1104")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/D/DA/DAGOLDEN/IO-CaptureOutput-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0c437zvzpqi8f0h3nmblwdi2bvsb92b7g30fndr7my9qnky35izw"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/IO-CaptureOutput")
+    (synopsis "Capture STDOUT and STDERR from Perl code, subprocesses or XS")
+    (description "@code{IO::CaptureOutput} provides routines for capturing
+@code{STDOUT} and @code{STDERR} from perl subroutines, forked system
+calls (e.g. @code{system()}, @code{fork()}) and from XS or C modules.
+
+This module is no longer recommended by its maintainer.  Users are advised to
+try @code{Capture::Tiny} instead.")
+    (license (package-license perl))))
+
 (define-public perl-io-interactive
   (package
     (name "perl-io-interactive")
@@ -2678,6 +3068,30 @@ Perlish API and none of the bloat and rarely used features of IPC::Run.")
 allowing data to be efficiently communicated between processes.")
     (license (package-license perl))))
 
+(define-public perl-ipc-system-simple
+  (package
+    (name "perl-ipc-system-simple")
+    (version "1.25")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/P/PJ/PJF/IPC-System-Simple-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0fsdb81shjj4hifyyzvj7vpkhq5jrfhlcpw2xbjfi1mqz8fsmdpi"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/IPC-System-Simple")
+    (synopsis "Run commands simply, with detailed diagnostics")
+    (description "Calling Perl's in-built @code{system} function is easy,
+determining if it was successful is hard.  Let's face it, @code{$?} isn't the
+nicest variable in the world to play with, and even if you do check it,
+producing a well-formatted error string takes a lot of work.
+
+@code{IPC::System::Simple} takes the hard work out of calling external
+commands.")
+    (license (package-license perl))))
+
 (define-public perl-json
   (package
     (name "perl-json")
@@ -2714,9 +3128,9 @@ versa using either JSON::XS or JSON::PP.")
     (build-system perl-build-system)
     (native-inputs
      `(("perl-test-fatal" ,perl-test-fatal)
-       ("perl-test-requires"perl-test-requires)
-       ("perl-test-warnings"perl-test-warnings)
-       ("perl-test-without-module"perl-test-without-module)))
+       ("perl-test-requires" ,perl-test-requires)
+       ("perl-test-warnings" ,perl-test-warnings)
+       ("perl-test-without-module" ,perl-test-without-module)))
     (propagated-inputs
      `(("perl-namespace-clean" ,perl-namespace-clean)))
     (home-page "http://search.cpan.org/dist/JSON-Any")
@@ -2775,6 +3189,133 @@ either uses the first module it finds or throws an error.")
 versa.")
     (license (package-license perl))))
 
+(define-public perl-log-any
+  (package
+    (name "perl-log-any")
+    (version "1.040")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/D/DA/DAGOLDEN/Log-Any-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "0r1q7cclgwl24gzdnjzvd8y0r7j17dngjk492x35w198zhdj2ncp"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Log-Any")
+    (synopsis "Bringing loggers and listeners together")
+    (description "@code{Log::Any} provides a standard log production API for
+modules.  @code{Log::Any::Adapter} allows applications to choose the mechanism
+for log consumption, whether screen, file or another logging mechanism like
+@code{Log::Dispatch} or @code{Log::Log4perl}.
+
+A CPAN module uses @code{Log::Any} to get a log producer object.  An
+application, in turn, may choose one or more logging mechanisms via
+@code{Log::Any::Adapter}, or none at all.
+
+@code{Log::Any} has a very tiny footprint and no dependencies beyond Perl
+itself, which makes it appropriate for even small CPAN modules to use.  It
+defaults to 'null' logging activity, so a module can safely log without
+worrying about whether the application has chosen (or will ever choose) a
+logging mechanism.")
+    (license (package-license perl))))
+
+(define-public perl-log-any-adapter-log4perl
+  (package
+    (name "perl-log-any-adapter-log4perl")
+    (version "0.08")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/D/DA/DAGOLDEN/Log-Any-Adapter-Log4perl-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0xf4fnrsznvg0hf36q481124ja1hp3lybki1xjgnk82z9990jmxn"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-log-any" ,perl-log-any)
+       ("perl-log-log4perl" ,perl-log-log4perl)))
+    (home-page
+     "http://search.cpan.org/dist/Log-Any-Adapter-Log4perl")
+    (synopsis "Log::Any adapter for Log::Log4perl")
+    (description "@code{Log::Any::Adapter::Log4perl} provides a
+@code{Log::Any} adapter using @code{Log::Log4perl} for logging.")
+    (license (package-license perl))))
+
+(define-public perl-log-log4perl
+  (package
+    (name "perl-log-log4perl")
+    (version "1.47")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/M/MS/MSCHILLI/Log-Log4perl-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0vxraq9navx5mgf8y8g6l5rbl3dv2ml8bishka5m69hj07nxs0ch"))))
+    (build-system perl-build-system)
+    (home-page
+     "http://search.cpan.org/dist/Log-Log4perl")
+    (synopsis "Log4j implementation for Perl")
+    (description "@code{Log::Log4perl} lets you remote-control and fine-tune
+the logging behaviour of your system from the outside.  It implements the
+widely popular (Java-based) Log4j logging package in pure Perl.")
+    (license (package-license perl))))
+
+(define-public perl-log-report-optional
+  (package
+    (name "perl-log-report-optional")
+    (version "1.01")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/M/MA/MARKOV/"
+                                  "Log-Report-Optional-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1f4yi4dgzqjc79vrh4f2phdj57xxgk8hd2psx77214i4m5av408f"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-string-print" ,perl-string-print)))
+    (home-page "http://search.cpan.org/dist/Log-Report-Optional")
+    (synopsis "Log::Report in the lightest form")
+    (description
+     "This module allows libraries to have a dependency to a small module
+instead of the full Log-Report distribution.  The full power of
+@code{Log::Report} is only released when the main program uses that module.
+In that case, the module using the 'Optional' will also use the full
+@code{Log::Report}, otherwise the dressed-down @code{Log::Report::Minimal}
+version.")
+    (license (package-license perl))))
+
+(define-public perl-log-report
+  (package
+    (name "perl-log-report")
+    (version "1.10")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/M/MA/MARKOV/"
+                                  "Log-Report-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1jjx1ari3a7ixsyan91b6n7lmjq6dy5223k3x2ah18qbxvw4caap"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-devel-globaldestruction" ,perl-devel-globaldestruction)
+       ("perl-log-report-optional" ,perl-log-report-optional)
+       ("perl-string-print" ,perl-string-print)))
+    (home-page "http://search.cpan.org/dist/Log-Report")
+    (synopsis "Get messages to users and logs")
+    (description
+     "@code{Log::Report} combines three tasks which are closely related in
+one: logging, exceptions, and translations.")
+    (license (package-license perl))))
+
 (define-public perl-list-allutils
   (package
     (name "perl-list-allutils")
@@ -2799,6 +3340,30 @@ versa.")
 List::Util or List::MoreUtils defines, with preference to List::Util.")
     (license (package-license perl))))
 
+(define-public perl-list-compare
+  (package
+    (name "perl-list-compare")
+    (version "0.53")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/J/JK/JKEENAN/List-Compare-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0l451yqhx1hlm7f2c3bjsl3n8w6l1jngrxzyfm2d8d9iggv4zgzx"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-io-captureoutput" ,perl-io-captureoutput)))
+    (home-page "http://search.cpan.org/dist/List-Compare")
+    (synopsis "Compare elements of two or more lists")
+    (description "@code{List::Compare} provides a module to perform
+comparative operations on two or more lists.  Provided operations include
+intersections, unions, unique elements, complements and many more.")
+    (license (package-license perl))))
+
 (define-public perl-list-moreutils
   (package
     (name "perl-list-moreutils")
@@ -2824,6 +3389,39 @@ List::Util or List::MoreUtils defines, with preference to List::Util.")
 functionality on lists which is not going to go into List::Util.")
     (license (package-license perl))))
 
+(define-public perl-list-someutils
+  (package
+    (name "perl-list-someutils")
+    (version "0.52")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/D/DR/DROLSKY/List-SomeUtils-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1b450jyxaa6q2yl0cdhknr3c2a5s7b9b18ccnwac625c681r130y"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-test-leaktrace" ,perl-test-leaktrace)))
+    (inputs
+     `(("perl-exporter-tiny" ,perl-exporter-tiny)
+       ("perl-module-implementation"
+        ,perl-module-implementation)))
+    (home-page "http://search.cpan.org/dist/List-SomeUtils")
+    (synopsis "Provide the stuff missing in List::Util")
+    (description "@code{List::SomeUtils} provides some trivial but commonly
+needed functionality on lists which is not going to go into @code{List::Util}.
+
+All of the below functions are implementable in only a couple of lines of Perl
+code.  Using the functions from this module however should give slightly
+better performance as everything is implemented in C.  The pure-Perl
+implementation of these functions only serves as a fallback in case the C
+portions of this module couldn't be compiled on this machine.")
+    (license (package-license perl))))
+
 (define-public perl-memoize-expirelru
   (package
     (name "perl-memoize-expirelru")
@@ -2844,6 +3442,25 @@ follows LRU semantics, that is, the last n results, where n is specified as
 the argument to the CACHESIZE parameter, will be cached.")
     (license (package-license perl))))
 
+(define-public perl-mime-charset
+  (package
+    (name "perl-mime-charset")
+    (version "1.012")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/N/NE/NEZUMI/"
+                                  "MIME-Charset-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1kfc5p4g1x9c0ffhg125wvhravcviny3alwrgnhnrm2a33ad3rff"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/MIME-Charset")
+    (synopsis "Charset information for MIME messages")
+    (description
+     "@code{MIME::Charset} provides information about character sets used for
+MIME messages on Internet.")
+    (license (package-license perl))))
+
 (define-public perl-mime-types
   (package
     (name "perl-mime-types")
@@ -2864,6 +3481,31 @@ from various sources.  For instance, it contains all IANA types and the
 knowledge of Apache.")
     (license (package-license perl))))
 
+(define-public perl-mixin-linewise
+  (package
+    (name "perl-mixin-linewise")
+    (version "0.108")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/R/RJ/RJBS/Mixin-Linewise-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "1wmfr19w9y8qys7b32mnj1vmps7qwdahqas71a9p62ac8xw0dwkx"))))
+    (build-system perl-build-system)
+    (inputs
+     `(("perl-perlio-utf8_strict" ,perl-perlio-utf8_strict)
+       ("perl-sub-exporter" ,perl-sub-exporter)))
+    (home-page "http://search.cpan.org/dist/Mixin-Linewise")
+    (synopsis "Write your linewise code for handles; this does the rest")
+    (description "It's boring to deal with opening files for IO, converting
+strings to handle-like objects, and all that.  With
+@code{Mixin::Linewise::Readers} and @code{Mixin::Linewise::Writers}, you can
+just write a method to handle handles, and methods for handling strings and
+file names are added for you.")
+    (license (package-license perl))))
+
 (define-public perl-module-build-tiny
   (package
     (name "perl-module-build-tiny")
@@ -2984,6 +3626,26 @@ strictly correct manner with ExtUtils::MakeMaker, and will run on any Perl
 installation version 5.005 or newer.")
     (license (package-license perl))))
 
+(define-public perl-module-pluggable
+  (package
+    (name "perl-module-pluggable")
+    (version "5.2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "mirror://cpan/authors/id/S/SI/SIMONW/"
+                           "Module-Pluggable-" version ".tar.gz"))
+       (sha256
+        (base32
+         "1px6qmszmfc69v36vd8d92av4nkrif6xf4nrj3xv647xwi2svwmk"))
+       (patches (search-patches "perl-module-pluggable-search.patch"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Module-Pluggable")
+    (synopsis "Give your Perl module the ability to have plugins")
+    (description "This module provides a simple but extensible way of having
+'plugins' for your Perl module.")
+    (license (package-license perl))))
+
 (define-public perl-module-runtime
   (package
     (name "perl-module-runtime")
@@ -2997,6 +3659,7 @@ installation version 5.005 or newer.")
         (base32
          "19326f094jmjs6mgpwkyisid54k67w34br8yfh0gvaaml87gwi2c"))))
     (build-system perl-build-system)
+    (native-inputs `(("perl-module-build" ,perl-module-build)))
     (home-page "http://search.cpan.org/dist/Module-Runtime")
     (synopsis "Perl runtime module handling")
     (description "The functions exported by this module deal with runtime
@@ -3016,6 +3679,8 @@ handling of Perl modules, which are normally handled at compile time.")
         (base32
          "0pz23ch78lbpn4kdbm04icgsmbr7jvmxwq1p5m4x2pap8qwd0wqg"))))
     (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
     (propagated-inputs
      `(("perl-module-runtime" ,perl-module-runtime)
        ("perl-dist-checkconflicts" ,perl-dist-checkconflicts)))
@@ -3222,7 +3887,8 @@ private methods are not.")
          "1nkzvbsiwldmpn6207ns7rinh860djnw098h6cnvywf429rjnz60"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-deep" ,perl-test-deep)
+     `(("perl-module-build" ,perl-module-build)
+       ("perl-test-deep" ,perl-test-deep)
        ("perl-test-fatal" ,perl-test-fatal)
        ("perl-test-requires" ,perl-test-requires)
        ("perl-test-trap" ,perl-test-trap)
@@ -3385,6 +4051,7 @@ manually setting up a subclass.")
     (build-system perl-build-system)
     (native-inputs
      `(("perl-cpan-meta-check" ,perl-cpan-meta-check)
+       ("perl-module-build" ,perl-module-build)
        ("perl-moosex-role-withoverloading" ,perl-moosex-role-withoverloading)
        ("perl-test-fatal" ,perl-test-fatal)
        ("perl-test-requires" ,perl-test-requires)))
@@ -3517,7 +4184,8 @@ search for traits and some extra attributes.")
          "1iq90s1f0xbmr194q0mhnp9wxqxwwilkbdml040ibqbqvfiz87yh"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
+     `(("perl-module-build" ,perl-module-build)
+       ("perl-test-fatal" ,perl-test-fatal)
        ("perl-test-requires" ,perl-test-requires)))
     (propagated-inputs
      `(("perl-carp-clan" ,perl-carp-clan)
@@ -3685,7 +4353,8 @@ Perl (back to 5.6.0).")
          "0msggbg2zbixxjq1fda19h0yygavxndfzc4j4pq11nfghmawjsb0"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-requires" ,perl-test-requires)))
+     `(("perl-module-build" ,perl-module-build)
+       ("perl-test-requires" ,perl-test-requires)))
     (propagated-inputs
      `(("perl-b-hooks-endofscope" ,perl-b-hooks-endofscope)
        ("perl-namespace-clean" ,perl-namespace-clean)
@@ -3725,6 +4394,28 @@ cycle.  Functions called in the package itself will still be bound by their
 name, but they won't show up as methods on your class or instances.")
     (license (package-license perl))))
 
+(define-public perl-net-statsd
+  (package
+   (name "perl-net-statsd")
+   (version "0.12")
+   (source
+    (origin
+      (method url-fetch)
+      (uri (string-append
+            "mirror://cpan/authors/id/C/CO/COSIMO/Net-Statsd-"
+            version
+            ".tar.gz"))
+      (sha256
+       (base32
+        "0p2nhrwamic2fyj094y583q088ixv9gbb82c3invqrd17mh57r33"))))
+   (build-system perl-build-system)
+   (home-page
+    "http://search.cpan.org/dist/Net-Statsd")
+   (synopsis "Perl client for Etsy's statsd daemon")
+   (description "This module implement a UDP client for the statsd statistics
+collector daemon in use at Etsy.com.")
+   (license (package-license perl))))
+
 (define-public perl-number-compare
   (package
     (name "perl-number-compare")
@@ -3925,7 +4616,8 @@ checking parameters easier.")
          "1wh23i9kkma6493c0q1kvy6wmahd6spg6xm3xbp2ar1iy1xhks5l"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-fatal" ,perl-test-fatal)
+     `(("perl-module-build" ,perl-module-build)
+       ("perl-test-fatal" ,perl-test-fatal)
        ("perl-test-requires" ,perl-test-requires)))
     (propagated-inputs
      `(("perl-module-implementation" ,perl-module-implementation)))
@@ -3986,12 +4678,61 @@ up inheritance from those modules at the same time.")
         (base32
          "1viaj8jyshcj135la0kgfgzalaw06xnbsg9h54jx09v1342v69lj"))))
     (build-system perl-build-system)
+    (native-inputs `(("perl-module-build" ,perl-module-build)))
     (home-page "http://search.cpan.org/dist/Path-Class")
     (synopsis "Path specification manipulation")
     (description "Path::Class is a module for manipulation of file and
 directory specifications in a cross-platform manner.")
     (license (package-license perl))))
 
+(define-public perl-path-tiny
+  (package
+    (name "perl-path-tiny")
+    (version "0.096")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/D/DA/DAGOLDEN/"
+                                  "Path-Tiny-" version ".tar.gz"))
+              (sha256
+               (base32
+                "08dmr6ijjg3dp7h9dxix0nmad0fw16c6qzs4qc0hdz500gd64sr2"))))
+    (build-system perl-build-system)
+    (arguments
+     `(#:tests? #f)) ; Tests require additional test modules to be packaged
+    ;; (native-inputs
+    ;;  `(("perl-test-failwarnings" ,perl-test-failwarnings)
+    ;;    ("perl-test-mockrandom" ,perl-test-mockrandom)))
+    (inputs
+     `(("perl-unicode-utf8" ,perl-unicode-utf8)))
+    (home-page "http://search.cpan.org/dist/Path-Tiny")
+    (synopsis "File path utility")
+    (description "This module provides a small, fast utility for working
+with file paths.")
+    (license asl2.0)))
+
+(define-public perl-perlio-utf8_strict
+  (package
+    (name "perl-perlio-utf8-strict")
+    (version "0.006")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/L/LE/LEONT/PerlIO-utf8_strict-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0qnmiflirfq10jkmrxyy81ch6hzyndfzxqf8maif0fy44kk1004q"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-test-exception" ,perl-test-exception)))
+    (home-page
+     "http://search.cpan.org/dist/PerlIO-utf8_strict")
+    (synopsis "Fast and correct UTF-8 IO")
+    (description "@code{PerlIO::utf8_strict} provides a fast and correct UTF-8
+PerlIO layer.  Unlike Perl's default @code{:utf8} layer it checks the input
+for correctness.")
+    (license (package-license perl))))
+
 (define-public perl-pod-coverage
   (package
     (name "perl-pod-coverage")
@@ -4045,6 +4786,7 @@ used for writing documentation for Perl and for Perl modules.")
         (base32
          "0f9p3hx0vqx8zg5v24pz0s4zc8ln100c7c91ks681wq02phqj2v7"))))
     (build-system perl-build-system)
+    (native-inputs `(("perl-module-build" ,perl-module-build)))
     (arguments `(#:tests? #f))          ;TODO: Timezone test failures
     (home-page "http://search.cpan.org/dist/POSIX-strftime-Compiler")
     (synopsis "GNU C library compatible strftime for loggers and servers")
@@ -4088,6 +4830,7 @@ Module::Build project, but has been externalized here for general use.")
         (base32
          "165zcf9lpijdpkx82za0g9rx8ckjnhipmcivdkyzshl8jmp1bl4v"))))
     (build-system perl-build-system)
+    (native-inputs `(("perl-module-build" ,perl-module-build)))
     (home-page "http://search.cpan.org/dist/Readonly")
     (synopsis "Create read-only scalars, arrays, hashes")
     (description "This module provides a facility for creating non-modifiable
@@ -4351,6 +5094,28 @@ CamelCase and back again.")
 known prefixes.")
     (license (package-license perl))))
 
+(define-public perl-string-print
+  (package
+    (name "perl-string-print")
+    (version "0.15")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/M/MA/MARKOV/"
+                                  "String-Print-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1n9lc5dr66sg89hym47764fyfms7vrxrhwvdps2x8x8gxly7rsdl"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-unicode-linebreak" ,perl-unicode-linebreak)))
+    (home-page "http://search.cpan.org/dist/String-Print")
+    (synopsis "String printing alternatives to printf")
+    (description
+     "This module inserts values into (translated) strings.  It provides
+@code{printf} and @code{sprintf} alternatives via both an object-oriented and
+a functional interface.")
+    (license (package-license perl))))
+
 (define-public perl-sub-exporter
   (package
     (name "perl-sub-exporter")
@@ -4753,6 +5518,66 @@ framework base class.  It concentrates on offering reusable data driven
 patterns, so that you can write tests with a minimum of code.")
     (license (package-license perl))))
 
+(define-public perl-test-class
+  (package
+    (name "perl-test-class")
+    (version "0.50")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://cpan.metacpan.org/authors/id/E/ET/ETHER/Test-Class-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0l0kk5jvxjkic2jkf1r7v41irb344aasnzr3f5ygjgxgiknm9489"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-test-exception" ,perl-test-exception)))
+    (inputs
+     `(("perl-module-runtime" ,perl-module-runtime)
+       ("perl-mro-compat" ,perl-mro-compat)
+       ("perl-try-tiny" ,perl-try-tiny)))
+    (home-page "http://search.cpan.org/dist/Test-Class")
+    (synopsis "Easily create test classes in an xUnit/JUnit style")
+    (description "@code{Test::Class} provides a simple way of creating classes
+and objects to test your code in an xUnit style.
+
+Built using @code{Test::Builder}, it was designed to work with other
+@code{Test::Builder} based modules (@code{Test::More},
+@code{Test::Differences}, @code{Test::Exception}, etc.).")
+    (license (package-license perl))))
+
+(define-public perl-test-class-most
+  (package
+    (name "perl-test-class-most")
+    (version "0.08")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/O/OV/OVID/Test-Class-Most-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1zvx9hil0mg0pnb8xfa4m0xgjpvh8s5gnbyprq3xwpdsdgcdwk33"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
+    (inputs
+     `(("perl-test-class" ,perl-test-class)
+       ("perl-test-most" ,perl-test-most)
+       ("perl-module-runtime" ,perl-module-runtime)
+       ("perl-try-tiny" ,perl-try-tiny)
+       ("perl-mro-compat" ,perl-mro-compat)))
+    (home-page "http://search.cpan.org/dist/Test-Class-Most")
+    (synopsis "Test classes the easy way")
+    (description "@code{Test::Class::Most} provides some more convenience when
+using @code{Test::Class}.")
+    (license (package-license perl))))
+
 (define-public perl-test-cleannamespaces
   (package
     (name "perl-test-cleannamespaces")
@@ -4789,14 +5614,14 @@ called as methods, which usually isn't want you want.")
 (define-public perl-test-deep
   (package
     (name "perl-test-deep")
-    (version "0.114")
+    (version "1.120")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/R/RJ/RJBS/"
                                   "Test-Deep-" version ".tar.gz"))
               (sha256
                (base32
-                "09yr47vw7vj27sdik312x08938higcij8ybyq8k67mlccx8cpqf0"))))
+                "1kdy06r0yg7zwarqglc9163vbfb0sfc4s6ld4pw5q7i9f7mghzi0"))))
     (build-system perl-build-system)
     (inputs `(("perl-test-tester" ,perl-test-tester)
               ("perl-test-nowarnings" ,perl-test-nowarnings)))
@@ -4806,8 +5631,7 @@ called as methods, which usually isn't want you want.")
 that the values match, that arrays and hashes have the same elements and that
 references are blessed into the correct class.  It also handles circular data
 structures without getting caught in an infinite loop.")
-    (home-page (string-append "http://search.cpan.org/~rjbs/"
-                              "Test-Deep-" version))
+    (home-page "http://search.cpan.org/dist/Test-Deep")
     (license gpl1+)))  ; or "Artistic License"
 
 (define-public perl-test-differences
@@ -4823,6 +5647,8 @@ structures without getting caught in an infinite loop.")
         (base32
          "0rhs4q6qn64ji06ns7lwl6iiiw3mggvd9xk9nkiqvx1jihbplrbw"))))
     (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
     (propagated-inputs
      `(("perl-text-diff" ,perl-text-diff)
        ("perl-capture-tiny" ,perl-capture-tiny)))
@@ -4903,10 +5729,35 @@ Test::Exception.  It does much less, but should allow greater flexibility in
 testing exception-throwing code with about the same amount of typing.")
     (license (package-license perl))))
 
+(define-public perl-test-files
+  (package
+    (name "perl-test-files")
+    (version "0.14")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/P/PH/PHILCROW/Test-Files-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1zn33yigznq7i1jr4yjr4lxvc6bn7znkbqdzj7slhc146pqapkln"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-algorithm-diff" ,perl-algorithm-diff)
+       ("perl-text-diff" ,perl-text-diff)))
+    (home-page "http://search.cpan.org/dist/Test-Files")
+    (synopsis "Ease software testing with files and directories")
+    (description "This library provides functions to enable testing of files
+and directories.  For instance, the @code{file_ok} helper can test whether the
+contents of a file is equal to a particular string.")
+    (license (package-license perl))))
+
 (define-public perl-test-harness
   (package
     (name "perl-test-harness")
-    (version "3.35")
+    (version "3.36")
     (source
      (origin
        (method url-fetch)
@@ -4914,7 +5765,7 @@ testing exception-throwing code with about the same amount of typing.")
                            "Test-Harness-" version ".tar.gz"))
        (sha256
         (base32
-         "06l29y1bpizb9vd9g49lgi0wzj1xy4rsk42ahdj3fpgqnvb9wp05"))))
+         "0gmnjss0hjkyiwvgby50nl5nzv254pn7fjqqdysjil21n09nymp7"))))
     (build-system perl-build-system)
     (arguments
      `(#:phases (alist-cons-before
@@ -4973,10 +5824,33 @@ string comparison functions of Test::More, but which are more suitable when
 you test against long strings.")
     (license (package-license perl))))
 
+(define-public perl-test-manifest
+  (package
+    (name "perl-test-manifest")
+    (version "2.02")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/B/BD/BDFOY/"
+                                  "Test-Manifest-" version ".tar.gz"))
+              (sha256
+               (base32
+                "15ik52l9macrrfizf4y6wj71d4lx7w590h2dfajnkmbxmz786iq6"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-test-pod" ,perl-test-pod)
+       ("perl-test-pod-coverage" ,perl-test-pod-coverage)))
+    (home-page "http://search.cpan.org/dist/Test-Manifest")
+    (synopsis "Interact with a t/test_manifest file")
+    (description "@code{Test::Manifest} overrides the default test file order.  Instead of
+running all of the t/*.t files in ASCII-betical order, it looks in the t/test_manifest
+file to find out which tests you want to run and the order in which you want to run them.
+It constructs the right value for the build system to do the right thing.")
+    (license (package-license perl))))
+
 (define-public perl-test-mockobject
   (package
     (name "perl-test-mockobject")
-    (version "1.20140408")
+    (version "1.20150527")
     (source
      (origin
        (method url-fetch)
@@ -4984,7 +5858,7 @@ you test against long strings.")
                            "Test-MockObject-" version ".tar.gz"))
        (sha256
         (base32
-         "1anpf9l2wdriwaxw6pf76ghxkh4zm25n3wnhfqy1b439xqnhvzg5"))))
+         "160xvhbpwqjaff4fgckvldknldzcbn1z3jvyzybs7cqlj1x3bwdd"))))
     (build-system perl-build-system)
     (native-inputs
      `(("perl-test-exception" ,perl-test-exception)
@@ -4994,6 +5868,7 @@ you test against long strings.")
        ("perl-test-warn" ,perl-test-warn)
        ("perl-universal-can" ,perl-universal-can)
        ("perl-universal-isa" ,perl-universal-isa)))
+    (arguments `(#:tests? #f))          ;TODO: tests require perl-cgi
     (home-page "http://search.cpan.org/dist/Test-MockObject")
     (synopsis "Emulate troublesome interfaces in Perl")
     (description "Test::MockObject allows you to create objects that conform
@@ -5111,6 +5986,7 @@ as flexible as possible to the tester.")
         (base32
          "1hmwwhabyng4jrnll926b4ab73r40w3pfchlrvs0yx6kh6kwwy14"))))
     (build-system perl-build-system)
+    (native-inputs `(("perl-module-build" ,perl-module-build)))
     (home-page "http://search.cpan.org/dist/Test-Pod")
     (synopsis "Check for POD errors in files")
     (description "Check POD files for errors or warnings in a test file, using
@@ -5205,14 +6081,14 @@ makes fork(2) safe to use in test cases.")
 (define-public perl-test-simple
   (package
     (name "perl-test-simple")
-    (version "1.001014")
+    (version "1.302062")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://cpan/authors/id/E/EX/EXODIST/"
                                   "Test-Simple-" version ".tar.gz"))
               (sha256
                (base32
-                "0szi95shwwdvc4nqykzgx05g2m1001mjhvqqhjg5wypbi771992m"))))
+                "1sjny65iwnin35lvc203pb07gyx9wrp3gmn6lfrjsbmi986hcab7"))))
     (build-system perl-build-system)
     (synopsis "Basic utilities for writing tests")
     (description
@@ -5255,11 +6131,13 @@ a minimum of effort.")
         (base32
          "05b4zc4087imwphls4yksg4chzx9yavbri301gaxas9kv1yhx13w"))))
     (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
     (propagated-inputs
      `(("perl-test-tester" ,perl-test-tester)
        ("perl-data-dump" ,perl-data-dump)))
     (home-page "http://search.cpan.org/dist/Test-Trap")
-    (synopsis "Trap exit codes, exceptions, output, etc.")
+    (synopsis "Trap exit codes, exceptions, output, and so on")
     (description "This module is primarily (but not exclusively) for use in
 test scripts: A block eval configurable and extensible but by default trapping
 STDOUT, STDERR, warnings, exceptions, would-be exit codes, and return values
@@ -5369,7 +6247,8 @@ installed.")
        ("perl-test-directory" ,perl-test-directory)))
     (propagated-inputs
      `(("perl-data-tumbler" ,perl-data-tumbler)
-       ("perl-file-homedir" ,perl-file-homedir)))
+       ("perl-file-homedir" ,perl-file-homedir)
+       ("perl-module-pluggable" ,perl-module-pluggable)))
     (home-page "http://search.cpan.org/dist/Test-WriteVariants")
     (synopsis "Dynamic generation of tests")
     (description "The Test::WriteVariants module provides for the dynamic
@@ -5410,6 +6289,7 @@ support.")
         (base32
          "0a6zkchc0apvzkch6z18cx6h97xfiv50r7n4xhg90x8dvk75qzcs"))))
     (build-system perl-build-system)
+    (native-inputs `(("perl-module-build" ,perl-module-build)))
     (home-page "http://search.cpan.org/dist/Text-Aligner")
     (synopsis "Align text")
     (description "Text::Aligner exports a single function, align(), which is
@@ -5458,15 +6338,15 @@ can combine fields into a CSV string and parse a CSV string into fields.")
 (define-public perl-text-diff
   (package
     (name "perl-text-diff")
-    (version "1.41")
+    (version "1.44")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "mirror://cpan/authors/id/O/OV/OVID/"
+       (uri (string-append "mirror://cpan/authors/id/N/NE/NEILB/"
                            "Text-Diff-" version ".tar.gz"))
        (sha256
         (base32
-         "1ynjsa4sr1yvyh65sdfvahaafglibz70j8b6rj01cg1iisj50zx6"))))
+         "041v92zla2acdc433f47giridf6p820sdczs7x5d71fhsyza1xsp"))))
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-algorithm-diff" ,perl-algorithm-diff)))
@@ -5492,13 +6372,39 @@ generally slower on larger files.")
         (base32
          "0lr76wrsj8wcxrq4wi8z1640w4dmdbkznp06q744rg3g0bd238d5"))))
     (build-system perl-build-system)
+    (native-inputs `(("perl-module-build" ,perl-module-build)))
     (home-page "http://search.cpan.org/dist/Text-Glob")
     (synopsis "Match globbing patterns against text")
     (description "Text::Glob implements glob(3) style matching that can be
-used to match against text, rather than fetching names from a filesystem.  If
+used to match against text, rather than fetching names from a file system.  If
 you want to do full file globbing use the File::Glob module instead.")
     (license (package-license perl))))
 
+(define-public perl-text-neattemplate
+  (package
+    (name "perl-text-neattemplate")
+    (version "0.1101")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://cpan.metacpan.org/authors/id/R/RU/RUBYKAT/"
+             "Text-NeatTemplate-" version ".tar.gz"))
+       (sha256
+        (base32
+         "129msa57jzxxi2x7z9hgzi48r48y65w77ycfk1w733zz2m8nr8y3"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
+    (home-page
+     "http://search.cpan.org/dist/Text-NeatTemplate")
+    (synopsis "Fast, middleweight template engine")
+    (description
+     "Text::NeatTemplate provides a simple, middleweight but fast
+template engine, for when you need speed rather than complex features,
+yet need more features than simple variable substitution.")
+    (license (package-license perl))))
+
 (define-public perl-text-simpletable
   (package
     (name "perl-text-simpletable")
@@ -5530,6 +6436,8 @@ you want to do full file globbing use the File::Glob module instead.")
         (base32
          "02c8v38k639r23dgxwgvsy4myjjzvgdb238kpiffsiz25ab3xp5j"))))
     (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
     (propagated-inputs
      `(("perl-text-aligner" ,perl-text-aligner)))
     (home-page "http://search.cpan.org/dist/Text-Table")
@@ -5585,6 +6493,26 @@ system.")
 as exceptions to standard program flow.")
     (license (package-license perl))))
 
+(define-public perltidy
+  (package
+    (name "perltidy")
+    (version "20160302")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://sourceforge/perltidy/" version
+                                  "/Perl-Tidy-" version ".tar.gz"))
+              (sha256
+               (base32
+                "19yw63yh5s3pq7k3nkw6nsamg5b8vvwyhgbizslgxg0mqgc4xl3d"))))
+    (build-system perl-build-system)
+    (home-page "http://perltidy.sourceforge.net/")
+    (synopsis "Perl script tidier")
+    (description "This package contains a Perl script which indents and
+reformats Perl scripts to make them easier to read.   The formatting can be
+controlled with command line parameters.  The default parameter settings
+approximately follow the suggestions in the Perl Style Guide.")
+    (license gpl2+)))
+
 (define-public perl-tie-ixhash
   (package
   (name "perl-tie-ixhash")
@@ -5598,6 +6526,7 @@ as exceptions to standard program flow.")
         (base32
           "0mmg9iyh42syal3z1p2pn9airq65yrkfs66cnqs9nz76jy60pfzs"))))
   (build-system perl-build-system)
+  (native-inputs `(("perl-module-build" ,perl-module-build)))
   (home-page "http://search.cpan.org/dist/Tie-IxHash")
   (synopsis "Ordered associative arrays for Perl")
   (description "This Perl module implements Perl hashes that preserve the
@@ -5727,6 +6656,8 @@ time values and formatting dates into ASCII strings.")
         (base32
          "0bwqyg8z98m8cjw1qcm4wg502n225k33j2fp8ywxkgfjdd1zgllv"))))
     (build-system perl-build-system)
+    (native-inputs
+     `(("perl-module-build" ,perl-module-build)))
     (propagated-inputs
      `(("perl-timedate" ,perl-timedate))) ;For Date::Parse
     (home-page "http://search.cpan.org/dist/Time-Mock")
@@ -5773,7 +6704,8 @@ simple n-ary tree.")
          "1g27xl48q1vr7aikhxg4vvcsj1si8allxz59vmnks61wsw4by7vg"))))
     (build-system perl-build-system)
     (native-inputs
-     `(("perl-test-exception" ,perl-test-exception)))
+     `(("perl-module-build" ,perl-module-build)
+       ("perl-test-exception" ,perl-test-exception)))
     (propagated-inputs
      `(("perl-tree-simple" ,perl-tree-simple)
        ("perl-base" ,perl-base)))
@@ -5824,6 +6756,52 @@ else.")
 common serialisation formats such as JSON or CBOR.")
     (license (package-license perl))))
 
+(define-public perl-unicode-linebreak
+  (package
+    (name "perl-unicode-linebreak")
+    (version "2015.12")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/N/NE/NEZUMI/"
+                                  "Unicode-LineBreak-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1d0nnc97irfpab4d3b2lvq22hac118k7zbfrj0lnxkbfwx7122cm"))))
+    (build-system perl-build-system)
+    (propagated-inputs
+     `(("perl-mime-charset" ,perl-mime-charset)))
+    (home-page "http://search.cpan.org/dist/Unicode-LineBreak")
+    (synopsis "Unicode line breaking algorithm")
+    (description
+     "@code{Unicode::LineBreak} implements the line breaking algorithm
+described in Unicode Standard Annex #14.  The @code{East_Asian_Width} property
+defined by Annex #11 is used to determine breaking positions.")
+    (license (package-license perl))))
+
+(define-public perl-unicode-utf8
+  (package
+    (name "perl-unicode-utf8")
+    (version "0.60")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://cpan/authors/id/C/CH/CHANSEN/"
+                                  "Unicode-UTF8-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1g3fp47slsk7wbz3189kpg342lfs7lpsy570jxnx7s9v59dg5k7n"))))
+    (build-system perl-build-system)
+    (native-inputs
+     `(("perl-test-fatal" ,perl-test-fatal)
+       ("perl-test-leaktrace" ,perl-test-leaktrace)
+       ("perl-variable-magic" ,perl-variable-magic)
+       ("perl-test-pod" ,perl-test-pod)))
+    (home-page "http://search.cpan.org/dist/Unicode-UTF8")
+    (synopsis "Encoding and decoding of UTF-8 encoding form")
+    (description
+     "This module provides functions to encode and decode UTF-8 encoding form
+as specified by Unicode and ISO/IEC 10646:2011.")
+    (license (package-license perl))))
+
 (define-public perl-universal-can
   (package
     (name "perl-universal-can")
@@ -5886,6 +6864,33 @@ it.  With this module, you can add your own magic to any variable without
 having to write a single line of XS.")
     (license (package-license perl))))
 
+(define-public perl-xml-writer
+  (package
+    (name "perl-xml-writer")
+    (version "0.625")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/J/JO/JOSEPHW/XML-Writer-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "1gjzs570i67ywbv967g8ylb5sg59clwmyrl2yix3jl70dhn55070"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/XML-Writer")
+    (synopsis "Easily generate well-formed, namespace-aware XML")
+    (description "@code{XML::Writer} is a simple Perl module for writing XML
+documents: it takes care of constructing markup and escaping data correctly.
+By default, it also performs a significant amount of well-formedness checking
+on the output to make certain (for example) that start and end tags match,
+that there is exactly one document element, and that there are not duplicate
+attribute names.")
+    ;; Redistribution and use in source and compiled forms, with or without
+    ;; modification, are permitted under any circumstances.  No warranty.
+    (license public-domain)))
+
 (define-public perl-yaml
   (package
     (name "perl-yaml")
@@ -5932,6 +6937,27 @@ YAML-style files, written with as little code as possible, reducing load time
 and memory overhead.")
     (license (package-license perl))))
 
+(define-public perl-parse-yapp
+  (package
+    (name "perl-parse-yapp")
+    (version "1.05")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "mirror://cpan/authors/id/F/FD/FDESAR/Parse-Yapp-"
+             version
+             ".tar.gz"))
+       (sha256
+        (base32
+         "0azjqqf4m7nkfgmmj4q77vy9sdgg01wn8xxv40bq3pis93xnr2i2"))))
+    (build-system perl-build-system)
+    (home-page "http://search.cpan.org/dist/Parse-Yapp")
+    (synopsis "Generate and use LALR parsers")
+    (description "This package compiles yacc-like @dfn{Look Ahead LR} (LALR)
+grammars to generate Perl object oriented parser modules.")
+    (license (package-license perl))))
+
 \f
 ;;; Some packaged modules need versions of core modules that are newer than
 ;;; those in our perl 5.16.1.
@@ -6025,12 +7051,13 @@ MYMETA.yml.")
      `(("perl-cpan-meta" ,perl-cpan-meta)))
     (home-page "http://search.cpan.org/dist/Module-Build")
     (synopsis "Build and install Perl modules")
-    (description "\"Module::Build\" is a system for building, testing, and
-installing Perl modules.  It is meant to be an alternative to
-\"ExtUtils::MakeMaker\".  Developers may alter the behavior of the module
+    (description "@code{Module::Build} is a system for building, testing, and
+installing Perl modules; it used to be part of Perl itself until version 5.22,
+which dropped it.  It is meant to be an alternative to
+@code{ExtUtils::MakeMaker}.  Developers may alter the behavior of the module
 through subclassing in a much more straightforward way than with
-\"MakeMaker\".  It also does not require a \"make\" on your system - most of
-the \"Module::Build\" code is pure-perl and written in a cross-platform way.")
+@code{MakeMaker}.  It also does not require a @command{make} on your
+system---most of the @code{Module::Build} code is pure-Perl.")
     (license (package-license perl))))
 
 (define-public perl-parse-cpan-meta
@@ -6075,4 +7102,139 @@ really be high enough to warrant the use of a keyword, and the size so small
 such that being individual extensions would be wasteful.")
     (license (package-license perl))))
 
+(define-public perl-shell-command
+  (package
+    (name "perl-shell-command")
+    (version "0.06")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "mirror://cpan/authors/id/F/FL/FLORA/Shell-Command-"
+               version
+               ".tar.gz"))
+        (sha256
+          (base32
+            "1lgc2rb3b5a4lxvbq0cbg08qk0n2i88srxbsz93bwi3razpxxr7k"))))
+    (build-system perl-build-system)
+    (home-page
+      "http://search.cpan.org/dist/Shell-Command")
+    (synopsis
+      "Cross-platform functions emulating common shell commands")
+    (description
+      "Shell::Command is a thin wrapper around ExtUtils::Command.")
+    (license (package-license perl))))
+
 ;;; END: Core module overrides
+
+(define-public perl-file-find-object
+ (package
+  (name "perl-file-find-object")
+  (version "v0.2.13")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (string-append
+             "mirror://cpan/authors/id/S/SH/SHLOMIF/File-Find-Object-"
+             version
+             ".tar.gz"))
+      (sha256
+        (base32
+          "0gf13b76b824s73r5rp00v8xrd6dnb5yi5jjavfc394scqv6ldh4"))))
+  (build-system perl-build-system)
+  (native-inputs
+    `(("perl-module-build" ,perl-module-build)))
+  (inputs
+    `(("perl-class-xsaccessor" ,perl-class-xsaccessor)))
+  (home-page
+    "http://search.cpan.org/dist/File-Find-Object")
+  (synopsis
+    "Object-oriented File::Find replacement in Perl")
+  (description "File::Find::Object is an object-oriented
+File::Find replacement in Perl.")
+  (license artistic2.0)))
+
+(define-public perl-file-find-object-rule
+ (package
+  (name "perl-file-find-object-rule")
+  (version "0.0305")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (string-append
+             "mirror://cpan/authors/id/S/SH/SHLOMIF/File-Find-Object-Rule-"
+             version
+             ".tar.gz"))
+      (sha256
+        (base32
+          "0hs4n3w99q4ylkhg3qhzcwkxqn7zblfj1zjdgl06ca30afkk4cv6"))))
+  (build-system perl-build-system)
+  (native-inputs
+    `(("perl-module-build" ,perl-module-build)))
+  (inputs
+    `(("perl-class-xsaccessor" ,perl-class-xsaccessor)
+      ("perl-file-find-object" ,perl-file-find-object)
+      ("perl-number-compare" ,perl-number-compare)
+      ("perl-text-glob" ,perl-text-glob)))
+  (home-page
+    "http://search.cpan.org/dist/File-Find-Object-Rule")
+  (synopsis
+    "Alternative interface to File::Find::Object")
+  (description "File::Find::Object::Rule is an alternative Perl
+interface to File::Find::Object.")
+  (license (package-license perl))))
+
+(define-public perl-test-trailingspace
+ (package
+  (name "perl-test-trailingspace")
+  (version "0.0300")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (string-append
+             "mirror://cpan/authors/id/S/SH/SHLOMIF/Test-TrailingSpace-"
+             version
+             ".tar.gz"))
+      (sha256
+        (base32
+          "01slmrcjfq38mpdg3hlb7lnnbgsqbn26958y3hzx0zwrif40pigr"))))
+  (build-system perl-build-system)
+  (native-inputs
+    `(("perl-module-build" ,perl-module-build)
+      ("perl-file-find-object" ,perl-file-find-object)
+      ("perl-class-xsaccessor" ,perl-class-xsaccessor)))
+  (inputs
+    `(("perl-file-find-object-rule" ,perl-file-find-object-rule)
+      ("perl-text-glob" ,perl-text-glob)
+      ("perl-number-compare" ,perl-number-compare)))
+  (home-page
+    "http://search.cpan.org/dist/Test-TrailingSpace")
+  (synopsis
+    "Test for trailing space in Perl source files")
+  (description "Test::TrailingSpace tests for trailing spaces
+in Perl source files.")
+  (license x11)))
+
+(define-public perl-encode-detect
+ (package
+  (name "perl-encode-detect")
+  (version "1.01")
+  (source
+    (origin
+      (method url-fetch)
+      (uri (string-append
+             "mirror://cpan/authors/id/J/JG/JGMYERS/Encode-Detect-"
+             version
+             ".tar.gz"))
+      (sha256
+        (base32
+          "1wdv9ffgs4xyfh5dnh09dqkmmlbf5m1hxgdgb3qy6v6vlwx8jkc3"))))
+  (build-system perl-build-system)
+  (inputs
+    `(("perl-module-build" ,perl-module-build)))
+  (home-page
+    "http://search.cpan.org/dist/Encode-Detect")
+  (synopsis
+    "Perl Encode::Encoding subclass that detects the encoding of data")
+  (description "Encode::Detect detects the encoding of data for Perl.")
+  (license mpl1.1)))