Subject: bug#26747: [PATCH] gnu: Avoid circular dependencies by perl license

From: Petter <[email-masked]>
Date: Tue, 2 May 2017 17:46:48 +0200

Hi Guix,

I've never been able to add modules to perl.scm. Today civodul showed me that
it's because "(package-license perl)" in at least a few other files were causing
circular dependencies with perl.scm. I don't know how to figure out exactly
which were causing this for perl.scm, so I've changed this in every file with
this (except perl.scm) to have "license:perl-license" instead. (Fixing just
what I'd have needed seems like leaving a problem for the next person anyway.)

With this patch I can add modules to perl.scm :)

Best,
Petter

P.S.  The error I got was the same as I get with most of my errors: "unknown
package". At this point I'm beginning to interpret "unknown package" as
"something failed". I find it that unhelpful, but more misleading. Maybe we
should discuss this.
From 7c39ae8fe3b956eb291fd1bc5ba86297cefb67b8 Mon Sep 17 00:00:00 2001
From: Petter <[email-masked]>
Date: Tue, 2 May 2017 16:57:52 +0200
Subject: [PATCH] gnu: Avoid circular dependencies by perl license

* guix/licenses.scm: New variable.
* gnu/packages/bioinformatics.scm: Change (package-license perl) to perl-license.
* gnu/packages/compression.scm: Same.
* gnu/packages/databases.scm: Same.
* gnu/packages/gd.scm: Same.
* gnu/packages/language.scm: Same.
* gnu/packages/libevent.scm: Same.
* gnu/packages/mail.scm: Same.
* gnu/packages/messaging.scm: Same.
* gnu/packages/ncurses.scm: Same.
* gnu/packages/networking.scm: Same.
* gnu/packages/photo.scm: Same.
* gnu/packages/tcl.scm: Same.
* gnu/packages/tex.scm: Same.
* gnu/packages/tls.scm: Same.
* gnu/packages/web.scm: Same.
* gnu/packages/wm.scm: Same.
* gnu/packages/xml.scm: Same.
* gnu/packages/xorg.scm: Same.
* gnu/packages/zip.scm: Same.
---
 gnu/packages/bioinformatics.scm |   2 +-
 gnu/packages/compression.scm    |   6 +-
 gnu/packages/databases.scm      |  24 +++---
 gnu/packages/gd.scm             |   6 +-
 gnu/packages/language.scm       |  32 ++++----
 gnu/packages/libevent.scm       |   4 +-
 gnu/packages/mail.scm           |  20 ++---
 gnu/packages/messaging.scm      |   2 +-
 gnu/packages/ncurses.scm        |   2 +-
 gnu/packages/networking.scm     |   8 +-
 gnu/packages/photo.scm          |   2 +-
 gnu/packages/tcl.scm            |   2 +-
 gnu/packages/tex.scm            |   2 +-
 gnu/packages/tls.scm            |   8 +-
 gnu/packages/web.scm            | 166 ++++++++++++++++++++--------------------
 gnu/packages/wm.scm             |   2 +-
 gnu/packages/xml.scm            |  46 +++++------
 gnu/packages/xorg.scm           |   4 +-
 gnu/packages/zip.scm            |   2 +-
 guix/licenses.scm               |   4 +
 20 files changed, 174 insertions(+), 170 deletions(-)

diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.scm
index 83a48d0f3..c80084f8a 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -721,7 +721,7 @@ objects are made from the Sequence objects, Sequence objects have access to
 Annotation and SeqFeature objects and databases, Blast objects can be
 converted to Alignment objects, and so on.  This means that the objects
 provide a coordinated and extensible framework to do computational biology.")
-      (license (package-license perl)))))
+      (license license:perl-license))))
 
 (define-public python-biopython
   (package
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index 4793755c2..3fc713b22 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -611,7 +611,7 @@ decompression of some loosely related file formats used by Microsoft.")
     (synopsis "Low-level interface to bzip2 compression library")
     (description "This module provides a Perl interface to the bzip2
 compression library.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-compress-raw-zlib
   (package
@@ -646,7 +646,7 @@ GZIP_OS_CODE = AUTO_DETECT"
     (synopsis "Low-level interface to zlib compression library")
     (description "This module provides a Perl interface to the zlib
 compression library.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-io-compress
   (package
@@ -668,7 +668,7 @@ compression library.")
     (synopsis "IO Interface to compressed files/buffers")
     (description "IO-Compress provides a Perl interface to allow reading and
 writing of compressed data created with the zlib and bzip2 libraries.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public lz4
   (package
diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index cc08994e2..01488e0d6 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -790,7 +790,7 @@ extremely small.")
     (synopsis "Database independent interface for Perl")
     (description "This package provides an database interface for Perl.")
     (home-page "http://search.cpan.org/dist/DBI")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbix-class
   (package
@@ -844,7 +844,7 @@ still providing access to as many of the capabilities of the database as
 possible, including retrieving related records from multiple tables in a
 single query, \"JOIN\", \"LEFT JOIN\", \"COUNT\", \"DISTINCT\", \"GROUP BY\",
 \"ORDER BY\" and \"HAVING\" support.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbix-class-cursor-cached
   (package
@@ -869,7 +869,7 @@ single query, \"JOIN\", \"LEFT JOIN\", \"COUNT\", \"DISTINCT\", \"GROUP BY\",
     (synopsis "Cursor with built-in caching support")
     (description "DBIx::Class::Cursor::Cached provides a cursor class with
 built-in caching support.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbix-class-introspectablem2m
   (package
@@ -894,7 +894,7 @@ relationships are actually just a collection of convenience methods installed
 to bridge two relationships.  This DBIx::Class component can be used to store
 all relevant information about these non-relationships so they can later be
 introspected and examined.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbix-class-schema-loader
   (package
@@ -949,7 +949,7 @@ introspected and examined.")
     (description "DBIx::Class::Schema::Loader automates the definition of a
 DBIx::Class::Schema by scanning database table definitions and setting up the
 columns, primary keys, unique constraints and relationships.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbd-pg
   (package
@@ -973,7 +973,7 @@ columns, primary keys, unique constraints and relationships.")
     (synopsis "DBI PostgreSQL interface")
     (description "This package provides a PostgreSQL driver for the Perl5
 @dfn{Database Interface} (DBI).")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbd-mysql
   (package
@@ -997,7 +997,7 @@ columns, primary keys, unique constraints and relationships.")
     (synopsis "DBI MySQL interface")
     (description "This package provides a MySQL driver for the Perl5
 @dfn{Database Interface} (DBI).")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-dbd-sqlite
   (package
@@ -1019,7 +1019,7 @@ columns, primary keys, unique constraints and relationships.")
 the entire thing in the distribution.  So in order to get a fast transaction
 capable RDBMS working for your Perl project you simply have to install this
 module, and nothing else.")
-    (license (package-license perl))
+    (license license:perl-license)
     (home-page "http://search.cpan.org/~ishigaki/DBD-SQLite/lib/DBD/SQLite.pm")))
 
 (define-public perl-sql-abstract
@@ -1052,7 +1052,7 @@ been modified to make the SQL easier to generate from Perl data structures.
 The underlying idea is for this module to do what you mean, based on the data
 structures you provide it, so that you don't have to modify your code every
 time your data changes.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-sql-splitstatement
   (package
@@ -1078,7 +1078,7 @@ time your data changes.")
     (synopsis "Split SQL code into atomic statements")
     (description "This module tries to split any SQL code, even including
 non-standard extensions, into the atomic statements it is composed of.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-sql-tokenizer
   (package
@@ -1098,7 +1098,7 @@ non-standard extensions, into the atomic statements it is composed of.")
     (description "SQL::Tokenizer is a tokenizer for SQL queries.  It does not
 claim to be a parser or query verifier.  It just creates sane tokens from a
 valid SQL query.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public unixodbc
   (package
@@ -1301,7 +1301,7 @@ trees (LSM), for sustained throughput under random insert workloads.")
     "Perl5 access to Berkeley DB version 1.x")
   (description
     "The DB::File module provides Perl bindings to the Berkeley DB version 1.x.")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public lmdb
   (package
diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm
index 62c8fd858..aac0f9664 100644
--- a/gnu/packages/gd.scm
+++ b/gnu/packages/gd.scm
@@ -32,7 +32,7 @@
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages pkg-config)
-  #:use-module ((guix licenses) #:select (non-copyleft)))
+  #:use-module ((guix licenses) #:select (non-copyleft perl-license)))
 
 (define-public gd
   (package
@@ -139,7 +139,7 @@ most common applications of GD involve website development.")
     (description "GD.pm is an autoloadable interface module for libgd, a
 popular library for creating and manipulating PNG files.  With this library
 you can create PNG images on the fly or modify existing files.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-gd-securityimage
   (package
@@ -166,4 +166,4 @@ security (captcha) images.  The final output is the actual graphic data, the
 mime type of the graphic, and the created random string.  The module also has
 some \"styles\" that are used to create the background (or foreground) of the
 image.")
-    (license (package-license perl))))
+    (license perl-license)))
diff --git a/gnu/packages/language.scm b/gnu/packages/language.scm
index e7b42290f..ee0c5c0d8 100644
--- a/gnu/packages/language.scm
+++ b/gnu/packages/language.scm
@@ -22,7 +22,7 @@
   #:use-module (gnu packages web)
   #:use-module (guix packages)
   #:use-module (guix build-system perl)
-  #:use-module ((guix licenses) #:select (gpl2 gpl3))
+  #:use-module ((guix licenses) #:select (gpl2 gpl3 perl-license))
   #:use-module (guix download))
 
 (define-public perl-lingua-en-findnumber
@@ -45,7 +45,7 @@
     (description "This module provides a regular expression for finding
 numbers in English text.  It also provides functions for extracting and
 manipulating such numbers.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-en-inflect
   (package
@@ -68,7 +68,7 @@ manipulating such numbers.")
 words.  Plural forms of all nouns, most verbs, and some adjectives are
 provided.  Where appropriate, \"classical\" variants (for example: \"brother\"
 -> \"brethren\", \"dogma\" -> \"dogmata\", etc.) are also provided.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-en-inflect-number
   (package
@@ -90,7 +90,7 @@ provided.  Where appropriate, \"classical\" variants (for example: \"brother\"
     (description "This module extends the functionality of Lingua::EN::Inflect
 with three new functions for determining plurality of a word and forcefully
 converting a word to singular or plural.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-en-inflect-phrase
   (package
@@ -117,7 +117,7 @@ converting a word to singular or plural.")
     (synopsis "Inflect short English phrases")
     (description "This module attempts to pluralize or singularize short
 English phrases.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-en-number-isordinal
   (package
@@ -141,7 +141,7 @@ English phrases.")
     (synopsis "Detect if English number is ordinal or cardinal")
     (description "This module will tell you if a number, either in words or as
 digits, is a cardinal or ordinal number.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-en-tagger
   (package
@@ -190,7 +190,7 @@ using a set of regular expressions.")
     (synopsis "Convert English text to numbers")
     (description "This module converts English text into numbers.  It supports
 both ordinal and cardinal numbers, negative numbers, and very large numbers.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-pt-stemmer
   (package
@@ -210,7 +210,7 @@ both ordinal and cardinal numbers, negative numbers, and very large numbers.")
     (description "This module implements a Portuguese stemming algorithm
 proposed in the paper A Stemming Algorithm for the Portuguese Language by
 Moreira, V. and Huyck, C.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-stem
   (package
@@ -240,7 +240,7 @@ Moreira, V. and Huyck, C.")
     (synopsis "Stemming of words in various languages")
     (description "This routine applies stemming algorithms to its parameters,
 returning the stemmed words as appropriate to the selected locale.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-stem-fr
   (package
@@ -259,7 +259,7 @@ returning the stemmed words as appropriate to the selected locale.")
     (synopsis "Porter's stemming algorithm for French")
     (description "This module uses a modified version of the Porter Stemming
 Algorithm to return a stemmed French word.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-stem-it
   (package
@@ -278,7 +278,7 @@ Algorithm to return a stemmed French word.")
     (synopsis "Porter's stemming algorithm for Italian")
     (description "This module applies the Porter Stemming Algorithm to its
 parameters, returning the stemmed Italian word.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-stem-ru
   (package
@@ -297,7 +297,7 @@ parameters, returning the stemmed Italian word.")
     (synopsis "Porter's stemming algorithm for Russian")
     (description "This module applies the Porter Stemming Algorithm to its
 parameters, returning the stemmed Russian (KOI8-R only) word.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-lingua-stem-snowball-da
   (package
@@ -337,7 +337,7 @@ Lingua::Stem::Snowball::Se.")
     (synopsis "Porters stemming algorithm for Norwegian")
     (description "Lingua::Stem::Snowball::No is a perl port of the norwegian
 stemmer at http://snowball.tartarus.org.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-snowball-swedish
   (package
@@ -357,7 +357,7 @@ stemmer at http://snowball.tartarus.org.")
     (synopsis "Porters stemming algorithm for Swedish")
     (description "Lingua::Stem::Snowball::Se is a perl port of the swedish
 stemmer at http://snowball.sourceforge.net.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-string-toidentifier-en
   (package
@@ -383,7 +383,7 @@ converting an arbitrary string into a readable representation using the ASCII
 subset of \"\\w\" for use as an identifier in a computer program.  The intent
 is to make unique identifier names from which the content of the original
 string can be easily inferred by a human just by reading the identifier.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-text-german
   (package
@@ -402,4 +402,4 @@ string can be easily inferred by a human just by reading the identifier.")
     (synopsis "German grundform reduction")
     (description "This module is a rather incomplete implementation of work
 done by Gudrun Putze-Meier.")
-    (license (package-license perl))))
+    (license perl-license)))
diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm
index 5d769aaf4..c903352bb 100644
--- a/gnu/packages/libevent.scm
+++ b/gnu/packages/libevent.scm
@@ -192,7 +192,7 @@ Currently supported event loops are EV, Event, Glib/Gtk2, Tk, Qt,
 @code{Event::Lib}, Irssi, @code{IO::Async} and POE (and thus also WxWidgets
 and Prima).  It also comes with a very fast Pure Perl event loop that does
 not rely on XS.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-ev
   (package
@@ -233,4 +233,4 @@ not rely on XS.")
      "This module provides an interface to @code{libev}, a high performance
 full-featured event loop.  It can be used through the @code{AnyEvent} module
 and still be faster than other event loops currently supported in Perl.")
-    (license (package-license perl))))
+    (license perl-license)))
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index a10c3bcbf..014c77d91 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -104,7 +104,7 @@
                 #:select (gpl2 gpl2+ gpl3 gpl3+ lgpl2.1 lgpl2.1+ lgpl3+
                            non-copyleft (expat . license:expat) bsd-3
                            public-domain bsd-4 isc (openssl . license:openssl)
-                           bsd-2 x11-style agpl3 asl2.0))
+                           bsd-2 x11-style agpl3 asl2.0 perl-license))
   #:use-module (guix packages)
   #:use-module (guix download)
   #:use-module (guix git-download)
@@ -1277,7 +1277,7 @@ mailboxes.  Currently Maildir and IMAP are supported types.")
     (synopsis "Interface to mail representations")
     (description "Email::Abstract provides module writers with the ability to
 write simple, representation-independent mail handling code.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-address
   (package
@@ -1297,7 +1297,7 @@ write simple, representation-independent mail handling code.")
     (description "Email::Address implements a regex-based RFC 2822 parser that
 locates email addresses in strings and returns a list of Email::Address
 objects found.  Alternatively you may construct objects manually.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-date-format
   (package
@@ -1316,7 +1316,7 @@ objects found.  Alternatively you may construct objects manually.")
     (synopsis "Produce RFC 2822 date strings")
     (description "Email::Date::Format provides a means for generating an RFC
 2822 compliant datetime string.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-messageid
   (package
@@ -1335,7 +1335,7 @@ objects found.  Alternatively you may construct objects manually.")
     (synopsis "Generate world unique message-ids")
     (description "Email::MessageID generates recommended message-ids to
 identify a message uniquely.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-mime
   (package
@@ -1363,7 +1363,7 @@ identify a message uniquely.")
 handle MIME encoded messages.  It takes a message as a string, splits it up
 into its constituent parts, and allows you access to various parts of the
 message.  Headers are decoded from MIME encoding.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-mime-contenttype
   (package
@@ -1384,7 +1384,7 @@ message.  Headers are decoded from MIME encoding.")
     (synopsis "Parse MIME Content-Type headers")
     (description "Email::MIME::ContentType parses a MIME Content-Type
 header.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-mime-encodings
   (package
@@ -1404,7 +1404,7 @@ header.")
     (home-page "http://search.cpan.org/dist/Email-MIME-Encodings")
     (synopsis "Unified interface to MIME encoding and decoding")
     (description "This module wraps MIME::Base64 and MIME::QuotedPrint.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-sender
   (package
@@ -1436,7 +1436,7 @@ header.")
     (synopsis "Perl library for sending email")
     (description "Email::Sender replaces the old and sometimes problematic
 Email::Send library.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public perl-email-simple
   (package
@@ -1457,7 +1457,7 @@ Email::Send library.")
     (synopsis "Parsing of RFC 2822 messages")
     (description "Email::Simple provides simple parsing of RFC 2822 message
 format and headers.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public libesmtp
   (package
diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm
index 59e2b23d3..9e45b7ad0 100644
--- a/gnu/packages/messaging.scm
+++ b/gnu/packages/messaging.scm
@@ -1001,7 +1001,7 @@ for @uref{https://torproject.org,tor} router) and many more.")
     (synopsis "Perl implementation of PSYC protocol")
     (home-page "http://perlpsyc.psyc.eu/")
     (license (list license:gpl2
-                   (package-license perl)
+                   license:perl-license
                    ;; contrib/irssi-psyc.pl:
                    license:public-domain
                    ;; bin/psycplay states AGPL with no version:
diff --git a/gnu/packages/ncurses.scm b/gnu/packages/ncurses.scm
index a49467965..44a79e718 100644
--- a/gnu/packages/ncurses.scm
+++ b/gnu/packages/ncurses.scm
@@ -252,7 +252,7 @@ curses widgets, such as dialog boxes.")
     (description
      "@code{Curses} is the interface between Perl and the curses library
 of your system.")
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public stfl
   (package
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index 3182443c1..ea01bb7ce 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -739,7 +739,7 @@ definitions and structure manipulators for Perl.")
     "Programmable DNS resolver class for offline emulation of DNS")
   (description "Net::DNS::Resolver::Programmable is a programmable DNS resolver for
 offline emulation of DNS.")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public perl-netaddr-ip
  (package
@@ -772,7 +772,7 @@ offline emulation of DNS.")
   (synopsis
     "Manages IPv4 and IPv6 addresses and subnets")
   (description "NetAddr::IP manages IPv4 and IPv6 addresses and subsets.")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public perl-net-patricia
  (package
@@ -846,7 +846,7 @@ offline emulation of DNS.")
     "Look up location and network information by IP Address in Perl")
   (description "The Perl module 'Geo::IP'.  It looks up location and network
 information by IP Address.")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public perl-io-socket-inet6
  (package
@@ -876,7 +876,7 @@ information by IP Address.")
     "Perl object interface for AF_INET/AF_INET6 domain sockets")
   (description "IO::Socket::INET6 is an interface for AF_INET/AF_INET6 domain
 sockets in Perl.")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public proxychains-ng
   (package
diff --git a/gnu/packages/photo.scm b/gnu/packages/photo.scm
index c782ecf47..fff19551a 100644
--- a/gnu/packages/photo.scm
+++ b/gnu/packages/photo.scm
@@ -192,7 +192,7 @@ MTP, and much more.")
     (description "This package provides the @code{exiftool} command and the
 @code{Image::ExifTool} Perl library to manipulate EXIF tags of digital images
 and a wide variety of other metadata.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public libpano13
   (package
diff --git a/gnu/packages/tcl.scm b/gnu/packages/tcl.scm
index adad55e2d..de888891c 100644
--- a/gnu/packages/tcl.scm
+++ b/gnu/packages/tcl.scm
@@ -220,7 +220,7 @@ interfaces (GUIs) in the Tcl language.")
     ;; those of the orignal Tix4.1.3 or Tk8.4.* sources. See the files
     ;; pTk/license.terms, pTk/license.html_lib, and pTk/Tix.license for
     ;; details of this license."
-    (license (package-license perl))))
+    (license perl-license)))
 
 (define-public tcllib
   (package
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 46c578f14..7839e16b2 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -428,7 +428,7 @@ and processing BibTeX files.  @code{Text::BibTeX} gives you access to the data
 at many different levels: you may work with BibTeX entries as simple field to
 string mappings, or get at the original form of the data as a list of simple
 values (strings, macros, or numbers) pasted together.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public biber
   (package
diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 50e9de480..f90ff5c49 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -634,7 +634,7 @@ web pages on SSL servers (for symmetry, the same API is offered for accessing
 http servers, too), an sslcat() function for writing your own clients, and
 finally access to the SSL api of the SSLeay/OpenSSL package so you can write
 servers or clients for more complicated applications.")
-    (license (package-license perl))
+    (license license:perl-license)
     (home-page "http://search.cpan.org/~mikem/Net-SSLeay-1.66/")))
 
 (define-public perl-crypt-openssl-rsa
@@ -663,7 +663,7 @@ servers or clients for more complicated applications.")
     "RSA encoding and decoding, using the openSSL libraries")
   (description "Crypt::OpenSSL::RSA does RSA encoding and decoding (using the
 OpenSSL libraries).")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define perl-crypt-arguments
    `(#:phases (modify-phases %standard-phases
@@ -699,7 +699,7 @@ OpenSSL libraries).")
   (description "Crypt::OpenSSL::Bignum provides multiprecision integer
 arithmetic in Perl.")
   ;; At your option either gpl1+ or the Artistic License
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public perl-crypt-openssl-random
  (package
@@ -724,7 +724,7 @@ arithmetic in Perl.")
     "OpenSSL/LibreSSL pseudo-random number generator access")
   (description "Crypt::OpenSSL::Random is a OpenSSL/LibreSSL pseudo-random
 number generator")
-  (license (package-license perl))))
+  (license license:perl-license)))
 
 (define-public acme-client
   (package
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 487366b4a..8abd4309d 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -301,7 +301,7 @@ servers that may need it).")
     (description "Starman is a PSGI perl web server that has unique features
 such as high performance, preforking, signal support, superdaemon awareness,
 and UNIX socket support.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public jansson
   (package
@@ -979,7 +979,7 @@ language known as SASS.")
     (synopsis "Compile a log format string to perl-code")
     (description "This module provides methods to compile a log format string
 to perl-code, for faster generation of access_log lines.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-authen-sasl
   (package
@@ -1000,7 +1000,7 @@ to perl-code, for faster generation of access_log lines.")
     (home-page "http://search.cpan.org/dist/Authen-SASL")
     (synopsis "SASL authentication framework")
     (description "Authen::SASL provides an SASL authentication framework.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-action-renderview
   (package
@@ -1026,7 +1026,7 @@ to perl-code, for faster generation of access_log lines.")
     (synopsis "Sensible default Catalyst action")
     (description "This Catalyst action implements a sensible default end
 action, which will forward to the first available view.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-action-rest
   (package
@@ -1061,7 +1061,7 @@ REST requests.  It takes a normal Catalyst action, and changes the dispatch to
 append an underscore and method name.  First it will try dispatching to an
 action with the generated name, and failing that it will try to dispatch to a
 regular method.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-authentication-store-dbix-class
   (package
@@ -1096,7 +1096,7 @@ regular method.")
     (description "The Catalyst::Authentication::Store::DBIx::Class class
 provides access to authentication information stored in a database via
 DBIx::Class.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-component-instancepercontext
   (package
@@ -1120,7 +1120,7 @@ DBIx::Class.")
     (synopsis "Create only one instance of Moose component per context")
     (description "Catalyst::Component::InstancePerContext returns a new
 instance of a component on each request.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-devel
   (package
@@ -1162,7 +1162,7 @@ to run them.  Catalyst-Devel includes the Catalyst::Helper system, which
 autogenerates scripts and tests; Module::Install::Catalyst, a Module::Install
 extension for Catalyst; and requirements for a variety of development-related
 modules.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-dispatchtype-regex
   (package
@@ -1192,7 +1192,7 @@ core.  It is recommend that you use Chained methods or other techniques
 instead.  As part of the refactoring, the dispatch priority of Regex vs Regexp
 vs LocalRegex vs LocalRegexp may have changed.  Priority is now influenced by
 when the dispatch type is first seen in your application.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-model-dbic-schema
   (package
@@ -1237,7 +1237,7 @@ when the dispatch type is first seen in your application.")
   (synopsis "DBIx::Class::Schema Model Class")
   (description "This is a Catalyst Model for DBIx::Class::Schema-based
 Models.")
-  (license (package-license perl))))
+  (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-accesslog
   (package
@@ -1262,7 +1262,7 @@ Models.")
     (description "This Catalyst plugin enables you to create \"access logs\"
 from within a Catalyst application instead of requiring a webserver to do it
 for you.  It will work even with Catalyst debug logging turned off.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-authentication
   (package
@@ -1296,7 +1296,7 @@ for you.  It will work even with Catalyst debug logging turned off.")
 Catalyst apps.  It is the basis for both authentication (checking the user is
 who they claim to be), and authorization (allowing the user to do what the
 system authorises them to do).")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-authorization-roles
   (package
@@ -1325,7 +1325,7 @@ system authorises them to do).")
     (synopsis "Role-based authorization for Catalyst")
     (description "Catalyst::Plugin::Authorization::Roles provides role-based
 authorization for Catalyst based on Catalyst::Plugin::Authentication.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-captcha
   (package
@@ -1349,7 +1349,7 @@ authorization for Catalyst based on Catalyst::Plugin::Authentication.")
     (synopsis "Captchas for Catalyst")
     (description "This plugin creates and validates Captcha images for
 Catalyst.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-configloader
   (package
@@ -1377,7 +1377,7 @@ Catalyst.")
     (description "This module will attempt to load find and load configuration
 files of various types.  Currently it supports YAML, JSON, XML, INI and Perl
 formats.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-session
   (package
@@ -1408,7 +1408,7 @@ formats.")
     (synopsis "Catalyst generic session plugin")
     (description "This plugin links the two pieces required for session
 management in web applications together: the state, and the store.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-session-state-cookie
   (package
@@ -1437,7 +1437,7 @@ management in web applications together: the state, and the store.")
 ID needs to be stored on the client, and the session data needs to be stored
 on the server.  This plugin stores the session ID on the client using the
 cookie mechanism.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-session-store-fastmmap
   (package
@@ -1467,7 +1467,7 @@ cookie mechanism.")
     (description "Catalyst::Plugin::Session::Store::FastMmap is a fast session
 storage plugin for Catalyst that uses an mmap'ed file to act as a shared
 memory interprocess cache.  It is based on Cache::FastMmap.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-stacktrace
   (package
@@ -1492,7 +1492,7 @@ memory interprocess cache.  It is based on Cache::FastMmap.")
 including a stack trace of your application up to the point where the error
 occurred.  Each stack frame is displayed along with the package name, line
 number, file name, and code context surrounding the line number.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-plugin-static-simple
   (package
@@ -1522,7 +1522,7 @@ looking at the file extension in the URL (such as .css or .png or .js).  The
 plugin uses the lightweight MIME::Types module to map file extensions to
 IANA-registered MIME types, and will serve your static files with the correct
 MIME type directly to the browser, without being processed through Catalyst.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-runtime
   (package
@@ -1587,7 +1587,7 @@ MIME type directly to the browser, without being processed through Catalyst.")
 It is designed to make it easy to manage the various tasks you need to do to
 run an application on the web, either by doing them itself, or by letting you
 \"plug in\" existing Perl modules that do what you need.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-traitfor-request-proxybase
   (package
@@ -1618,7 +1618,7 @@ run an application on the web, either by doing them itself, or by letting you
 flexibility in your application's deployment configurations when deployed
 behind a proxy.  Using this module, the request base ($c->req->base) is
 replaced with the contents of the X-Request-Base header.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-view-download
   (package
@@ -1644,7 +1644,7 @@ replaced with the contents of the X-Request-Base header.")
     (description "The purpose of this module is to provide a method for
 downloading data into many supportable formats.  For example, downloading a
 table based report in a variety of formats (CSV, HTML, etc.).")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-view-json
   (package
@@ -1669,7 +1669,7 @@ table based report in a variety of formats (CSV, HTML, etc.).")
     (synopsis "Catalyst JSON view")
     (description "Catalyst::View::JSON is a Catalyst View handler that returns
 stash data in JSON format.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalyst-view-tt
   (package
@@ -1696,7 +1696,7 @@ stash data in JSON format.")
   (synopsis "Template View Class")
   (description "This module is a Catalyst view class for the Template
 Toolkit.")
-  (license (package-license perl))))
+  (license l:perl-license)))
 
 (define-public perl-catalystx-component-traits
   (package
@@ -1729,7 +1729,7 @@ Catalyst component base class that reads the optional \"traits\" parameter
 from app and component config and instantiates the component subclass with
 those traits using \"new_with_traits\" in MooseX::Traits from
 MooseX::Traits::Pluggable.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalystx-roleapplicator
   (package
@@ -1752,7 +1752,7 @@ MooseX::Traits::Pluggable.")
     (synopsis "Apply roles to Catalyst classes")
     (description "CatalystX::RoleApplicator applies roles to Catalyst
 application classes.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-catalystx-script-server-starman
   (package
@@ -1779,7 +1779,7 @@ application classes.")
     (synopsis "Catalyst development server with Starman")
     (description "This module provides a Catalyst extension to replace the
 development server with Starman.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-cgi
   (package
@@ -1807,7 +1807,7 @@ processing and preparing HTTP requests and responses.  Major features include
 processing form submissions, file uploads, reading and writing cookies, query
 string generation and manipulation, and processing and preparing HTTP
 headers.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-cgi-simple
   (package
@@ -1830,7 +1830,7 @@ headers.")
     (description "CGI::Simple provides a relatively lightweight drop in
 replacement for CGI.pm.  It shares an identical OO interface to CGI.pm for
 parameter parsing, file upload, cookie handling and header generation.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-cgi-struct
   (package
@@ -1875,7 +1875,7 @@ inputs, in a manner reminiscent of how PHP does.")
     (synopsis "Date conversion routines")
     (description "This module provides functions that deal with the date
 formats used by the HTTP protocol.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-digest-md5-file
   (package
@@ -1896,7 +1896,7 @@ formats used by the HTTP protocol.")
     (synopsis "MD5 sums for files and urls")
     (description "Digest::MD5::File is a Perl extension for getting MD5 sums
 for files and urls.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-encode-locale
   (package
@@ -1911,7 +1911,7 @@ for files and urls.")
               (base32
                "1h8fvcdg3n20c2yp7107yhdkkx78534s9hnvn7ps8hpmf4ks0vqp"))))
     (build-system perl-build-system)
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl locale encoding determination")
     (description
      "The POSIX locale system is used to specify both the language
@@ -1949,7 +1949,7 @@ with Encode::decode(locale => $string).")
     (description "@code{Feed::Find} implements feed auto-discovery for finding
 syndication feeds, given a URI.  It will discover the following feed formats:
 RSS 0.91, RSS 1.0, RSS 2.0, Atom.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-file-listing
   (package
@@ -1966,7 +1966,7 @@ RSS 0.91, RSS 1.0, RSS 2.0, Atom.")
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-http-date" ,perl-http-date)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl directory listing parser")
     (description
      "The File::Listing module exports a single function called parse_dir(),
@@ -2028,7 +2028,7 @@ Yahoo! Finance, Fidelity Investments, and the Australian Stock Exchange.")
     (synopsis "Perl extension providing access to the GSSAPIv2 library")
     (description "This is a Perl extension for using GSSAPI C bindings as
 described in RFC 2744.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-html-element-extended
   (package
@@ -2050,7 +2050,7 @@ described in RFC 2744.")
     (description
      "HTML::Element::Extended is a Perl extension for manipulating a table
 composed of HTML::Element style components.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-html-form
   (package
@@ -2075,7 +2075,7 @@ composed of HTML::Element style components.")
     (synopsis "Perl class representing an HTML form element")
     (description "Objects of the HTML::Form class represents a single HTML
 <form> ... </form> instance.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-html-lint
   (package
@@ -2121,7 +2121,7 @@ syntactic legitmacy.")
     (description
      "HTML::TableExtract is a Perl module for extracting the content contained
 in tables within an HTML document, either as text or encoded element trees.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-html-tree
   (package
@@ -2147,7 +2147,7 @@ in tables within an HTML document, either as text or encoded element trees.")
     (synopsis "Work with HTML in a DOM-like tree structure")
     (description "This distribution contains a suite of modules for
 representing, creating, and extracting information from HTML syntax trees.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-html-parser
   (package
@@ -2165,7 +2165,7 @@ representing, creating, and extracting information from HTML syntax trees.")
     (inputs
      `(("perl-html-tagset" ,perl-html-tagset)
        ("perl-http-message" ,perl-http-message)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl HTML parser class")
     (description
      "Objects of the HTML::Parser class will recognize markup and separate
@@ -2187,7 +2187,7 @@ are invoked.")
               (base32
                "1qh8249wgr4v9vgghq77zh1d2zs176bir223a8gh3k9nksn7vcdd"))))
     (build-system perl-build-system)
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl data tables useful in parsing HTML")
     (description
      "The HTML::Tagset module contains several data tables useful in various
@@ -2218,7 +2218,7 @@ It extends standard HTML with a few new HTML-esque tags: @code{<TMPL_VAR>},
 these new tags is called a template.  Using this module you fill in the values
 for the variables, loops and branches declared in the template.  This allows
 you to separate design from the data.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-http-body
   (package
@@ -2243,7 +2243,7 @@ you to separate design from the data.")
     (description "HTTP::Body parses chunks of HTTP POST data and supports
 application/octet-stream, application/json, application/x-www-form-urlencoded,
 and multipart/form-data.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-http-cookiejar
   (package
@@ -2287,7 +2287,7 @@ jar in conformance with RFC 6265 <http://tools.ietf.org/html/rfc6265>.")
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-http-message" ,perl-http-message)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl HTTP cookie jars")
     (description
      "The HTTP::Cookies class is for objects that represent a cookie jar,
@@ -2311,7 +2311,7 @@ object knows about.")
     (propagated-inputs
      `(("perl-http-message" ,perl-http-message)
        ("perl-lwp-mediatypes" ,perl-lwp-mediatypes)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl simple http server class")
     (description
      "Instances of the HTTP::Daemon class are HTTP/1.1 servers that listen
@@ -2332,7 +2332,7 @@ IO::Socket::INET, so you can perform socket operations directly on it too.")
               (base32
                "0cz357kafhhzw7w59iyi0wvhw7rlh5g1lh38230ckw7rl0fr9fg8"))))
     (build-system perl-build-system)
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl date conversion routines")
     (description
      "The HTTP::Date module provides functions that deal with date formats
@@ -2358,7 +2358,7 @@ used by the HTTP protocol (and then some more).")
        ("perl-io-html" ,perl-io-html)
        ("perl-lwp-mediatypes" ,perl-lwp-mediatypes)
        ("perl-uri" ,perl-uri)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl HTTP style message")
     (description
      "An HTTP::Message object contains some headers and a content body.")
@@ -2379,7 +2379,7 @@ used by the HTTP protocol (and then some more).")
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-http-message" ,perl-http-message)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl http content negotiation")
     (description
      "The HTTP::Negotiate module provides a complete implementation of the
@@ -2412,7 +2412,7 @@ fields in the request.")
 received and returns a 'hint' as to what is required, or returns the
 HTTP::Request when a complete request has been read.  HTTP/1.1 chunking is
 supported.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-http-parser-xs
   (package
@@ -2431,7 +2431,7 @@ supported.")
     (synopsis "Fast HTTP request parser")
     (description "HTTP::Parser::XS is a fast, primitive HTTP request/response
 parser.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-http-request-ascgi
   (package
@@ -2453,7 +2453,7 @@ parser.")
     (synopsis "Set up a CGI environment from an HTTP::Request")
     (description "This module provides a convenient way to set up a CGI
 environment from an HTTP::Request.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-http-server-simple
   (package
@@ -2479,7 +2479,7 @@ environment from an HTTP::Request.")
     (description "HTTP::Server::Simple is a simple standalone HTTP daemon with
 no non-core module dependencies.  It can be used for building a standalone
 http-based UI to your existing tools.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-http-tiny
   (package
@@ -2505,7 +2505,7 @@ http-based UI to your existing tools.")
     (description "This is a very simple HTTP/1.1 client, designed for doing
 simple requests without the overhead of a large framework like LWP::UserAgent.
 It supports proxies and redirection.  It also correctly resumes after EINTR.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-io-html
   (package
@@ -2520,7 +2520,7 @@ It supports proxies and redirection.  It also correctly resumes after EINTR.")
               (base32
                "06nj3a0xgp5jxwxx6ayglfk2v7npf5a7gwkqsjlkapjkybarzqh4"))))
     (build-system perl-build-system)
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl module to open an HTML file with automatic charset detection")
     (description
      "IO::HTML provides an easy way to open a file containing HTML while
@@ -2546,7 +2546,7 @@ algorithm specified in section 8.2.2.1 of the draft standard.")
     (synopsis "Family-neutral IP socket supporting both IPv4 and IPv6")
     (description "This module provides a protocol-independent way to use IPv4
 and IPv6 sockets, intended as a replacement for IO::Socket::INET.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-io-socket-ssl
   (package
@@ -2573,7 +2573,7 @@ necessary functionality into the familiar IO::Socket interface and providing
 secure defaults whenever possible.  This way existing applications can be made
 SSL-aware without much effort, at least if you do blocking I/O and don't use
 select or poll.")
-    (license (package-license perl))
+    (license l:perl-license)
     (home-page "https://github.com/noxxi/p5-io-socket-ssl")))
 
 (define-public perl-libwww
@@ -2601,7 +2601,7 @@ select or poll.")
        ("perl-net-http" ,perl-net-http)
        ("perl-uri" ,perl-uri)
        ("perl-www-robotrules" ,perl-www-robotrules)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl modules for the WWW")
     (description
      "The libwww-perl collection is a set of Perl modules which provides a
@@ -2625,7 +2625,7 @@ help you implement simple HTTP servers.")
               (base32
                "0xmnblp962qy02akah30sji8bxrqcyqlff2w95l199ghql60ny8q"))))
     (build-system perl-build-system)
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl module to guess the media type for a file or a URL")
     (description
      "The LWP::MediaTypes module provides functions for handling media (also
@@ -2657,7 +2657,7 @@ exists it is used instead.")
     (synopsis "HTTPS support for LWP::UserAgent")
     (description "The LWP::Protocol::https module provides support for using
 https schemed URLs with LWP.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-lwp-useragent-determined
   (package
@@ -2680,7 +2680,7 @@ https schemed URLs with LWP.")
 except that when you use it to get a web page but run into a
 possibly-temporary error (like a DNS lookup timeout), it'll wait a few seconds
 and retry a few times.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-net-amazon-s3
   (package
@@ -2723,7 +2723,7 @@ and retry a few times.")
     (home-page "http://search.cpan.org/dist/Net-Amazon-S3")
     (synopsis "Perl interface to Amazon S3")
     (description "This module provides a Perlish interface to Amazon S3.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-net-http
   (package
@@ -2741,7 +2741,7 @@ and retry a few times.")
     (propagated-inputs
      `(("perl-io-socket-ssl" ,perl-io-socket-ssl)
        ("perl-uri" ,perl-uri)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl low-level HTTP connection (client)")
     (description
      "The Net::HTTP class is a low-level HTTP client.  An instance of the
@@ -2775,7 +2775,7 @@ children (Net::Server::PreForkSimple), or as a managed preforking server which
 maintains the number of children based on server load (Net::Server::PreFork).
 In all but the inetd type, the server provides the ability to connect to one
 or to multiple server ports.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-net-smtp-ssl
   (package
@@ -2795,7 +2795,7 @@ or to multiple server ports.")
     (home-page "http://search.cpan.org/dist/Net-SMTP-SSL")
     (synopsis "SSL support for Net::SMTP")
     (description "SSL support for Net::SMTP.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-plack
   (package
@@ -2833,7 +2833,7 @@ or to multiple server ports.")
 contains middleware components, a reference server, and utilities for Web
 application frameworks.  Plack is like Ruby's Rack or Python's Paste for
 WSGI.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-plack-middleware-fixmissingbodyinredirect
   (package
@@ -2858,7 +2858,7 @@ WSGI.")
     (synopsis "Plack::Middleware which sets body for redirect response")
     (description "This module sets the body in redirect response, if it's not
 already set.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-plack-middleware-methodoverride
   (package
@@ -2884,7 +2884,7 @@ already set.")
 something else: by adding either a header named X-HTTP-Method-Override to the
 request, or a query parameter named x-tunneled-method to the URI, the client
 can say what method it actually meant.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-plack-middleware-removeredundantbody
   (package
@@ -2907,7 +2907,7 @@ can say what method it actually meant.")
     (synopsis "Plack::Middleware which removes body for HTTP response")
     (description "This module removes the body in an HTTP response if it's not
 required.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-plack-middleware-reverseproxy
   (package
@@ -2930,7 +2930,7 @@ required.")
     (description "Plack::Middleware::ReverseProxy resets some HTTP headers,
 which are changed by reverse-proxy.  You can specify the reverse proxy address
 and stop fake requests using 'enable_if' directive in your app.psgi.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-plack-test-externalserver
   (package
@@ -2952,7 +2952,7 @@ and stop fake requests using 'enable_if' directive in your app.psgi.")
     (description "This module allows your to run your Plack::Test tests
 against an external server instead of just against a local application through
 either mocked HTTP or a locally spawned server.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-test-tcp
   (package
@@ -2973,7 +2973,7 @@ either mocked HTTP or a locally spawned server.")
     (home-page "http://search.cpan.org/dist/Test-TCP")
     (synopsis "Testing TCP programs")
     (description "Test::TCP is test utilities for TCP/IP programs.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-test-www-mechanize
   (package
@@ -3038,7 +3038,7 @@ WWW::Mechanize that incorporates features for web application testing.")
     (description "The Test::WWW::Mechanize::Catalyst module meshes the
 Test::WWW:Mechanize module and the Catalyst web application framework to allow
 testing of Catalyst applications without needing to start up a web server.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-test-www-mechanize-psgi
   (package
@@ -3065,7 +3065,7 @@ from web application framework code.  Test::WWW::Mechanize is a subclass of
 WWW::Mechanize that incorporates features for web application testing.  The
 Test::WWW::Mechanize::PSGI module meshes the two to allow easy testing of PSGI
 applications.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-uri
   (package
@@ -3079,7 +3079,7 @@ applications.")
               (base32
                "05a1ck1bhvqkkk690xhsxf7276dnagk96qkh2jy4prrrgw6wm3lw"))))
     (build-system perl-build-system)
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl Uniform Resource Identifiers (absolute and relative)")
     (description
      "The URI module implements the URI class.  Objects of this class
@@ -3110,7 +3110,7 @@ and updated by RFC 2732.")
     (description "@code{URI::Fetch} is a smart client for fetching HTTP pages,
 notably syndication feeds (RSS, Atom, and others), in an intelligent, bandwidth-
 and time-saving way.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-uri-find
   (package
@@ -3135,7 +3135,7 @@ and time-saving way.")
 considers a URI) in plain text.  It only finds URIs which include a
 scheme (http:// or the like), for something a bit less strict, consider
 URI::Find::Schemeless.  For a command-line interface, urifind is provided.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-uri-ws
   (package
@@ -3156,7 +3156,7 @@ URI::Find::Schemeless.  For a command-line interface, urifind is provided.")
     (synopsis "WebSocket support for URI package")
     (description "With this module, the URI package provides the same set of
 methods for WebSocket URIs as it does for HTTP URIs.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-uri-template
   (package
@@ -3180,7 +3180,7 @@ methods for WebSocket URIs as it does for HTTP URIs.")
     (synopsis "Object for handling URI templates")
     (description "This perl module provides a wrapper around URI templates as described in
 RFC 6570.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-www-curl
   (package
@@ -3203,7 +3203,7 @@ RFC 6570.")
     (description
      "This is a Perl extension interface for the libcurl file downloading
 library.")
-    (license (package-license perl))
+    (license l:perl-license)
     (home-page "http://search.cpan.org/~szbalint/WWW-Curl-4.17/lib/WWW/Curl.pm")))
 
 (define-public perl-www-mechanize
@@ -3233,7 +3233,7 @@ library.")
     (synopsis "Web browsing in a Perl object")
     (description "WWW::Mechanize is a Perl module for stateful programmatic
 web browsing, used for automating interaction with websites.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-www-opensearch
   (package
@@ -3261,7 +3261,7 @@ web browsing, used for automating interaction with websites.")
     (description
      "@code{WWW::OpenSearch} is a module to search @url{A9's OpenSearch,
 http://opensearch.a9.com} compatible search engines.")
-    (license (package-license perl))))
+    (license l:perl-license)))
 
 (define-public perl-www-robotrules
   (package
@@ -3278,7 +3278,7 @@ http://opensearch.a9.com} compatible search engines.")
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-uri" ,perl-uri)))
-    (license (package-license perl))
+    (license l:perl-license)
     (synopsis "Perl database of robots.txt-derived permissions")
     (description
      "The WWW::RobotRules module parses /robots.txt files as specified in
diff --git a/gnu/packages/wm.scm b/gnu/packages/wm.scm
index d758f264a..3cf74c4ca 100644
--- a/gnu/packages/wm.scm
+++ b/gnu/packages/wm.scm
@@ -243,7 +243,7 @@ developers.")
 based IPC interface it provides (if enabled in the configuration file).
 You can then subscribe to events or send messages and receive their replies.")
     ;; Can be used with either license.
-    (license (list license:gpl3+ (package-license perl)))))
+    (license (list license:gpl3+ license:perl-license))))
 
 (define-public python-i3-py
   (package
diff --git a/gnu/packages/xml.scm b/gnu/packages/xml.scm
index 0ceae029b..f4b68ba6a 100644
--- a/gnu/packages/xml.scm
+++ b/gnu/packages/xml.scm
@@ -189,7 +189,7 @@ There are two base classes. @code{Graph::Reader} is the base class for classes
 which read a graph file and create an instance of the Graph class.
 @code{Graph::Writer} is the base class for classes which take an instance of
 the @code{Graph} class and write it out in a specific file format.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-atom
   (package
@@ -221,7 +221,7 @@ the @code{Graph} class and write it out in a specific file format.")
     (description
      "Atom is a syndication, API, and archiving format for weblogs and other data.
 @code{XML::Atom} implements the feed format as well as a client for the API.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-descent
   (package
@@ -249,7 +249,7 @@ the @code{Graph} class and write it out in a specific file format.")
 
 XML grammar is recursive - so it's nice to be able to write recursive
 parsers for it.  @code{XML::Descent} allows such parsers to be created.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-parser
   (package
@@ -269,7 +269,7 @@ parsers for it.  @code{XML::Descent} allows such parsers to be created.")
                    (list (string-append "EXPATLIBPATH=" expat "/lib")
                          (string-append "EXPATINCPATH=" expat "/include")))))
     (inputs `(("expat" ,expat)))
-    (license (package-license perl))
+    (license license:perl-license)
     (synopsis "Perl bindings to the Expat XML parsing library")
     (description
      "This module provides ways to parse XML documents.  It is built on top of
@@ -303,7 +303,7 @@ to @code{XML::Parser} in much the same way that Gisle Aas'
 @code{HTML::TokeParser} provides a procedural interface to @code{HTML::Parser}.
 @code{XML::TokeParser} splits its XML input up into \"tokens\", each
 corresponding to an @code{XML::Parser} event.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-libxml
   (package
@@ -320,7 +320,7 @@ corresponding to an @code{XML::Parser} event.")
     (build-system perl-build-system)
     (propagated-inputs
      `(("perl-xml-parser" ,perl-xml-parser)))
-    (license (package-license perl))
+    (license license:perl-license)
     (synopsis "Perl SAX parser using XML::Parser")
     (description
      "XML::Parser::PerlSAX is a PerlSAX parser using the XML::Parser
@@ -351,7 +351,7 @@ module.")
 library which provides interfaces for parsing and manipulating XML files.  This
 module allows Perl programmers to make use of the highly capable validating
 XML parser and the high performance DOM implementation.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-libxml-simple
   (package
@@ -373,7 +373,7 @@ XML parser and the high performance DOM implementation.")
     (description
      "This package provides the same API as @code{XML::Simple} but is based on
 @code{XML::LibXML}.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-libxslt
   (package
@@ -396,7 +396,7 @@ XML parser and the high performance DOM implementation.")
     (synopsis "Perl bindings to GNOME libxslt library")
     (description "This Perl module is an interface to the GNOME project's
 libxslt library.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-namespacesupport
   (package
@@ -417,7 +417,7 @@ libxslt library.")
 names (unames) from within any application that may need them.  It also helps
 maintain a prefix to namespace URI map, and provides a number of basic
 checks.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-rss
   (package
@@ -452,7 +452,7 @@ checks.")
 RDF Site Summary (RSS) files.  This distribution also contains many examples
 that allow you to generate HTML from an RSS, convert between 0.9, 0.91, and
 1.0 version, and more.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-sax
   (package
@@ -486,7 +486,7 @@ that allow you to generate HTML from an RSS, convert between 0.9, 0.91, and
     (synopsis "Perl API for XML")
     (description "XML::SAX consists of several framework classes for using and
 building Perl SAX2 XML parsers, filters, and drivers.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-sax-base
   (package
@@ -508,7 +508,7 @@ PerlSAX drivers and filters.  It's default behaviour is to pass the input
 directly to the output unchanged.  It can be useful to use this module as a
 base class so you don't have to, for example, implement the characters()
 callback.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-simple
   (package
@@ -526,7 +526,7 @@ callback.")
     (propagated-inputs
      `(("perl-xml-parser" ,perl-xml-parser)
        ("perl-xml-sax" ,perl-xml-sax)))
-    (license (package-license perl))
+    (license license:perl-license)
     (synopsis "Perl module for easy reading/writing of XML files")
     (description
      "The XML::Simple module provides a simple API layer on top of an
@@ -549,7 +549,7 @@ parser modules).")
     (build-system perl-build-system)
     (inputs
      `(("perl-xml-parser" ,perl-xml-parser)))
-    (license (package-license perl))
+    (license license:perl-license)
     (synopsis "Perl regular expressions for XML tokens")
     (description
      "XML::RegExp contains regular expressions for the following XML tokens:
@@ -575,7 +575,7 @@ EntityRef, CharRef, Reference, Name, NmToken, and AttValue.")
        ("perl-libxml" ,perl-libxml)
        ("perl-xml-parser" ,perl-xml-parser)
        ("perl-xml-regexp" ,perl-xml-regexp)))
-    (license (package-license perl))
+    (license license:perl-license)
     (synopsis
      "Perl module for building DOM Level 1 compliant document structures")
     (description
@@ -607,7 +607,7 @@ that conforms to the API of the Document Object Model.")
      "The @code{XML::Compile} module suite has extensive regression testing.
 This module provide functions which simplify writing tests for
 @code{XML::Compile} related distributions.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-compile
   (package
@@ -632,7 +632,7 @@ This module provide functions which simplify writing tests for
      "@code{XML::Compile} can be used to translate a Perl data-structure into
 XML or XML into a Perl data-structure, both directions under rigid control by
 a schema.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-compile-cache
   (package
@@ -655,7 +655,7 @@ a schema.")
     (synopsis "Cache compiled XML translators")
     (description
      "This package provides methods to cache compiled XML translators.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-compile-soap
   (package
@@ -683,7 +683,7 @@ a schema.")
 implementation is @url{SOAP1.1,
 http://www.w3.org/TR/2000/NOTE-SOAP-20000508/}, which is still most often
 used.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-compile-wsdl11
   (package
@@ -709,7 +709,7 @@ used.")
 messages to be send and received over SOAP connections.  This involves
 encoding of the message to be send into XML, sending the message to the
 server, collect the answer, and finally decoding the XML to Perl.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-feed
   (package
@@ -748,7 +748,7 @@ server, collect the answer, and finally decoding the XML to Perl.")
 Atom feeds.  It also implements feed auto-discovery for finding feeds, given a URI.
 @code{XML::Feed} supports the following syndication feed formats:
 RSS 0.91, RSS 1.0, RSS 2.0, Atom")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-xml-xpath
   (package
@@ -772,7 +772,7 @@ RSS 0.91, RSS 1.0, RSS 2.0, Atom")
      "This module aims to comply exactly to the @url{XPath specification,
 https://www.w3.org/TR/xpath} and yet allow extensions to be added in
 the form of functions.")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public pugixml
   (package
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 3c9195b1b..0bc38692e 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -5720,7 +5720,7 @@ programs that cannot use the window system directly.")
      "These bindings wrap @code{libxcb} (a C library to speak with X11,
 in many cases better than @code{Xlib}), and provides an object oriented
 interface to its methods (using @code{Mouse}).")
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public perl-x11-protocol
   (package
@@ -5748,7 +5748,7 @@ perl programs to display windows and graphics on X11 servers.")
     ;; distribution, has another, less restrictive copying policy, as do some
     ;; of the extension modules in the directory Protocol/Ext: see those files
     ;; for details)."
-    (license (package-license perl))))
+    (license license:perl-license)))
 
 (define-public xcompmgr
   (package
diff --git a/gnu/packages/zip.scm b/gnu/packages/zip.scm
index 2cf30d6e3..7097ada1a 100644
--- a/gnu/packages/zip.scm
+++ b/gnu/packages/zip.scm
@@ -171,4 +171,4 @@ recreates the stored directory structure by default.")
     (description "The Archive::Zip module allows a Perl program to create,
 manipulate, read, and write Zip archive files.")
     (home-page "http://search.cpan.org/~adamk/Archive-Zip-1.30/")
-    (license (package-license perl))))
+    (license license:perl-license)))
diff --git a/guix/licenses.scm b/guix/licenses.scm
index 7a1e2415e..0c5ce3ddf 100644
--- a/guix/licenses.scm
+++ b/guix/licenses.scm
@@ -10,6 +10,7 @@
 ;;; Copyright © 2016 Rene Saavedra <[email-masked]>
 ;;; Copyright © 2016, 2017 ng0 <[email-masked]>
 ;;; Copyright © 2017 Clément Lassieur <[email-masked]>
+;;; Copyright © 2017 Petter <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -62,6 +63,7 @@
             ncsa
             nmap
             openldap2.8 openssl
+            perl-license
             psfl public-domain
             qpl
             repoze
@@ -397,6 +399,8 @@ at URI, which may be a file:// URI pointing the package's tree."
            "https://www.gnu.org/licenses/license-list#newOpenLDAP"))
               ;; lists OpenLDAPv2.7, which is virtually identical
 
+(define perl-license gpl1+)
+
 (define psfl
   (license "Python Software Foundation License"
            "http://docs.python.org/license.html"
-- 
2.12.2