Add built local::lib
[catagits/Gitalist.git] / local-lib5 / man / man3 / Test::Differences.3pm
diff --git a/local-lib5/man/man3/Test::Differences.3pm b/local-lib5/man/man3/Test::Differences.3pm
new file mode 100644 (file)
index 0000000..26ec6d6
--- /dev/null
@@ -0,0 +1,477 @@
+.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.10)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings.  \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote.  \*(C+ will
+.\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+.    ds -- \(*W-
+.    ds PI pi
+.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
+.    ds L" ""
+.    ds R" ""
+.    ds C` ""
+.    ds C' ""
+'br\}
+.el\{\
+.    ds -- \|\(em\|
+.    ds PI \(*p
+.    ds L" ``
+.    ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD.  Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+.    de IX
+.    tm Index:\\$1\t\\n%\t"\\$2"
+..
+.    nr % 0
+.    rr F
+.\}
+.el \{\
+.    de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
+.    \" fudge factors for nroff and troff
+.if n \{\
+.    ds #H 0
+.    ds #V .8m
+.    ds #F .3m
+.    ds #[ \f1
+.    ds #] \fP
+.\}
+.if t \{\
+.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+.    ds #V .6m
+.    ds #F 0
+.    ds #[ \&
+.    ds #] \&
+.\}
+.    \" simple accents for nroff and troff
+.if n \{\
+.    ds ' \&
+.    ds ` \&
+.    ds ^ \&
+.    ds , \&
+.    ds ~ ~
+.    ds /
+.\}
+.if t \{\
+.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+.    \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+.    \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+.    \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+.    ds : e
+.    ds 8 ss
+.    ds o a
+.    ds d- d\h'-1'\(ga
+.    ds D- D\h'-1'\(hy
+.    ds th \o'bp'
+.    ds Th \o'LP'
+.    ds ae ae
+.    ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "Test::Differences 3"
+.TH Test::Differences 3 "2009-10-17" "perl v5.8.7" "User Contributed Perl Documentation"
+.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+Test::Differences \- Test strings and data structures and show differences if not ok
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 2
+\&   use Test;    ## Or use Test::More
+\&   use Test::Differences;
+\&
+\&   eq_or_diff $got,  "a\enb\enc\en",   "testing strings";
+\&   eq_or_diff \e@got, [qw( a b c )], "testing arrays";
+\&
+\&   ## Passing options:
+\&   eq_or_diff $got, $expected, $name, { context => 300 };  ## options
+\&
+\&   ## Using with DBI\-like data structures
+\&
+\&   use DBI;
+\&
+\&   ... open connection & prepare statement and @expected_... here...
+\&   
+\&   eq_or_diff $sth\->fetchall_arrayref, \e@expected_arrays  "testing DBI arrays";
+\&   eq_or_diff $sth\->fetchall_hashref,  \e@expected_hashes, "testing DBI hashes";
+\&
+\&   ## To force textual or data line numbering (text lines are numbered 1..):
+\&   eq_or_diff_text ...;
+\&   eq_or_diff_data ...;
+.Ve
+.SH "EXPORT"
+.IX Header "EXPORT"
+This module exports three test functions and four diff-style functions:
+.IP "\(bu" 4
+Test functions
+.RS 4
+.IP "\(bu" 4
+\&\f(CW\*(C`eq_or_diff\*(C'\fR
+.IP "\(bu" 4
+\&\f(CW\*(C`eq_or_diff_data\*(C'\fR
+.IP "\(bu" 4
+\&\f(CW\*(C`eq_or_diff_text\*(C'\fR
+.RE
+.RS 4
+.RE
+.IP "\(bu" 4
+Diff style functions
+.RS 4
+.IP "\(bu" 4
+\&\f(CW\*(C`table_diff\*(C'\fR (the default)
+.IP "\(bu" 4
+\&\f(CW\*(C`unified_diff\*(C'\fR
+.IP "\(bu" 4
+\&\f(CW\*(C`oldstyle_diff\*(C'\fR
+.IP "\(bu" 4
+\&\f(CW\*(C`context_diff\*(C'\fR
+.RE
+.RS 4
+.RE
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+When the code you're testing returns multiple lines, records or data
+structures and they're just plain wrong, an equivalent to the Unix
+\&\f(CW\*(C`diff\*(C'\fR utility may be just what's needed.  Here's output from an
+example test script that checks two text documents and then two
+(trivial) data structures:
+.PP
+.Vb 10
+\& t/99example....1..3
+\& not ok 1 \- differences in text
+\& #     Failed test ((eval 2) at line 14)
+\& #     +\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
+\& #     | Ln|Got             |Expected        |
+\& #     +\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
+\& #     |  1|this is line 1  |this is line 1  |
+\& #     *  2|this is line 2  |this is line b  *
+\& #     |  3|this is line 3  |this is line 3  |
+\& #     +\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
+\& not ok 2 \- differences in whitespace
+\& #     Failed test ((eval 2) at line 20)
+\& #     +\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
+\& #     | Ln|Got               |Expected          |
+\& #     +\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
+\& #     |  1|        indented  |        indented  |
+\& #     *  2|        indented  |\etindented        *
+\& #     |  3|        indented  |        indented  |
+\& #     +\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
+\& not ok 3
+\& #     Failed test ((eval 2) at line 22)
+\& #     +\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
+\& #     | Elt|Got                                  |Expected                    |
+\& #     +\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
+\& #     *   0|bless( [                             |[                           *
+\& #     *   1|  \*(AqMove along, nothing to see here\*(Aq  |  \*(AqDry, humorless message\*(Aq  *
+\& #     *   2|], \*(AqTest::Builder\*(Aq )                 |]                           *
+\& #     +\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
+\& # Looks like you failed 3 tests of 3.
+.Ve
+.PP
+eq_or_diff_...() compares two strings or (limited) data structures and
+either emits an ok indication or a side-by-side diff.  Test::Differences
+is designed to be used with Test.pm and with Test::Simple, Test::More,
+and other Test::Builder based testing modules.  As the \s-1SYNOPSIS\s0 shows,
+another testing module must be used as the basis for your test suite.
+.PP
+These functions assume that you are presenting it with \*(L"flat\*(R" records,
+looking like:
+.PP
+.Vb 4
+\&   \- scalars composed of record\-per\-line
+\&   \- arrays of scalars,
+\&   \- arrays of arrays of scalars,
+\&   \- arrays of hashes containing only scalars
+.Ve
+.PP
+All of these are flattened in to single strings which are then compared
+for differences.  Differently data structures can be compared, as long
+as they flatten identically.
+.PP
+All other data structures are run through Data::Dumper first.  This is a
+bit dangerous, as some versions of perl shipped with Data::Dumpers that
+could do the oddest things with unexpected, like core dump.  Only as of
+5.8.0 does Data::Dumper sort hash keys, which is necessary for \s-1HASH\s0
+dumps to be fully predictable.  This will be changed when this bites
+somebody or I get some free time.
+.PP
+\&\f(CW\*(C`eq_or_diff()\*(C'\fR starts counting records at 0 unless you pass it two text
+strings:
+.PP
+.Vb 3
+\&   eq_or_diff $a, $b;   ## First line is line number 1
+\&   eq_or_diff @a, @b;   ## First element is element 0
+\&   eq_or_diff $a, @b;   ## First line/element is element 0
+.Ve
+.PP
+If you want to force a first record number of 0, use \f(CW\*(C`eq_or_diff_data\*(C'\fR.  If
+you want to force a first record number of 1, use \f(CW\*(C`eq_or_diff_text\*(C'\fR.  I chose
+this over passing in an options hash because it's clearer and simpler this way.
+\&\s-1YMMV\s0.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+There is currently only one option: \*(L"context\*(R".  This allows you to
+control the amount of context shown:
+.PP
+.Vb 1
+\&   eq_or_diff $got, $expected, $name, { context => 50000 };
+.Ve
+.PP
+will show you lots and lots of context.  Normally, \fIeq_or_diff()\fR uses
+some heuristics to determine whether to show 3 lines of context (like
+a normal unified diff) or 25 lines.
+.SH "DIFF STYLES"
+.IX Header "DIFF STYLES"
+For extremely long strings, a table diff can wrap on your screen and be hard
+to read.  If you are comfortable with different diff formats, you can switch
+to a format more suitable for your data.  These are the four formats supported
+by the Text::Diff module and are set with the following functions:
+.IP "\(bu" 4
+\&\f(CW\*(C`table_diff\*(C'\fR (the default)
+.IP "\(bu" 4
+\&\f(CW\*(C`unified_diff\*(C'\fR
+.IP "\(bu" 4
+\&\f(CW\*(C`oldstyle_diff\*(C'\fR
+.IP "\(bu" 4
+\&\f(CW\*(C`context_diff\*(C'\fR
+.PP
+You can run the following to understand the different diff output styles:
+.PP
+.Vb 2
+\& use Test::More \*(Aqno_plan\*(Aq;
+\& use Test::Differences;
+\& 
+\& my $long_string = join \*(Aq\*(Aq => 1..40;
+\& 
+\& TODO: {
+\&     local $TODO = \*(AqTesting diff styles\*(Aq;
+\&
+\&     # this is the default and does not need to explicitly set unless you need
+\&     # to reset it back from another diff type
+\&     table_diff;
+\&     eq_or_diff $long_string, "\-$long_string", \*(Aqtable diff\*(Aq;
+\&
+\&     unified_diff;
+\&     eq_or_diff $long_string, "\-$long_string", \*(Aqunified diff\*(Aq;
+\&
+\&     context_diff;
+\&     eq_or_diff $long_string, "\-$long_string", \*(Aqcontext diff\*(Aq;
+\&
+\&     oldstyle_diff;
+\&     eq_or_diff $long_string, "\-$long_string", \*(Aqoldstyle diff\*(Aq;
+\& }
+.Ve
+.SH "DEPLOYING"
+.IX Header "DEPLOYING"
+There are several basic ways of deploying Test::Differences requiring more or less
+labor by you or your users.
+.IP "\(bu" 4
+Fallback to \f(CW\*(C`is_deeply\*(C'\fR.
+.Sp
+This is your best option if you want this module to be optional.
+.Sp
+.Vb 6
+\& use Test::More;
+\& BEGIN {
+\&     if (!eval q{ use Test::Differences; 1 }) {
+\&         *eq_or_diff = \e&is_deeply;
+\&     }
+\& }
+.Ve
+.IP "\(bu" 4
+
+.Sp
+.Vb 1
+\& eval "use Test::Differences";
+.Ve
+.Sp
+If you want to detect the presence of Test::Differences on the fly, something
+like the following code might do the trick for you:
+.Sp
+.Vb 1
+\&    use Test qw( !ok );   ## get all syms *except* ok
+\&
+\&    eval "use Test::Differences";
+\&    use Data::Dumper;
+\&
+\&    sub ok {
+\&        goto &eq_or_diff if defined &eq_or_diff && @_ > 1;
+\&        @_ = map ref $_ ? Dumper( @_ ) : $_, @_;
+\&        goto Test::&ok;
+\&    }
+\&
+\&    plan tests => 1;
+\&
+\&    ok "a", "b";
+.Ve
+.IP "\(bu" 4
+\&\s-1PREREQ_PM\s0 => { .... \*(L"Test::Differences\*(R" => 0, ... }
+.Sp
+This method will let \s-1CPAN\s0 and \s-1CPANPLUS\s0 users download it automatically.  It
+will discomfit those users who choose/have to download all packages manually.
+.IP "\(bu" 4
+t/lib/Test/Differences.pm, t/lib/Text/Diff.pm, ...
+.Sp
+By placing Test::Differences and its prerequisites in the t/lib directory, you
+avoid forcing your users to download the Test::Differences manually if they
+aren't using \s-1CPAN\s0 or \s-1CPANPLUS\s0.
+.Sp
+If you put a \f(CW\*(C`use lib "t/lib";\*(C'\fR in the top of each test suite before the
+\&\f(CW\*(C`use Test::Differences;\*(C'\fR, \f(CW\*(C`make test\*(C'\fR should work well.
+.Sp
+You might want to check once in a while for new Test::Differences releases
+if you do this.
+.SH "LIMITATIONS"
+.IX Header "LIMITATIONS"
+.ie n .SS """Test"" or ""Test::More"""
+.el .SS "\f(CWTest\fP or \f(CWTest::More\fP"
+.IX Subsection "Test or Test::More"
+This module \*(L"mixes in\*(R" with Test.pm or any of the test libraries based on
+Test::Builder (Test::Simple, Test::More, etc).  It does this by peeking to see
+whether Test.pm or Test/Builder.pm is in \f(CW%INC\fR, so if you are not using one of
+those, it will print a warning and play dumb by not emitting test numbers (or
+incrementing them).  If you are using one of these, it should interoperate
+nicely.
+.SS "Exporting"
+.IX Subsection "Exporting"
+Exports all 3 functions by default (and by design).  Use
+.PP
+.Vb 1
+\&    use Test::Differences ();
+.Ve
+.PP
+to suppress this behavior if you don't like the namespace pollution.
+.PP
+This module will not override functions like \fIok()\fR, \fIis()\fR, \fIis_deeply()\fR, etc.  If
+it did, then you could \f(CW\*(C`eval "use Test::Differences qw( is_deeply );"\*(C'\fR to get
+automatic upgrading to diffing behaviors without the \f(CW\*(C`sub my_ok\*(C'\fR shown above.
+Test::Differences intentionally does not provide this behavior because this
+would mean that Test::Differences would need to emulate every popular test
+module out there, which would require far more coding and maintenance that I'm
+willing to do.  Use the eval and my_ok deployment shown above if you want some
+level of automation.
+.SS "Unicode"
+.IX Subsection "Unicode"
+Perls before 5.6.0 don't support characters > 255 at all, and 5.6.0
+seems broken.  This means that you might get odd results using perl5.6.0
+with unicode strings.
+.ie n .SS """Data::Dumper"" and older Perls."
+.el .SS "\f(CWData::Dumper\fP and older Perls."
+.IX Subsection "Data::Dumper and older Perls."
+Relies on Data::Dumper (for now), which, prior to perl5.8, will not always
+report hashes in the same order.  \f(CW $Data::Dumper::SortKeys \fR \fIis\fR set to 1,
+so on more recent versions of Data::Dumper, this should not occur.  Check \s-1CPAN\s0
+to see if it's been peeled out of the main perl distribution and backported.
+Reported by Ilya Martynov <ilya@martynov.org>, although the SortKeys \*(L"future
+perfect\*(R" workaround has been set in anticipation of a new Data::Dumper for a
+while.  Note that the two hashes should report the same here:
+.PP
+.Vb 10
+\&    not ok 5
+\&    #     Failed test (t/ctrl/05\-home.t at line 51)
+\&    # +\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+   
+\&    # | Elt|Got                     | Elt|Expected                |   
+\&    # +\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+   
+\&    # |   0|{                       |   0|{                       |   
+\&    # |   1|  \*(Aqpassword\*(Aq => \*(Aq\*(Aq,     |   1|  \*(Aqpassword\*(Aq => \*(Aq\*(Aq,     |   
+\&    # *   2|  \*(Aqmethod\*(Aq => \*(Aqlogin\*(Aq,  *    |                        |   
+\&    # |   3|  \*(Aqctrl\*(Aq => \*(Aqhome\*(Aq,     |   2|  \*(Aqctrl\*(Aq => \*(Aqhome\*(Aq,     |   
+\&    # |    |                        *   3|  \*(Aqmethod\*(Aq => \*(Aqlogin\*(Aq,  *   
+\&    # |   4|  \*(Aqemail\*(Aq => \*(Aqtest\*(Aq     |   4|  \*(Aqemail\*(Aq => \*(Aqtest\*(Aq     |   
+\&    # |   5|}                       |   5|}                       |   
+\&    # +\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+
+.Ve
+.PP
+Data::Dumper also overlooks the difference between
+.PP
+.Vb 2
+\&    $a[0] = \e$a[1];
+\&    $a[1] = \e$a[0];   # $a[0] = \e$a[1]
+.Ve
+.PP
+and
+.PP
+.Vb 3
+\&    $x = \e$y;
+\&    $y = \e$x;
+\&    @a = ( $x, $y );  # $a[0] = \e$y, not \e$a[1]
+.Ve
+.PP
+The former involves two scalars, the latter 4: \f(CW$x\fR, \f(CW$y\fR, and \f(CW@a\fR[0,1].
+This was carefully explained to me in words of two syllables or less by
+Yves Orton <demerphq@hotmail.com>.  The plan to address this is to allow
+you to select Data::Denter or some other module of your choice as an
+option.
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+.Vb 1
+\&    Barrie Slaymaker <barries@slaysys.com>
+.Ve
+.SH "MAINTAINER"
+.IX Header "MAINTAINER"
+.Vb 1
+\&    Curtis "Ovid" Poe <ovid@cpan.org>
+.Ve
+.SH "LICENSE"
+.IX Header "LICENSE"
+Copyright 2001\-2008 Barrie Slaymaker, All Rights Reserved.
+.PP
+You may use this software under the terms of the \s-1GNU\s0 public license, any
+version, or the Artistic license.