Regexp...icense(3pm)
π NAME π
okay so welcome bestie, you've pulled up Regexp::Pattern::License β the manual page is literally called Regexp...icense(3pm) (the 3pm is just Perl module energy, iykyk) and it is exactly what you need if you're trying to sniff out legal licenses inside text.
Regexp::Pattern::License β Regular expressions for legal licenses. that's it, that's the whole vibe π
π VERSION π
Version v3.11.2 β¨
β¨ SYNOPSIS β¨
okay so here's the whole entire serve, no cap:
use Regexp::Pattern::License;
use Regexp::Pattern;
my $string = 'GNU General Public License version 3 or later';
print "Found!\n" if $string =~ re( 'License::gpl_3' ); # prints "Found!"
like. look at it. it just works π«Ά
π¦ DESCRIPTION π¦
Regexp::Pattern::License hands you a hash of regular expression patterns that are all about legal software licenses. it's giving "I read the EULA so you don't have to" ππ
and Regexp::Pattern is a convention for organizing reusable regex patterns</> β that's the whole framework it plugs into. iconic behavior honestly.
π PATTERNS π
π Licensing traits π
these are the patterns that each cover a single trait that shows up inside licenses. like little LEGO bricks of legal text π§±β¨
every single one of these patterns carries the tag type:trait. periodt.
addr_fsf
Since v3.4.0.
addr_fsf_franklin
Since v3.4.0.
addr_fsf_franklin_steet
Since v3.4.0.
addr_fsf_mass
Since v3.4.0.
addr_fsf_temple
Since v3.4.0.
any_of
Since v3.1.92.
by
Since v3.3.0.
by_apache
Since v3.3.0.
by_fsf
Since v3.3.0.
by_james_clark
Since v3.3.0.
by_psf
Since v3.3.0.
by_sam_hocevar
Since v3.3.0.
clause_retentionclause_reproductionclause_advertisingclause_advertising_alwaysclause_non_endorsementexcept_389except_autoconf_data
Since v3.4.0.
except_autoconf_2
Since v3.4.0.
except_autoconf_2_archive
Since v3.4.0.
except_autoconf_2_autotroll
Since v3.4.0.
except_autoconf_2_g10
Since v3.4.0.
except_autoconf_3
Since v3.4.0.
except_bison_1_24
Since v3.4.0.
except_bison_2_2
Since v3.4.0.
except_classpath_2except_ecos_2
Since v3.6.0.
except_eplexcept_epl_mplexcept_faust
Since v3.4.0.
except_font_2
Since v3.7.0.
except_gcc_2
Since v3.7.0.
except_gcc_3_1
Since v3.7.0.
except_gstreamerexcept_libtoolexcept_mifexcept_openssl
Since v3.4.0.
except_ocaml-lgplexcept_openssl-lgpl
Since v3.4.0.
except_openssl_s3
Since v3.4.0.
except_prefix_agpl
Since v3.4.0.
except_prefix_generic
Since v3.4.0.
except_prefix_gpl
Since v3.4.0.
except_prefix_gpl_clisp
Since v3.4.0.
except_prefix_lgpl
Since v3.4.0.
except_proguard
Since v3.4.0.
except_qt_gpl_1
Since v3.4.0.
except_qt_gpl_eclipse
Since v3.4.0.
except_qt_gpl_openssl
Since v3.4.0.
except_qt_kernel
Since v3.4.0.
except_qt_lgpl_1_1
Since v3.4.0.
except_qt_nosource
Since v3.4.0.
except_sdc
Since v3.4.0.
except_sollya_4_1
Since v3.4.0.
except_warzone
Since v3.4.0.
except_wxwindows
Since v3.6.0.
except_xerces
Since v3.4.0.
fsf_unlimitedfsf_unlimited_retentiongenerated
Since v3.4.0.
license_labellicense_label_spdx
Since v3.9.0.
license_label_trove
Since v3.1.100.
licensed_under
Since v3.1.92.
usage_rfn
Since v3.2.0.
version
Optionally provides the following numbered and named captures:
"Under GPL, v2 or later of the license."
[ ] # -> $&
I # -> $1, $-{version_number}
[ ] # -> $2, $-{version_later}
"Under version 2 or 3 only of the GPL."
[ ] # -> $&
I # -> $1, $-{version_number}
I # -> $3, $-{version_number_2}
[ ] # -> $4, $-{version_only}
[] # -> $5, $-{version_of}
Captures stable since v3.11.0. π
version_later
Optionally provides the following numbered and named captures:
"Under GPLv2, or later of the license."
[ ] # -> $&
[ ] # -> $1, $-{version_later}
Captures stable since v3.11.0. π
version_numberstring
Optionally provides the following numbered and named captures:
"Under GPL, v2 or later of the license."
[ ] # -> $&
I # -> $1, $-{version_number}
"Under version 2 or 3 only of the GPL."
[ ] # -> $&
I # -> $1, $-{version_number}
Since v3.1.92. Captures stable since v3.11.0. π
version_only
Optionally provides the following numbered and named captures:
"Under GPL version 2 only of the license."
[ ] # -> $&
[ ] # -> $1, $-{version_only}
Captures stable since v3.11.0. π
version_prefix
π Single licenses π
these ones each cover a single license, one pattern per license, no notes.
and listen β each of these patterns has exactly one of these tags:
type:unversioned type:versioned:decimal type:singleversion:* type:usage:*:*
(no mixing and matching, it's giving monogamy π«Ά)
aalabstylesadobe_2006adobe_glyphadslaflafl_1_1
Since v3.1.95.
afl_1_2
Since v3.1.95.
afl_2
Since v3.1.95.
afl_2_1
Since v3.1.95.
afl_3
Since v3.1.95.
afmparseagplagpl_1
Since v3.1.102.
agpl_1_onlyagpl_1_or_lateragpl_2agpl_3agpl_3_onlyagpl_3_or_lateraladdinaladdin_8
Since v3.1.91.
aladdin_9
Since v3.1.91.
amdplpaamlampasantlr_pdapacheapache_1
Since v3.1.95.
apache_1_1
Since v3.1.95.
apache_2
Since v3.1.95.
apafmlaplapl_1apslapsl_1apsl_1_1apsl_1_2apsl_2artisticartistic_1
Since v3.1.95.
artistic_1_cl8
Since v3.1.95.
artistic_1_perl
Since v3.1.95.
artistic_2bahyphbarrbdwgc
Since v3.1.0.
bdwgc_matlab
Since v3.1.0.
beerwarebittorrentbittorrent_1bittorrent_1_1borceuxbsd_0_clause
Since v3.5.0.
bsd_1_clause
Since v3.6.0.
bsd_2_clausebsd_2_clause_freebsd
Since v3.6.0.
bsd_2_clause_netbsd
Since v3.6.0.
bsd_2_clause_patent
Since v3.6.0.
bsd_2_clause_viewsbsd_3_clausebsd_3_clause_attribution
Since v3.6.0.
bsd_3_clause_clear
Since v3.6.0.
bsd_3_clause_eclipse
Since v3.9.0.
bsd_3_clause_lbnl
Since v3.6.0.
bsd_3_clause_modificationbsd_3_clause_no_military_license
Since v3.6.0.
bsd_3_clause_no_nuclear_license
Since v3.6.0.
bsd_3_clause_no_nuclear_license_2014
Since v3.6.0.
bsd_3_clause_no_nuclear_warranty
Since v3.6.0.
bsd_3_clause_refractions
Since v3.9.0.
bsd_4_clausebsd_4_clause_uc
Since v3.7.0.
bsd_protection
Since v3.8.0.
bsl
Since v3.1.90.
bsl_1
Since v3.1.90.
bzip2bzip2_1_0_5bzip2_1_0_6cal
Since v3.5.0.
cal_1
Since v3.5.0.
calderacatoslcatosl_1_1cc_bycc_by_1
Since v3.1.101.
cc_by_2
Since v3.1.101.
cc_by_2_5
Since v3.1.101.
cc_by_3
Since v3.1.101.
cc_by_4
Since v3.1.101.
cc_by_nccc_by_nc_1
Since v3.1.101.
cc_by_nc_2
Since v3.1.101.
cc_by_nc_2_5
Since v3.1.101.
cc_by_nc_3
Since v3.1.101.
cc_by_nc_4
Since v3.1.101.
cc_by_nc_ndcc_by_nc_nd_1
Since v3.1.101.
cc_by_nc_nd_2
Since v3.1.101.
cc_by_nc_nd_2_5
Since v3.1.101.
cc_by_nc_nd_3
Since v3.1.101.
cc_by_nc_nd_4
Since v3.1.101.
cc_by_nc_sacc_by_nc_sa_1
Since v3.1.101.
cc_by_nc_sa_2
Since v3.1.101.
cc_by_nc_sa_2_5
Since v3.1.101.
cc_by_nc_sa_3
Since v3.1.101.
cc_by_nc_sa_4
Since v3.1.101.
cc_by_ndcc_by_nd_1
Since v3.1.101.
cc_by_nd_2
Since v3.1.101.
cc_by_nd_2_5
Since v3.1.101.
cc_by_nd_3
Since v3.1.101.
cc_by_nd_4
Since v3.1.101.
cc_by_sacc_by_sa_1
Since v3.1.101.
cc_by_sa_2
Since v3.1.101.
cc_by_sa_2_5
Since v3.1.101.
cc_by_sa_3
Since v3.1.101.
cc_by_sa_4
Since v3.1.101.
cc_cc0cc_cc0_1
Since v3.1.101.
cc_devnations
Since v3.7.0.
cc_devnations_2
Since v3.7.0.
cc_nc
Since v3.1.101.
cc_nc_1
Since v3.1.101.
cc_nc_sa
Since v3.7.0.
cc_nc_sa_1
Since v3.7.0.
cc_nc_sp
Since v3.7.0.
cc_nc_sp_1
Since v3.7.0.
cc_nd_nc
Since v3.7.0.
cc_nd_nc_1
Since v3.7.0.
cc_nd
Since v3.1.101.
cc_nd_1
Since v3.1.101.
cc_pd
Since v3.7.0.
cc_pdd
Since v3.7.0.
cc_pddc
still deep in the pattern list and bestie it is not getting shorter π every line here is one pattern name, and the version next to it is just when it showed up. no version = no note, it's just vibing. here we go π«Ά
cc_saβ since v3.7.0cc_sa_1β since v3.1.101cc_samplingβ since v3.7.0cc_sampling_1β since v3.7.0cc_spcc_sp_1β since v3.7.0cddlcddl_1β since v3.1.101cddl_1_1β since v3.1.101cecillcecill_1cecill_1_1cecill_2cecill_2_1cecill_bcecill_b_1β since v3.1.95cecill_ccecill_c_1β since v3.1.95cnri_jythoncnri_pythoncnri_python_gpl_compatcondorβ since v3.8.0condor_1_1β since v3.8.0cpalcpal_1cplβ since v3.1.101cpl_1β since v3.1.101cpolcpol_1_02crosswordβ since v3.8.0cryptixcua_oplcua_opl_1cubecurlcvwβ since v3.5.0
okay the C-section is finally over and it took forever, iykyk π
d_fslβ since v3.8.0d_fsl_1β since v3.8.0dbadβ since v3.8.0dbad_0_2β since v3.8.0dbad_0_3β since v3.8.0dbad_1β since v3.8.0dbad_1_1β since v3.8.0dont_askβ since v3.8.0dsdpeclecl_1ecl_2ecos_1_1β since v3.6.0ecos_2β since v3.6.0eflβ since v3.6.0efl_1β since v3.6.0efl_2β since v3.6.0entessaβ since v3.6.0eplepl_1epl_2erlplβ since v3.7.0erlpl_1_1β since v3.7.0eudatagridβ since v3.6.0eupleupl_1eupl_1_1eupl_1_2eurosymfairβ since v3.6.0fair_sourceβ since v3.8.0fair_source_0_9β since v3.8.0falβ since v3.8.0fal_1_1β since v3.8.0fal_1_2β since v3.8.0fal_1_3β since v3.8.0festivalβ since v3.8.0frameworxβ since v3.6.0frameworx_1β since v3.6.0fsfapfsfulfsfullrftl
gfdlgfdl_1_1gfdl_1_1_onlygfdl_1_1_or_latergfdl_1_2gfdl_1_2_onlygfdl_1_2_or_latergfdl_1_3gfdl_1_3_onlygfdl_1_3_or_latergfdl_nivglideβ since v3.8.0gplgpl_1β since v3.3.0gpl_1_onlygpl_1_or_latergpl_2β since v3.3.0gpl_2_onlygpl_2_or_latergpl_3β since v3.3.0gpl_3_onlygpl_3_or_latergsoapβ since v3.7.0gsoap_1.3bβ since v3.7.0hpndβ since v3.6.0hpnd_sellβ since v3.6.0ibm_pibsβ since v3.8.0icuijgβ since v3.8.0imlib2β since v3.8.0intelβ since v3.5.0ipaβ since v3.6.0iplipl_1iscjabberplβ since v3.5.0jsonβ since v3.1.90jythonβ since v3.1.90kevlin_henneyβ since v3.1.90leptonicaβ since v3.8.0lgpllgpl_2lgpl_2_onlylgpl_2_or_laterlgpl_2_1lgpl_2_1_onlylgpl_2_1_or_laterlgpl_3lgpl_3_onlylgpl_3_or_laterlgpl_bdwgcβ since v3.1.0libpnglibtiffβ since v3.8.0liliq_pβ since v3.6.0liliq_p_1_1β since v3.6.0liliq_rβ since v3.6.0liliq_r_1_1β since v3.6.0liliq_r_plusβ since v3.6.0liliq_r_plus_1_1β since v3.6.0llgpllplβ since v3.6.0lpl_1β since v3.6.0lpl_1_02β since v3.6.0lppllppl_1lppl_1_1lppl_1_2lppl_1_3alppl_1_3cmirosβ since v3.6.0mit_0β since v3.6.0mit_advertisingmit_cmumit_cmu_warrantymit_ennamit_epinionsβ since v3.7.0mit_fehmit_newmit_new_materialsmit_oldmit_oldstylemit_oldstyle_disclaimermit_oldstyle_permissionmit_open_groupβ since v3.6.0mit_openvisionβ since v3.7.0mit_osfβ since v3.7.0mit_unixcryptβ since v3.7.0mit_whateverβ since v3.7.0mit_widgetβ since v3.7.0mit_xfigβ since v3.7.0
there are SO many MITs, bestie β it's giving group project where everyone named themselves the same thing π (mit_whatever is my personal fave ngl)
motosotoβ since v3.5.0mpich2β since v3.8.0mplmpl_1β since v3.1.101mpl_1_1β since v3.1.101mpl_2β since v3.1.101mpl_2_no_copyleft_exceptionβ since v3.8.0ms_clβ since v3.8.0ms_plms_rlmulanβ since v3.5.0mulan_1β since v3.5.0mulan_2β since v3.5.0multicsβ since v3.6.0nasaβ since v3.6.0nasa_1_3β since v3.6.0naumenβ since v3.6.0nbplβ since v3.8.0nbpl_1β since v3.8.0ncsaβ since v3.6.0ngplnokiaβ since v3.6.0noslβ since v3.8.0nosl_1β since v3.8.0nplnpl_1npl_1_1nposlβ since v3.6.0nposl_3β since v3.6.0ntpntp_disclaimeroclcoclc_1oclc_2odblβ since v3.8.0odbl_1β since v3.8.0odc_byβ since v3.8.0odc_by_1β since v3.8.0oflofl_1β since v3.1.101ofl_1_no_rfnβ since v3.2.0ofl_1_rfnβ since v3.2.0ofl_1_1β since v3.1.101ofl_1_1_no_rfnβ since v3.2.0ofl_1_1_rfnβ since v3.2.0ogcβ since v3.6.0ogc_1β since v3.6.0ogtsloldapβ since v3.5.0oldap_1_1β since v3.5.0oldap_1_2β since v3.5.0oldap_1_3β since v3.5.0oldap_1_4β since v3.5.0oldap_2β since v3.5.0oldap_2_0_1β since v3.5.0oldap_2_1β since v3.5.0oldap_2_2β since v3.5.0oldap_2_2_1β since v3.5.0oldap_2_2_2β since v3.5.0oldap_2_3β since v3.5.0oldap_2_4β since v3.5.0oldap_2_5β since v3.5.0oldap_2_6β since v3.5.0oldap_2_7β since v3.5.0oldap_2_8β since v3.5.0openssloplβ since v3.6.0opl_1β since v3.6.0oset_plβ since v3.6.0oset_pl_2_1β since v3.6.0oslosl_1osl_1_1osl_2osl_2_1osl_3pddlβ since v3.8.0pddl_1β since v3.8.0peer_productionβ since v3.8.0phpβ since v3.6.0php_3β since v3.6.0php_3_01β since v3.6.0postgresqlpsf_2β since v3.9.0public_domainqplqpl_1rplrpl_1rpl_1_1rpl_1_3rpl_1_5rpslrpsl_1β since v3.1.95rubyrscplsax_pdβ since v3.8.0sdsβ since v3.8.0sds_1β since v3.8.0sgi_bsgi_b_1β since v3.1.101sgi_b_1_1β since v3.1.101sgi_b_2β since v3.1.101simplβ since v3.6.0simpl_2β since v3.6.0simple_w3cβ since v3.6.0simple_w3c_1_1β since v3.6.0sisslβ since v3.5.0sissl_1_1β since v3.5.0sissl_1_2β since v3.5.0sleepycatβ since v3.6.0snclβ since v3.8.0sncl_1_10β since v3.8.0sncl_2_0_1β since v3.8.0sncl_2_0_2β since v3.8.0sncl_2_1β since v3.8.0sncl_2_3β since v3.8.0splspl_1ssleayβ since v3.2.0stlportβ since v3.8.0sugarcrmsugarcrm_1_1_3toslβ since v3.6.0truecryptβ since v3.8.0truecrypt_3β since v3.8.0uclβ since v3.6.0ucl_1β since v3.6.0unicode_dfsβ since v3.9.0unicode_dfs_2015β since v3.6.0unicode_dfs_2016β since v3.6.0unicode_strictunicode_touunlicenseuplβ since v3.6.0upl_1β since v3.6.0vslβ since v3.6.0vsl_1β since v3.6.0vsplβ since v3.8.0w3cβ since v3.6.0w3c_19980519β since v3.6.0w3c_19980720β since v3.6.0w3c_20021231β since v3.6.0w3c_20150513β since v3.6.0watcom
and that's the chunk, bestie β the alphabet is alphabeting and we're not done yet, so hold on π
watcom_1wordnetβ since v3.8.0 β¨wtfplwtfpl_1β since v3.1.95wtfpl_2β since v3.1.95wtfnmfplβ since v3.1.95wtfnmfpl_1β since v3.1.95x11β since v3.6.0xfree86β since v3.8.0xfree86_1_1β since v3.8.0xnetβ since v3.6.0yplβ since v3.8.0ypl_1β since v3.8.0ypl_1_1β since v3.8.0zedβ since v3.8.0zendβ since v3.8.0zend_2β since v3.8.0zimbraβ since v3.8.0zimbra_1_3β since v3.8.0zimbra_1_4zlibzlib_acknowledgementzplβ since v3.1.102zpl_1β since v3.1.102zpl_1_1β since v3.1.102zpl_2β since v3.1.102zpl_2_1β since v3.1.102
License combinations π
These patterns each cover a combo of multiple licenses. It's giving mix-and-match energy. π
Every single one of these patterns has the tag type:combo, periodt.
net_snmpβ since v3.6.0perlpython_2β since v3.9.0
License groups π―
These patterns each cover either of multiple licenses β like a choose-your-own-adventure, but for licenses. π
And they all have the tag type:group, no cap.
bsdccβ since v3.6.0gnumit
STRUCTURE ποΈ
Okay so the regexp patterns are totally following the DefHash specification, and more specifically the structure of Regexp::Pattern, which defines access to one pattern per DefHash object, known as pat. Slay.
Plus, the (sub)patterns are also available in plaintext form, as pat.alt.*. Iconic.
SUBJECT π§
Every pattern targets one or more subjects, which are basically ways to directly or indirectly represent a license. The more you know, bestie. β¨
Heads up though: not all pattern objects fully cover all subjects, so don't assume, okay? π
- trait β a distinguishing trait or feature that shows up in licensing strings, like an advertising clause or granting "...or any later version."
- Ngl, coverage for this subject is currently pretty weak. π¬
- name β a distinguishing name, like something you could use in a license grant. Simple but effective. πββοΈ
- grant β the text that actually grants the license. The main character energy. π
- license β text containing licensing terms.
- But wait, there's more: texts that contain both license grant and licensing terms (like BSD- and MIT-style licensing) might be classified as either subject
grantor subjectlicense. This could change as we get a better grip on when to distinguish them. Stay tuned. πΊ
- But wait, there's more: texts that contain both license grant and licensing terms (like BSD- and MIT-style licensing) might be classified as either subject
SCOPE π
Each pattern can process material within a certain scope, which is like a sample size of the full subject. Think of it as the zoom level. π
For example, <https://codesearch.debian.net/> uses line-based processing, so patterns that span multiple lines just won't work there. F in the chat for multiline patterns. π
- line β pattern typically found within a single line. Usually that means less than 70 characters within scope. Short and sweet. β¨
- sentence β pattern matching within a sentence.
- It might span multiple lines, but never across multiple sentences. Typically that means no full-stop or colon within scope. Grammar but make it regex. π
- paragraph β pattern matching a distinguishing paragraph.
- It can span multiple sentences, but not multiple paragraphs. Typically that means no newline within scope. Paragraph breaks are a hard no. π«
- section β pattern matching a distinguishing section.
- It might span multiple paragraphs, but not multiple sections. Typically that means a blank line within scope. Boundaries, bestie. π
- multisection β pattern may span multiple sections. It's a free spirit. π¦
OBSOLETE OBJECTS π
These license objects got obsoleted because other objects cover them better, and now they're just dummy objects. RIP to them, but they're still here for some reason. π
or_at_optionβ since v3.11.0version_later_paragraphβ since v3.11.0version_later_postfixβ since v3.11.0version_numberβ since v3.11.0version_number_suffixβ since v3.11.0pythonβ since v3.9.0. Replaced bypsf_2andpython_2. The upgrade we deserved. πwordnet_3β since v3.9.0. Replaced bywordnet. New and improved. π₯
TAGS π·οΈ
Pattern defhashes can optionally include tags, which are super helpful for selecting multiple related patterns. It's like a little filing system. ποΈ
Tags are hierarchical, with : as the separator, and they might get extended without any notice. So bestie, be careful to allow sub-parts when you're tag-matching, like using a regex such as /\Asome:tag(?:\z|:)/. Don't get caught lacking. π€
family:bsdfamily:ccfamily:gplfamily:mitfamily:zlibβ pattern covers a license part of a family of licenses. Found family trope. π«Άlicense:contains:grant:*β license mentions a preferred form for granting the license.- This implies that the license is commonly granted by use of a different (typically way shorter) text.
- The fourth part (optional) is the key to the corresponding license pattern, for a grant belonging to a different license (when omitted, then a grant for the same license is assumed). It's giving "mention me to grant me" energy. π
license:contains:license:*β license contains another license.- The wildcard is the key to the corresponding license pattern. Inception, but make it legal. π
license:contains:name:*β license mentions the name of another license. Name-dropping, but legally. πlicense:includes:license:*β license references coverage of another license.- The wildcard is the key to the corresponding license pattern. It's like a shoutout. π£
license:is:grantβ license is commonly granted by stating the whole license. The whole thing, no shortcuts. π―license:published:*β license grant may include an "as published by..." reference.- The third part is the key to the corresponding trait pattern. Cited your sources. π
type:trait:publisher:*β pattern covers an "as published by ..." license grant phrase.- The third part (optional) is the key to the corresponding license pattern. Publisher core. π°
type:usage:*:*β pattern covers a specific usage of a license.- The third part is the key of the corresponding non-usage-specific pattern.
- The fourth part is the key of the corresponding usage trait pattern. Usage rights, but make it metadata. π―
type:comboβ pattern covers a combination of multiple licenses. Mashup era. π΅type:groupβ pattern covers either of multiple licenses. Pick a lane, any lane. π£οΈtype:singleversion:*β pattern covers a specific version of a license.- The third part is the key of the corresponding non-version-specific pattern. Version-specific, obviously. π
type:traitβ pattern covers a single trait occuring in licenses. (Yes, "occuring" β we keep the typo, bestie. π€‘) One trait, one vibe.type:unversionedβ pattern covers a license without a versioning scheme. No version, no problem. βοΈtype:versioned:decimalβ pattern covers a license using a decimal number versioning scheme. Decimals, because why not. π’
EXAMPLES π
Browse patterns π
The "official" way to browse patterns is using App::RegexpPatternUtils, and it's giving:
show-regexp-pattern-module --page-result -- License
Sadly, App::RegexpPatternUtils has a deep dependency tree, which is a lot. So an alternative is to use Data::Printer and less, like:
perl -CS -MRegexp::Pattern::License -MDDP -e 'p %Regexp::Pattern::License::RE, fulldump => 1, output => stdout' | less -RS
AUTHOR π
Jonas Smedegaard <dr@jones.dk> β the icon, the legend, the moment. π
COPYRIGHT AND LICENSE βοΈ
So here's the legal tea β:
Copyright Β© 2016-2021 Jonas Smedegaard
Copyright Β© 2017-2021 Purism SPC
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
And that's the whole vibe, bestie! π This page came from perl v5.40.0, dated 2024-08-21. Regexp...icense(3pm) out! Stay slaying with those licenses. β¨
π¦ where this page comes from
- ubuntu resolute: libregexp-pattern-license-perl 3.11.2-1 Β· GPL-3.0-or-later
- ubuntu stonking: libregexp-pattern-license-perl 3.11.2-1 Β· GPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms