summary refs log tree commit diff
path: root/gnu/packages/perl.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/perl.scm')
-rw-r--r--gnu/packages/perl.scm506
1 files changed, 503 insertions, 3 deletions
diff --git a/gnu/packages/perl.scm b/gnu/packages/perl.scm
index 20c927c7c4..6999946fe9 100644
--- a/gnu/packages/perl.scm
+++ b/gnu/packages/perl.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2013, 2019, 2020, 2021 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2015, 2016, 2017, 2019, 2021 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2019, 2021, 2022 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015, 2016, 2017, 2019, 2020 Eric Bavier <bavier@posteo.net>
 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
 ;;; Copyright © 2016, 2018 Mark H Weaver <mhw@netris.org>
@@ -32,6 +32,9 @@
 ;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
 ;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2022 Evgeny Pisemsky <evgeny@pisemsky.com>
+;;; Copyright © 2022 gemmaro <gemmaro.dev@gmail.com>
+;;; Copyright © 2023 Mădălin Ionel Patrașcu <madalinionel.patrascu@mdc-berlin.de>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -71,6 +74,7 @@
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages hurd)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages language)
   #:use-module (gnu packages less)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages perl-check)
@@ -330,6 +334,74 @@ administration, web development, network programming, GUI development, and
 more.")
     (license license:gpl1+)))
 
+(define-public perl-5.6
+  (package
+    (inherit perl-5.14)
+    (name "perl")
+    (version "5.6.2")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://www.cpan.org/src/5.0/perl-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "0khk94gvc8qkwxdb98khmxbwxxdbhap7rxb9ymkha6vhpxp6zrm5"))))
+    (properties `((release-date . "2003-11-15")
+                  (hidden? . #t))) ;only for GHC 4.
+    (build-system gnu-build-system)
+    (arguments
+     '(#:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out  (assoc-ref outputs "out"))
+                   (libc (assoc-ref inputs "libc")))
+               ;; Use the right path for `pwd'.
+               (substitute* "lib/Cwd.pm"
+                 (("/bin/pwd")
+                  (which "pwd")))
+
+               (invoke "./Configure"
+                       (string-append "-Dprefix=" out)
+                       (string-append "-Dman1dir=" out "/share/man/man1")
+                       (string-append "-Dman3dir=" out "/share/man/man3")
+                       "-de" "-Dcc=gcc"
+                       "-Uinstallusrbinperl"
+                       "-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")))))
+         (add-after 'configure 'bleh
+           (lambda _
+             (substitute* '("makefile"
+                            "x2p/makefile")
+               ((".*\\<command-line>.*") ""))
+             ;; Don't look for /usr/include/errno.h.
+             (substitute* "ext/Errno/Errno_pm.PL"
+               (("O eq 'linux'") "O eq 'loonix'"))
+             (substitute* "ext/IPC/SysV/SysV.xs"
+               ((".*asm/page.h.*") ""))))
+         (add-before 'strip 'make-shared-objects-writable
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; The 'lib/perl5' directory contains ~50 MiB of .so.  Make them
+             ;; writable so that 'strip' actually strips them.
+             (let* ((out (assoc-ref outputs "out"))
+                    (lib (string-append out "/lib")))
+               (for-each (lambda (dso)
+                           (chmod dso #o755))
+                         (find-files lib "\\.so$"))))))))
+    (native-inputs
+     (list gcc-5))))
+
 (define-public perl-algorithm-c3
   (package
     (name "perl-algorithm-c3")
@@ -1829,14 +1901,14 @@ as defined by two typical specimens of Perl coders.")
 (define-public perl-conf-libconfig
   (package
     (name "perl-conf-libconfig")
-    (version "0.100")
+    (version "0.101")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "mirror://cpan/authors/id/C/CN/CNANGEL/"
                            "Conf-Libconfig-" version ".tar.gz"))
        (sha256
-        (base32 "0qdypqd7mx96bwdjlv13fn6p96bs4w0yv94yv94xa7z5lqkdj4rg"))))
+        (base32 "11dd3kb0k45gqahnnwz50x3b4b25c5jgykkwgf74rcyr0dsy0n5a"))))
     (build-system perl-build-system)
     (native-inputs
      (list perl-extutils-pkgconfig perl-test-deep perl-test-exception
@@ -2007,6 +2079,33 @@ of the style used by the Git version control system.")
 and writing of @code{.ini}-style configuration files.")
     (license (package-license perl))))
 
+(define-public perl-config-tiny
+  (package
+    (name "perl-config-tiny")
+    (version "2.28")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/R/RS/RSAVAGE/Config-Tiny-"
+                    version ".tgz"))
+              (sha256
+               (base32
+                "000mw17nb7aj341s0afqimxd53w5y0c4yk61pihqzm191lx89pqj"))))
+    (build-system perl-build-system)
+    (native-inputs (list perl-test-pod))
+    (home-page "https://metacpan.org/release/Config-Tiny")
+    (synopsis "Read/Write .ini style files with as little code as possible")
+    (description
+     "@code{Config::Tiny} is a Perl class to read and write .ini
+style configuration files with as little code as possible, reducing load time
+and memory overhead.
+
+This module is primarily for reading human written files, and anything we write
+shouldn't need to have documentation/comments.  If you need something with more
+power move up to @code{Config::Simple}, @code{Config::General} or one of the
+many other @code{Config::*} modules.")
+    (license license:perl-license)))
+
 (define-public perl-const-fast
   (package
     (name "perl-const-fast")
@@ -2165,6 +2264,51 @@ CPAN::Meta object are present.")
 versa.")
     (license (package-license perl))))
 
+(define-public perl-critic
+  (package
+    (name "perl-critic")
+    (version "1.140")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/P/PE/PETDANCE/Perl-Critic-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "1nzxpn71mrpp85yxrxlraj52q2skvf9ja887ls11d57h6smg1vmz"))))
+    (build-system perl-build-system)
+    (native-inputs (list perl-module-build perl-test-deep))
+    (propagated-inputs (list perltidy
+                             perl-exception-class
+                             perl-io-string
+                             perl-ppi
+                             perl-ppix-regexp
+                             perl-b-keywords
+                             perl-config-tiny
+                             perl-padwalker
+                             perl-test-memory-cycle
+                             perl-file-which
+                             perl-list-moreutils
+                             perl-module-pluggable
+                             perl-pod-parser
+                             perl-pod-spell
+                             perl-ppix-quotelike
+                             perl-ppix-utilities
+                             perl-readonly
+                             perl-string-format
+                             perl-task-weaken))
+    (home-page "https://metacpan.org/release/Perl-Critic")
+    (synopsis "Critique Perl source code for best-practices")
+    (description
+     "@code{perlcritic} is a Perl source code analyzer.  It is the
+executable front-end to the @code{Perl::Critic} engine, which attempts to
+identify awkward, hard to read, error-prone, or unconventional constructs in
+your code.  Most of the rules are based on Damian Conway's book \"Perl Best
+Practices\".  However, @code{perlcritic} is not limited to enforcing PBP, and it
+will even support rules that contradict Conway.  All rules can easily be
+configured or disabled to your liking.")
+    (license license:perl-license)))
+
 (define-public perl-crypt-cbc
   (package
     (name "perl-crypt-cbc")
@@ -5064,6 +5208,27 @@ Linux, fsevents on OS X, @code{kqueue} on FreeBSD, and
 back to a full directory scan if none of these are available.")
     (license license:perl-license)))
 
+(define-public perl-getopt-argvfile
+  (package
+    (name "perl-getopt-argvfile")
+    (version "1.11")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                     "mirror://cpan/authors/id/J/JS/JSTENZEL/Getopt-ArgvFile-"
+                     version
+                     ".tar.gz"))
+              (sha256
+               (base32
+                "08jvhfqcjlsn013x96qa6paif0095x6y60jslp8p3zg67i8sl29p"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/Getopt-ArgvFile")
+    (synopsis "Perl module for reading script options and parameters from files")
+    (description "This module simply interpolates option file hints in @code{@@ARGV}
+by the contents of the pointed files.  This enables option reading from files instead
+of or additional to the usual reading from the command line.")
+    (license license:artistic2.0)))
+
 (define-public perl-getopt-long
   (package
     (name "perl-getopt-long")
@@ -6106,6 +6271,18 @@ expression and a list of abbreviations (built in and given).")
         (base32
          "1qgap0j0ixmif309dvbqca7sy8xha9xgnj9s2lvh8qrczkc92gqi"))))
     (build-system perl-build-system)
+    (arguments
+     (list
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'install 'wrap-translit
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out (assoc-ref outputs "out")))
+                (wrap-program (string-append out "/bin/translit")
+                  `("PERL5LIB" ":" prefix
+                    (,(getenv "PERL5LIB")
+                     ,(string-append out "/lib/perl5/site_perl"))))))))))
+    (inputs (list bash-minimal))
     (home-page "https://metacpan.org/release/Lingua-Translit")
     (synopsis "Transliterate text between writing systems")
     (description "@code{Lingua::Translit} can be used to convert text from one
@@ -6431,6 +6608,30 @@ 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-memory-usage
+  (package
+    (name "perl-memory-usage")
+    (version "0.201")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/D/DO/DONEILL/Memory-Usage-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0jakrq9yk2njzc5qhbgvp7fi933ir903w3wc3kl4i9s03v9glalg"))))
+    (build-system perl-build-system)
+    (native-inputs
+      (list perl-module-install
+            perl-test-pod
+            perl-test-pod-coverage))
+    (home-page "https://metacpan.org/release/Memory-Usage")
+    (synopsis "Tools to determine actual memory usage")
+    (description
+     "This module lets you attempt to measure, from your operating system's
+perspective, how much memory a process is using at any given time.")
+    (license license:perl-license)))
+
 (define-public perl-mime-base64
   (package
     (name "perl-mime-base64")
@@ -8613,6 +8814,34 @@ the @dfn{Pod} (plain old documentation) markup language that is typically
 used for writing documentation for Perl and for Perl modules.")
     (license (package-license perl))))
 
+(define-public perl-pod-spell
+  (package
+    (name "perl-pod-spell")
+    (version "1.25")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/H/HA/HAARG/Pod-Spell-" version
+                    ".tar.gz"))
+              (sha256
+               (base32
+                "18wzpfn39hpw6n8g9pwh964nid8skks79i5jdcm33gf9kf5qx3r0"))))
+    (build-system perl-build-system)
+    (native-inputs (list perl-file-sharedir-install))
+    (propagated-inputs (list perl-class-tiny perl-file-sharedir
+                             perl-lingua-en-inflect))
+    (home-page "https://metacpan.org/release/Pod-Spell")
+    (synopsis "Formatter for spellchecking Pod")
+    (description
+     "@code{Pod::Spell} is a Pod formatter whose output is good
+for spellchecking.
+
+@code{Pod::Spell} is rather like @code{Pod::Text}, except that it doesn't put
+much effort into actual formatting, and it suppresses things that look like Perl
+symbols or Perl jargon (so that your spellchecking program won't complain about
+mystery words like \"@code{$thing}\" or \"@code{Foo::Bar}\" or \"@code{hashref}\").")
+    (license license:artistic2.0)))
+
 (define-public perl-posix-strftime-compiler
   (package
     (name "perl-posix-strftime-compiler")
@@ -8661,6 +8890,80 @@ applications.")
 code.")
     (license license:perl-license)))
 
+(define-public perl-ppix-regexp
+  (package
+    (name "perl-ppix-regexp")
+    (version "0.085")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/W/WY/WYANT/PPIx-Regexp-" version
+                    ".tar.gz"))
+              (sha256
+               (base32
+                "07fg63ql3f7hv1ys10l8j0p562ndraq9lk66iw9y0f444j4vpw1f"))))
+    (build-system perl-build-system)
+    (native-inputs (list perl-module-build))
+    (propagated-inputs (list perl-ppi))
+    (home-page "https://metacpan.org/release/PPIx-Regexp")
+    (synopsis "Parse Perl string literals and string-literal-like things")
+    (description
+     "The purpose of the @code{PPIx-Regexp} package is to parse
+regular expressions in a manner similar to the way the @code{PPI} package parses
+Perl.  This class forms the root of the parse tree, playing a role similar to
+@code{PPI::Document}.")
+    (license license:perl-license)))
+
+(define-public perl-ppix-quotelike
+  (package
+    (name "perl-ppix-quotelike")
+    (version "0.023")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/W/WY/WYANT/PPIx-QuoteLike-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "08ad4d20afvi1c4xzwbfk94lmf6gwlmqkdrpjxzf0lrcklaa6xim"))))
+    (build-system perl-build-system)
+    (native-inputs (list perl-module-build))
+    (propagated-inputs (list perl-ppi perl-ppix-regexp perl-readonly))
+    (home-page "https://metacpan.org/release/PPIx-QuoteLike")
+    (synopsis "Parse Perl string literals and string-literal-like things")
+    (description
+     "@code{PPIX::QuoteLike} parses Perl string literals and things that
+are reasonably like string literals.  Its real reason for being is to find
+interpolated variables for @code{Perl::Critic} policies and similar code.")
+    (license license:perl-license)))
+
+(define-public perl-ppix-utilities
+  (package
+    (name "perl-ppix-utilities")
+    (version "1.001000")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/E/EL/ELLIOTJS/PPIx-Utilities-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "16yb7dnz8lgq2azs8jxj1wac60kbn16x8y4py04ci8nndww87903"))))
+    (build-system perl-build-system)
+    (native-inputs (list perl-module-build perl-test-deep))
+    (propagated-inputs (list perl-exception-class perl-ppi perl-readonly-xs
+                             perl-task-weaken))
+    (home-page "https://metacpan.org/release/PPIx-Utilities")
+    (synopsis "Extensions to PPI")
+    (description
+     "@code{PPIx::Utilities} is a collection of functions for dealing
+with @code{PPI} objects, many of which originated in @code{Perl::Critic}.  They
+are organized into modules by the kind of @code{PPI} class they relate to, by
+replacing the \"@code{PPI}\" at the front of the module name with
+\"@code{PPIx::Utilities}\", e.g. functionality related to @code{PPI::Nodes} is
+in @code{PPIx::Utilities::Node}.")
+    (license license:perl-license)))
+
 (define-public perl-probe-perl
   (package
     (name "perl-probe-perl")
@@ -8729,6 +9032,38 @@ can also be useful as a development and debugging tool for catching updates to
 variables that should not be changed.")
     (license (package-license perl))))
 
+(define-public perl-readonly-xs
+  (package
+    (name "perl-readonly-xs")
+    (version "1.05")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/R/RO/ROODE/Readonly-XS-" version
+                    ".tar.gz"))
+              (sha256
+               (base32
+                "03gz7yp194fwah2bc36ww04hgw1qx8p6y68vvnywircrablc9rca"))))
+    (build-system perl-build-system)
+    (propagated-inputs (list perl-readonly))
+    (home-page "https://metacpan.org/release/Readonly-XS")
+    (synopsis "Companion module for @code{Readonly.pm}, to speed up read-only
+scalar variables")
+    (description
+     "The @code{Readonly} module is an effective way to create non-modifiable
+variables.  However, it's relatively slow.
+
+The reason it's slow is that is implements the read-only-ness of variables via
+tied objects.  This mechanism is inherently slow.  Perl simply has to do a lot
+of work under the hood to make tied variables work.
+
+This module corrects the speed problem, at least with respect to scalar
+variables.  When @code{Readonly::XS} is installed, @code{Readonly} uses it to
+access the internals of scalar variables.  Instead of creating a scalar variable
+object and tying it, @code{Readonly} simply flips the @code{SvREADONLY} bit in
+the scalar's @code{FLAGS} structure.")
+    (license license:perl-license)))
+
 (define-public perl-ref-util-xs
   (package
     (name "perl-ref-util-xs")
@@ -8774,6 +9109,30 @@ codes.")
     ;; Quad-licensed: Perl Artistic, Perl Artistic 2.0, X11, and BSD.
     (license (list (package-license perl) license:x11 license:bsd-3))))
 
+(define-public perl-regexp-grammars
+  (package
+    (name "perl-regexp-grammars")
+    (version "1.058")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/D/DC/DCONWAY/Regexp-Grammars-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "14hwskrmy6ma0k9nr1amrf7wpb1f6jsx7x29kgizlx0n4n7db27a"))))
+    (build-system perl-build-system)
+    (native-inputs (list perl-module-build perl-test-pod perl-moose))
+    (home-page "https://metacpan.org/release/Regexp-Grammars")
+    (synopsis "Complete recursive descent parser on Perl's regex engine")
+    (description
+     "The @code{Regexp::Grammars} module adds a small number of new
+regex constructs that can be used within Perl 5.10 patterns to implement
+complete recursive-descent parsing.  It allows you to go beyond matching
+complex, nested and recursive structures, and allows you to parse and extract
+hierarchical data from it.")
+    (license license:perl-license)))
+
 (define-public perl-regexp-util
   (package
     (name "perl-regexp-util")
@@ -9307,6 +9666,30 @@ expanding standard C/Unix-style backslash escapes like \n and \t, wrapping and
 removing double-quotes, and truncating to fit within a desired length.")
     (license (package-license perl))))
 
+(define-public perl-string-format
+  (package
+    (name "perl-string-format")
+    (version "1.18")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/S/SR/SREZIC/String-Format-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0y77frxzjifd4sw0j19cc346ysas1mya84rdxaz279lyin7plhcy"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/String-Format")
+    (synopsis "Format sprintf-like strings with arbitrary format definitions")
+    (description
+     "@code{String::Format} lets you define arbitrary printf-like format
+sequences to be expanded.  This module would be most useful in configuration
+files and reporting tools, where the results of a query need to be formatted in
+a particular way.  It was inspired by
+@url{http://www.mutt.org/doc/manual/manual.html#index-format,mutt's
+@code{index_format} and related directives}.")
+    (license license:gpl2)))
+
 (define-public perl-string-formatter
   (package
     (name "perl-string-formatter")
@@ -9638,6 +10021,30 @@ mechanism.  The module augments the standard Perl syntax with two new
 statements: @code{switch} and @code{case}.")
     (license (package-license perl))))
 
+(define-public perl-syntax-keyword-try
+  (package
+    (name "perl-syntax-keyword-try")
+    (version "0.28")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/P/PE/PEVANS/Syntax-Keyword-Try-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "1j02z9w0p9a77maf62cy5324vmc01hks0bfm5qjidc50hafmzbfc"))))
+    (build-system perl-build-system)
+    (native-inputs (list perl-module-build))
+    (inputs (list perl-xs-parse-keyword))
+    (home-page "https://metacpan.org/pod/Syntax::Keyword::Try")
+    (synopsis "Try/catch/finally syntax for perl")
+    (description
+     "This module provides a syntax plugin that implements
+exception-handling semantics in a form familiar to users of other
+languages, being built on a block labeled with the @code{try} keyword,
+followed by at least one of a @code{catch} or @code{finally} block.")
+    (license (package-license perl))))
+
 (define-public perl-sys-cpu
   (package
     (name "perl-sys-cpu")
@@ -10113,6 +10520,27 @@ used to justify strings to various alignment styles.")
 text sequences from strings.")
     (license (package-license perl))))
 
+(define-public perl-text-charwidth
+  (package
+    (name "perl-text-charwidth")
+    (version "0.04")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/K/KU/KUBOTA/Text-CharWidth-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "1y040wiqx78pnr0wxbjhpzjxm2a9qiqq479gzn4qwcyrzpsdbpmb"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/dist/Text-CharWidth")
+    (synopsis "Get number of occupied columns of a string on terminal")
+    (description
+     "With this module, you can calculate terminal character
+widths that vary by locale.  This module supplies features similar to
+wcwidth(3) and wcswidth(3) in C language.")
+    (license (package-license perl))))
+
 (define-public perl-text-csv
   (package
     (name "perl-text-csv")
@@ -11201,6 +11629,28 @@ supersede Perl's builtin @code{T_PTROBJ} with something that is extensible
 neither visible nor modifiable from Perl space).")
     (license (package-license perl))))
 
+(define-public perl-xs-parse-keyword
+  (package
+    (name "perl-xs-parse-keyword")
+    (version "0.06")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/P/PE/PEVANS/XS-Parse-Keyword-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "0nnr8akkxb2h2y3d5r51pr84vvxkq89ynmi9azkbnn79jmbcbgvq"))))
+    (build-system perl-build-system)
+    (native-inputs (list perl-module-build perl-test-simple))
+    (home-page "https://metacpan.org/dist/XS-Parse-Keyword")
+    (synopsis "XS functions to assist in parsing keyword syntax")
+    (description
+     "This module provides some XS functions to assist in writing
+syntax modules that provide new perl-visible syntax, primarily for authors of
+keyword plugins using the @code{PL_keyword_plugin} hook mechanism.")
+    (license (package-license perl))))
+
 (define-public perl-yaml
   (package
     (name "perl-yaml")
@@ -11640,6 +12090,28 @@ method calls.  Furthermore, a partial sequence can be created and held, and
 used as the head of many different sequences.")
     (license license:perl-license)))
 
+(define-public perl-file-fcntllock
+  (package
+    (name "perl-file-fcntllock")
+    (version "0.22")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/J/JT/JTT/File-FcntlLock-" version
+                    ".tar.gz"))
+              (sha256
+               (base32
+                "1pxwknq4lw0wqpkh8pf18qsjf9g503vx6a5184vvffprzwpbp6ls"))))
+    (build-system perl-build-system)
+    (home-page "https://metacpan.org/release/File-FcntlLock")
+    (synopsis "File locking with fcntl(2)")
+    (description "File locking in Perl is usually done using the @code{flock}
+function.  Unfortunately, this only allows locks on whole files and is often
+implemented in terms of the @code{flock(2)} system function which has some
+shortcomings (especially concerning locks on remotely mounted file systems)
+and slightly different behaviour than @code{fcntl(2)}.")
+    (license license:perl-license)))
+
 (define-public perl-font-ttf
   (package
     (name "perl-font-ttf")
@@ -11832,6 +12304,34 @@ called \"American Soundex\" used for US census data, and current maintained by
 the National Archives and Records Administration (NARA).")
     (license license:perl-license)))
 
+(define-public perl-text-wrapi18n
+  (package
+    (name "perl-text-wrapi18n")
+    (version "0.06")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "mirror://cpan/authors/id/K/KU/KUBOTA/Text-WrapI18N-"
+                    version ".tar.gz"))
+              (sha256
+               (base32
+                "12548qc99ms12yp5j26076p0zazjfv1b618h5k8r5iy2y0brmljb"))))
+    (build-system perl-build-system)
+    (inputs (list perl-text-charwidth))
+    (home-page "https://metacpan.org/pod/Text::WrapI18N")
+    (synopsis "Line wrapping for multibyte, fullwidth, combining
+characters and so on")
+    (description
+     "This module intends to be a better Text::Wrap module.  This
+module is needed to support multibyte character encodings such as UTF-8,
+EUC-JP, EUC-KR, GB2312, and Big5.  This module also supports characters with
+irregular widths, such as combining characters (which occupy zero columns on
+terminal, like diacritical marks in UTF-8) and fullwidth characters (which
+occupy two columns on terminal, like most of east Asian characters).  Also,
+minimal handling of languages which doesn't use whitespaces between
+words (like Chinese and Japanese) is supported.")
+    (license (package-license perl))))
+
 (define-public perl-regexp-pattern
   (package
     (name "perl-regexp-pattern")