======================================================================== * README ======================================================================== Perl is Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 by Larry Wall and others. All rights reserved. ABOUT PERL ========== Perl is a general-purpose programming language originally developed for text manipulation and now used for a wide range of tasks including system administration, web development, network programming, GUI development, and more. The language is intended to be practical (easy to use, efficient, complete) rather than beautiful (tiny, elegant, minimal). Its major features are that it's easy to use, supports both procedural and object-oriented (OO) programming, has powerful built-in support for text processing, and has one of the world's most impressive collections of third-party modules. For an introduction to the language's features, see pod/perlintro.pod. For a discussion of the important changes in this release, see pod/perldelta.pod. There are also many Perl books available, covering a wide variety of topics, from various publishers. See pod/perlbook.pod for more information. INSTALLATION ============ If you're using a relatively modern operating system and want to install this version of Perl locally, run the following commands: ./Configure -des -Dprefix=$HOME/localperl make test make install This will configure and compile perl for your platform, run the regression tests, and install perl in a subdirectory "localperl" of your home directory. If you run into any trouble whatsoever or you need to install a customized version of Perl, you should read the detailed instructions in the "INSTALL" file that came with this distribution. Additionally, there are a number of "README" files with hints and tips about building and using Perl on a wide variety of platforms, some more common than others. Once you have Perl installed, a wealth of documentation is available to you through the 'perldoc' tool. To get started, run this command: perldoc perl IF YOU RUN INTO TROUBLE ======================= Perl is a large and complex system that's used for everything from knitting to rocket science. If you run into trouble, it's quite likely that someone else has already solved the problem you're facing. Once you've exhausted the documentation, please report bugs to us at the GitHub issue tracker at https://github.com/Perl/perl5/issues While it was current when we made it available, Perl is constantly evolving and there may be a more recent version that fixes bugs you've run into or adds new features that you might find useful. You can always find the latest version of perl on a CPAN (Comprehensive Perl Archive Network) site near you at https://www.cpan.org/src/ If you want to submit a simple patch to the perl source, see the "SUPER QUICK PATCH GUIDE" in pod/perlhack.pod. Just a personal note: I want you to know that I create nice things like this because it pleases the Author of my story. If this bothers you, then your notion of Authorship needs some revision. But you can use perl anyway. :-) The author. LICENSING ========= This program is free software; you can redistribute it and/or modify it under the terms of either: a) the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version, or b) the "Artistic License" which comes with this Kit. 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 either the GNU General Public License or the Artistic License for more details. You should have received a copy of the Artistic License with this Kit, in the file named "Artistic". If not, I'll be glad to provide one. You should also have received a copy of the GNU General Public License along with this program in the file named "Copying". If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA or visit their web page on the internet at https://www.gnu.org/copyleft/gpl.html. For those of you that choose to use the GNU General Public License, my interpretation of the GNU General Public License is that no Perl script falls under the terms of the GPL unless you explicitly put said script under the terms of the GPL yourself. Furthermore, any object code linked with perl does not automatically fall under the terms of the GPL, provided such object code only adds definitions of subroutines and variables, and does not otherwise impair the resulting interpreter from executing any standard Perl script. I consider linking in C subroutines in this manner to be the moral equivalent of defining subroutines in the Perl language itself. You may sell such an object file as proprietary provided that you provide or offer to provide the Perl source, as specified by the GNU General Public License. (This is merely an alternate way of specifying input to the program.) You may also sell a binary produced by the dumping of a running Perl script that belongs to you, provided that you provide or offer to provide the Perl source as specified by the GPL. (The fact that a Perl interpreter and your code are in the same binary file is, in this case, a form of mere aggregation.) This is my interpretation of the GPL. If you still have concerns or difficulties understanding my intent, feel free to contact me. Of course, the Artistic License spells all this out for your protection, so you may prefer to use that. ======================================================================== * README.symbian ======================================================================== If you read this file _as_is_, just ignore the funny characters you see. It is written in the POD format (see pod/perlpod.pod) which is specially designed to be readable as is. =head1 NAME perlsymbian - Perl version 5 on Symbian OS =head1 DESCRIPTION This document describes various features of the Symbian operating system that will affect how Perl version 5 (hereafter just Perl) is compiled and/or runs. B The DLL includes a C++ class called CPerlBase, which one can then (derive from and) use to embed Perl into applications, see F. The base port of Perl to Symbian only implements the basic POSIX-like functionality; it does not implement any further Symbian or Series 60, Series 80, or UIQ bindings for Perl. It is also possible to generate Symbian executables for "miniperl" and "perl", but since there is no standard command line interface for Symbian (nor full keyboards in the devices), these are useful mainly as demonstrations. =head2 Compiling Perl on Symbian (0) You need to have the appropriate Symbian SDK installed. These instructions have been tested under various Nokia Series 60 Symbian SDKs (1.2 to 2.6, 2.8 should also work, 1.2 compiles but does not work), Series 80 2.0, and Nokia 7710 (Series 90) SDK. You can get the SDKs from Forum Nokia (L). A very rough port ("it compiles") to UIQ 2.1 has also been made. A prerequisite for any of the SDKs is to install ActivePerl from ActiveState, L Having the SDK installed also means that you need to have either the Metrowerks CodeWarrior installed (2.8 and 3.0 were used in testing) or the Microsoft Visual C++ 6.0 installed (SP3 minimum, SP5 recommended). Note that for example the Series 60 2.0 VC SDK installation talks about ActivePerl build 518, which does no more (as of mid-2005) exist at the ActiveState website. The ActivePerl 5.8.4 build 810 was used successfully for compiling Perl on Symbian. The 5.6.x ActivePerls do not work. Other SDKs or compilers like Visual.NET, command-line-only Visual.NET, Borland, GnuPoc, or sdk2unix have not been tried. These instructions almost certainly won't work with older Symbian releases or other SDKs. Patches to get this port running in other releases, SDKs, compilers, platforms, or devices are naturally welcome. (1) Get a Perl source code distribution (for example the file perl-5.9.2.tar.gz is fine) from L and unpack it in your the C:/Symbian directory of your Windows system. (2) Change to the perl source directory. cd c:\Symbian\perl-5.x.x (3) Run the following script using the perl coming with the SDK perl symbian\config.pl You must use the cmd.exe, the Cygwin shell will not work. The PATH must include the SDK tools, including a Perl, which should be the case under cmd.exe. If you do not have that, see the end of symbian\sdk.pl for notes of how your environment should be set up for Symbian compiles. (4) Build the project, either by make all in cmd.exe or by using either the Metrowerks CodeWarrior or the Visual C++ 6.0, or the Visual Studio 8 (the Visual C++ 2005 Express Edition works fine). If you use the VC IDE, you will have to run F first using the cmd.exe, and then run 'make win.mf vc6.mf' to generate the VC6 makefiles and workspaces. "make vc6" will compile for the VC6, and "make cw" for the CodeWarrior. The following SDK and compiler configurations and Nokia phones were tested at some point in time (+ = compiled and PerlApp run, - = not), both for Perl 5.8.x and 5.9.x: SDK | VC | CW | --------+----+----+--- S60 1.2 | + | + | 3650 (*) S60 2.0 | + | + | 6600 S60 2.1 | - | + | 6670 S60 2.6 | + | + | 6630 S60 2.8 | + | + | (not tested in a device) S80 2.6 | - | + | 9300 S90 1.1 | + | - | 7710 UIQ 2.1 | - | + | (not tested in a device) (*) Compiles but does not work, unfortunately, a problem with Symbian. If you are using the 'make' directly, it is the GNU make from the SDKs, and it will invoke the right make commands for the Windows emulator build and the Arm target builds ('thumb' by default) as necessary. The build scripts assume the 'absolute style' SDK installs under C:, the 'subst style' will not work. If using the VC IDE, to build use for example the File->Open Workspace-> C:\Symbian\8.0a\S60_2nd_FP2\epoc32\build\symbian\perl\perl\wins\perl.dsw The emulator binaries will appear in the same directory. If using the VC IDE, you will a lot of warnings in the beginning of the build because a lot of headers mentioned by the source cannot be found, but this is not serious since those headers are not used. The Metrowerks will give a lot of warnings about unused variables and empty declarations, you can ignore those. When the Windows and Arm DLLs are built do not be scared by a very long messages whizzing by: it is the "export freeze" phase where the whole (rather large) API of Perl is listed. Once the build is completed you need to create the DLL SIS file by make perldll.sis which will create the file perlXYZ.sis (the XYZ being the Perl version) which you can then install into your Symbian device: an easy way to do this is to send them via Bluetooth or infrared and just open the messages. Since the total size of all Perl SIS files once installed is over 2 MB, it is recommended to do the installation into a memory card (drive E:) instead of the C: drive. The size of the perlXYZ.SIS is about 370 kB but once it is in the device it is about one 750 kB (according to the application manager). The perlXYZ.sis includes only the Perl DLL: to create an additional SIS file which includes some of the standard (pure) Perl libraries, issue the command make perllib.sis Some of the standard Perl libraries are included, but not all: see L or F for more details (250 kB -> 700 kB). Some of the standard Perl XS extensions (see L are also available: make perlext.sis which will create perlXYZext.sis (290 kB -> 770 kB). To compile the demonstration application PerlApp you need first to install the Perl headers under the SDK. To install the Perl headers and the class CPerlBase documentation so that you no more need the Perl sources around to compile Perl applications using the SDK: make sdkinstall The destination directory is C:\Symbian\perl\X.Y.Z. For more details, see F. Once the headers have been installed, you can create a SIS for the PerlApp: make perlapp.sis The perlapp.sis (11 kB -> 16 kB) will be built in the symbian subdirectory, but a copy will also be made to the main directory. If you want to package the Perl DLLs (one for WINS, one for ARMI), the headers, and the documentation: make perlsdk.zip which will create perlXYZsdk.zip that can be used in another Windows system with the SDK, without having to compile Perl in that system. If you want to package the PerlApp sources: make perlapp.zip If you want to package the perl.exe and miniperl.exe, you can use the perlexe.sis and miniperlexe.sis make targets. You also probably want the perllib.sis for the libraries and maybe even the perlapp.sis for the recognizer. The make target 'allsis' combines all the above SIS targets. To clean up after compilation you can use either of make clean make distclean depending on how clean you want to be. =head2 Compilation problems If you see right after "make" this cat makefile.sh >makefile 'cat' is not recognized as an internal or external command, operable program or batch file. it means you need to (re)run the F. If you get the error 'perl' is not recognized as an internal or external command, operable program or batch file. you may need to reinstall the ActivePerl. If you see this ren makedef.pl nomakedef.pl The system cannot find the file specified. C:\Symbian\...\make.exe: [rename_makedef] Error 1 (ignored) please ignore it since it is nothing serious (the build process of renames the Perl makedef.pl as nomakedef.pl to avoid confusing it with a makedef.pl of the SDK). =head2 PerlApp The PerlApp application demonstrates how to embed Perl interpreters to a Symbian application. The "Time" menu item runs the following Perl code: C, the "Oneliner" allows one to type in Perl code, and the "Run" opens a file chooser for selecting a Perl file to run. The PerlApp also is started when the "Perl recognizer" (also included and installed) detects a Perl file being activated through the GUI, and offers either to install it under \Perl (if the Perl file is in the inbox of the messaging application) or to run it (if the Perl file is under \Perl). =head2 sisify.pl In the symbian subdirectory there is F utility which can be used to package Perl scripts and/or Perl library directories into SIS files, which can be installed to the device. To run the sisify.pl utility, you will need to have the 'makesis' and 'uidcrc' utilities already installed. If you don't have the Win32 SDKs, you may try for example L or L. =head2 Using Perl in Symbian First of all note that you have full access to the Symbian device when using Perl: you can do a lot of damage to your device (like removing system files) unless you are careful. Please do take backups before doing anything. The Perl port has been done for the most part using the Symbian standard POSIX-ish STDLIB library. It is a reasonably complete library, but certain corners of such emulation libraries that tend to be left unimplemented on non-UNIX platforms have been left unimplemented also this time: fork(), signals(), user/group ids, select() working for sockets, non-blocking sockets, and so forth. See the file F and look for 'undef' to find the unsupported APIs (or from Perl use Config). The filesystem of Symbian devices uses DOSish syntax, "drives" separated from paths by a colon, and backslashes for the path. The exact assignment of the drives probably varies between platforms, but for example in Series 60 you might see C: as the (flash) main memory, D: as the RAM drive, E: as the memory card (MMC), Z: as the ROM. In Series 80 D: is the memory card. As far the devices go the NUL: is the bit bucket, the COMx: are the serial lines, IRCOMx: are the IR ports, TMP: might be C:\System\Temp. Remember to double those backslashes in doublequoted strings. The Perl DLL is installed in \System\Libs\. The Perl libraries and extension DLLs are installed in \System\Libs\Perl\X.Y.Z\. The PerlApp is installed in \System\Apps\, and the SIS also installs a couple of demo scripts in \Perl\ (C:\Mydocs\Perl\ on Nokia 7710). Note that the Symbian filesystem is very picky: it strongly prefers the \ instead of the /. When doing XS / Symbian C++ programming include first the Symbian headers, then any standard C/POSIX headers, then Perl headers, and finally any application headers. New() and Copy() are unfortunately used by both Symbian and Perl code so you'll have to play cpp games if you need them. PerlBase.h undefines the Perl definitions and redefines them as PerlNew() and PerlCopy(). =head1 TO DO Lots. See F. =head1 WARNING As of Perl Symbian port version 0.4.1 any part of Perl's standard regression test suite has not been run on a real Symbian device using the ported Perl, so innumerable bugs may lie in wait. Therefore there is absolutely no warranty. =head1 NOTE When creating and extending application programming interfaces (APIs) for Symbian or Series 60 or Series 80 or Series 90 it is suggested that trademarks, registered trademarks, or trade names are not used in the API names. Instead, developers should consider basing the API naming in the existing (C++, or maybe Java) public component and API naming, modified as appropriate by the rules of the programming language the new APIs are for. Nokia is a registered trademark of Nokia Corporation. Nokia's product names are trademarks or registered trademarks of Nokia. Other product and company names mentioned herein may be trademarks or trade names of their respective owners. =head1 AUTHOR Jarkko Hietaniemi =head1 COPYRIGHT Copyright (c) 2004-2005 Nokia. All rights reserved. Copyright (c) 2006-2007 Jarkko Hietaniemi. =head1 LICENSE The Symbian port is licensed under the same terms as Perl itself. =head1 HISTORY =over 4 =item * 0.1.0: April 2005 (This will show as "0.01" in the Symbian Installer.) - The console window is a very simple console indeed: one can get the newline with "000" and the "C" button is a backspace. Do not expect a terminal capable of vt100 or ANSI sequences. The console is also "ASCII", you cannot input e.g. any accented letters. Because of obvious physical constraints the console is also very small: (in Nokia 6600) 22 columns, 17 rows. - The following libraries are available: AnyDBM_File AutoLoader base Carp Config Cwd constant DynaLoader Exporter File::Spec integer lib strict Symbol vars warnings XSLoader - The following extensions are available: attributes Compress::Zlib Cwd Data::Dumper Devel::Peek Digest::MD5 DynaLoader Fcntl File::Glob Filter::Util::Call IO List::Util MIME::Base64 PerlIO::scalar PerlIO::via SDBM_File Socket Storable Time::HiRes - The following extensions are missing for various technical reasons: B ByteLoader Devel::DProf Devel::PPPort Encode GDBM_File IPC::SysV NDBM_File Opcode PerlIO::encoding POSIX re Safe Sys::Hostname Sys::Syslog threads threads::shared Unicode::Normalize - Using MakeMaker or the Module::* to build and install modules is not supported. - Building XS other than the ones in the core is not supported. Since this is 0.something release, any future releases are almost guaranteed to be binary incompatible. As a sign of this the Symbian symbol exports are kept unfrozen and the .def files fully rebuilt every time. =item * 0.2.0: October 2005 - Perl 5.9.3 (patch level 25741) - Compress::Zlib and IO::Zlib supported - sisify.pl added We maintain the binary incompatibility. =item * 0.3.0: October 2005 - Perl 5.9.3 (patch level 25911) - Series 80 2.0 and UIQ 2.1 support We maintain the binary incompatibility. =item * 0.4.0: November 2005 - Perl 5.9.3 (patch level 26052) - adding a sample Symbian extension We maintain the binary incompatibility. =item * 0.4.1: December 2006 - Perl 5.9.5-to-be (patch level 30002) - added extensions: Compress/Raw/Zlib, Digest/SHA, Hash/Util, Math/BigInt/FastCalc, Text/Soundex, Time/Piece - port to S90 1.1 by alexander smishlajev We maintain the binary incompatibility. =item * 0.4.2: March 2007 - catchup with Perl 5.9.5-to-be (patch level 30812) - tested to build with Microsoft Visual C++ 2005 Express Edition (which uses Microsoft Visual C 8, instead of the old VC6), SDK used for testing S60_2nd_FP3 aka 8.1a We maintain the binary incompatibility. =back =cut ======================================================================== * cpan/Encode/Encode/README.e2x ======================================================================== Encode::$_Name_ version 0.1 ======== NAME Encode::$_Name_ - SYNOPSIS use Encode::$_Name_; # ABSTRACT INSTALLATION To install this module type the following: perl Makefile.PL make make test make install DEPENDENCIES This module requires perl version 5.7.3 or later. COPYRIGHT AND LICENCE Copyright (C) 2002 Your Name This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. ======================================================================== * cpan/podlators/t/data/snippets/README ======================================================================== The files in this directory are used by the test suite to exercise various behavior of Pod::Man or Pod::Text. They use a pseudo-ini-file syntax with free-form sections, normally an input and an output section and possibly others. Sections start with the section type in []. The contents are normally just free-form. The exception is an [options] section, where the contents are key/value pairs, where the key is separated from the value with whitespace. Valid sections are: [name] The name of this test for status reporting [options] key value key value [input] POD input source. [output] The results of running some formatter on the input. [errors] Errors reported to standard error when running some formatter on the input. [exception] The text of an exception (with the file and line number information stripped) thrown by running some formatter on the input. Files are organized into subdirectories named after the formatter, namely man (Pod::Man), text (Pod::Text), color (Pod::Text::Color), overstrike (Pod::Text::Overstrike), and termcap (Pod::Text::Termcap). ----- Copyright 2015, 2018 Russ Allbery Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty. SPDX-License-Identifier: FSFAP ======================================================================== * dist/Carp/README ======================================================================== NAME Carp - alternative warn and die for modules DESCRIPTION The Carp routines are useful in your own modules because they act like die() or warn(), but with a message which is more likely to be useful to a user of your module. In the case of cluck, confess, and longmess that context is a summary of every call in the call-stack. For a shorter message you can use carp or croak which report the error as being from where your module was called. There is no guarantee that that is where the error was, but it is a good educated guess. You can also alter the way the output and logic of Carp works, by changing some global variables in the Carp namespace. INSTALLATION perl Makefile.PL make make test make install AUTHOR The Carp module first appeared in Larry Wall's perl 5.000 distribution. Since then it has been modified by several of the perl 5 porters. Andrew Main (Zefram) divested Carp into an independent distribution. COPYRIGHT Copyright (C) 1994-2013 Larry Wall Copyright (C) 2011, 2012, 2013 Andrew Main (Zefram) LICENSE This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. ======================================================================== * dist/I18N-LangTags/README ======================================================================== README for I18N::LangTags Time-stamp: "2004-10-06 23:19:39 ADT" I18N::LangTags I18N::LangTags - functions for dealing with RFC3066-style language tags Language tags are a formalism, described in RFC 3066 (obsoleting 1766), for declaring what language form (language and possibly dialect) a given chunk of information is in. This library provides functions for common tasks involving language tags (notably the extraction of them, comparing them, and testing the formal validity of them) as is needed in a variety of protocols and applications. I18N::LangTags::List -- tags and names for human languages. This module goes from known language tag names ("fr-CA") to their English names ("Canadian French"). Its documentation also lists the several hundred known tags and some common subforms. You may find this useful as a reference. See the POD for more information. INSTALLATION You install I18N::LangTags and I18N::LangTags::List, as you would install any perl module library, by running these commands: perl Makefile.PL make make test make install If you want to install a private copy of I18N::LangTags in your home directory, then you should try to produce the initial Makefile with something like this command: perl Makefile.PL LIB=~/perl See perldoc perlmodinstall for more information on installing modules. DOCUMENTATION POD-format documentation is included in LangTags.pm. POD is readable with the 'perldoc' utility. See ChangeLog for recent changes. SUPPORT Questions, bug reports, useful code bits, and suggestions for I18N::LangTags should just be sent to me at sburke@cpan.org AVAILABILITY The latest version of I18N::LangTags is available from the Comprehensive Perl Archive Network (CPAN). Visit to find a CPAN site near you. COPYRIGHT Copyright 1998+, Sean M. Burke , all rights reserved. The programs and documentation in this dist are distributed in the hope that they will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. ======================================================================== * dist/Locale-Maketext/README ======================================================================== README for Locale::Maketext Time-stamp: "2004-03-30 16:02:27 AST" Locale::Maketext Locale::Maketext is a base class providing a framework for localization and inheritance-based lexicons, as described in my article in The Perl Journal #13 (a corrected version of which appears in this dist). PREREQUISITES This suite requires Perl 5. It also requires a recent version of I18N::LangTags. MSWin users should also get Win32::Locale. File::Findgrep is also useful example code, as is the rather larger Apache::MP3 source (even if you don't run Apache). INSTALLATION You install Locale::Maketext, as you would install any Perl module distribution, by running these commands: perl Makefile.PL make make test make install If you want to install a private copy of Maketext in your home directory, then you should try to produce the initial Makefile with something like this command: perl Makefile.PL LIB=~/perl See perldoc perlmodinstall for more information. DOCUMENTATION See the pod in Locale::Maketext and Locale::Maketext::TPJ13, and see also File::Findgrep. SUPPORT Questions, bug reports, useful code bits, and suggestions for Worms should be sent to me at sburke@cpan.org AVAILABILITY The latest version of Locale::Maketext is available from the Comprehensive Perl Archive Network (CPAN). Visit to find a CPAN site near you. COPYRIGHT Copyright 1999-2004, Sean M. Burke , all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. AUTHOR Sean M. Burke ======================================================================== * dist/Module-CoreList/README ======================================================================== README for Module::CoreList 2.20 =head1 NAME Module::CoreList - what modules shipped with versions of perl =head1 SYNOPSIS use Module::CoreList; print $Module::CoreList::version{5.00503}{CPAN}; # prints 1.48 print Module::CoreList->first_release('File::Spec'); # prints 5.00503 print Module::CoreList->first_release('File::Spec', 0.82); # prints 5.006001 print join ", ", @{ $Module::CoreList::families{5.005} }; # prints "5.005, 5.00503, 5.00504" =head1 DEPENDENCIES This module has external dependencies on the following modules: Test::More =head1 INSTALLATION perl Makefile.PL make make test and if all goes well make install =head1 HISTORY See the F file. =head1 AUTHOR Richard Clamp Erichardc@unixbeard.netE Currently maintained by the perl 5 porters Eperl5-porters@perl.orgE. =head1 COPYRIGHT Copyright (C) 2002-2009 Richard Clamp. All Rights Reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L, L ======================================================================== * dist/Storable/README ======================================================================== Storable 3.05c Copyright (c) 1995-2000, Raphael Manfredi Copyright (c) 2001-2004, Larry Wall Copyright (c) 2016,2017 cPanel Inc ------------------------------------------------------------------------ This program is free software; you can redistribute it and/or modify it under the same terms as Perl 5 itself. 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 Perl 5 License schemes for more details. ------------------------------------------------------------------------ +======================================================================= | Storable is distributed as a module, but is also part of the official | Perl core distribution, as of perl 5.8. | Maintenance is partially done by the perl5-porters, and for cperl by cPanel. | We thank Raphael Manfredi for providing us with this very useful module. +======================================================================= The Storable extension brings persistence to your data. You may recursively store to disk any data structure, no matter how complex and circular it is, provided it contains only SCALAR, ARRAY, HASH (possibly tied) and references (possibly blessed) to those items. At a later stage, or in another program, you may retrieve data from the stored file and recreate the same hiearchy in memory. If you had blessed references, the retrieved references are blessed into the same package, so you must make sure you have access to the same perl class than the one used to create the relevant objects. There is also a dclone() routine which performs an optimized mirroring of any data structure, preserving its topology. Objects (blessed references) may also redefine the way storage and retrieval is performed, and/or what deep cloning should do on those objects. To compile this extension, run: perl Makefile.PL [PERL_SRC=...where you put perl sources...] make make install There is an embedded POD manual page in Storable.pm. Storable was written by Raphael Manfredi Maintenance is now done by cperl, https://github.com/rurban/Storable/ Note that p5p still ships an old broken version, without stack overflow protection and large object support. As long as you don't store overlarge objects, they are compatible. Please e-mail us with problems, bug fixes, comments and complaints, although if you have complements you should send them to Raphael. Please don't e-mail Raphael with problems, as he no longer works on Storable, and your message will be delayed while he forwards it to us. ------------------------------------------------------------------------ Thanks to (in chronological order): Jarkko Hietaniemi Ulrich Pfeifer Benjamin A. Holzman Andrew Ford Gisle Aas Jeff Gresham Murray Nesbitt Albert N. Micheev Marc Lehmann Justin Banks Jarkko Hietaniemi (AGAIN, as perl 5.7.0 Pumpkin!) Todd Rinaldo and JD Lightsey for optional disabling tie and bless for increased security. Reini Urban for the 3.0x >2G support and rewrite JD Lightsey for their contributions. A Japanese translation of this man page is available at the Japanized Perl Resources Project . ------------------------------------------------------------------------ The perl5-porters would like to thank Raphael Manfredi According to the perl5.8 Changes file, the following people have helped bring you this Storable release: Abhijit Menon-Sen Andreas J. Koenig Archer Sully Craig A. Berry Dan Kogai Doug MacEachern Gurusamy Sarathy H.Merijn Brand Jarkko Hietaniemi Mark Bixby Michael Stevens Mike Guy Nicholas Clark Peter J. Farley III Peter Prymmer Philip Newton Raphael Manfredi Robin Barker Radu Greab Tim Bunce VMSperlers Yitzchak Scott-Thoennes ======================================================================== * ext/SDBM_File/README ======================================================================== sdbm - Substitute DBM or Berkeley ndbm for Every UN*X[1] Made Simple Ozan (oz) Yigit The Guild of PD Software Toolmakers Toronto - Canada oz@nexus.yorku.ca Implementation is the sincerest form of flattery. - L. Peter Deutsch A The Clone of the ndbm library The sources accompanying this notice - sdbm - consti- tute the first public release (Dec. 1990) of a complete clone of the Berkeley UN*X ndbm library. The sdbm library is meant to clone the proven functionality of ndbm as closely as possible, including a few improvements. It is practical, easy to understand, and compatible. The sdbm library is not derived from any licensed, proprietary or copyrighted software. The sdbm implementation is based on a 1978 algorithm [Lar78] by P.-A. (Paul) Larson known as "Dynamic Hashing". In the course of searching for a substitute for ndbm, I pro- totyped three different external-hashing algorithms [Lar78, Fag79, Lit80] and ultimately chose Larson's algorithm as a basis of the sdbm implementation. The Bell Labs dbm (and therefore ndbm) is based on an algorithm invented by Ken Thompson, [Tho90, Tor87] and predates Larson's work. The sdbm programming interface is totally compatible with ndbm and includes a slight improvement in database ini- tialization. It is also expected to be binary-compatible under most UN*X versions that support the ndbm library. The sdbm implementation shares the shortcomings of the ndbm library, as a side effect of various simplifications to the original Larson algorithm. It does produce holes in the page file as it writes pages past the end of file. (Larson's paper include a clever solution to this problem that is a result of using the hash value directly as a block address.) On the other hand, extensive tests seem to indicate that sdbm creates fewer holes in general, and the resulting page- files are smaller. The sdbm implementation is also faster than ndbm in database creation. Unlike the ndbm, the sdbm _________________________ [1] UN*X is not a trademark of any (dis)organization. - 2 - store operation will not "wander away" trying to split its data pages to insert a datum that cannot (due to elaborate worst-case situations) be inserted. (It will fail after a pre-defined number of attempts.) Important Compatibility Warning The sdbm and ndbm libraries cannot share databases: one cannot read the (dir/pag) database created by the other. This is due to the differences between the ndbm and sdbm algorithms[2], and the hash functions used. It is easy to convert between the dbm/ndbm databases and sdbm by ignoring the index completely: see dbd, dbu etc. Notice of Intellectual Property The entire sdbm library package, as authored by me, Ozan S. Yigit, is hereby placed in the public domain. As such, the author is not responsible for the consequences of use of this software, no matter how awful, even if they arise from defects in it. There is no expressed or implied warranty for the sdbm library. Since the sdbm library package is in the public domain, this original release or any additional public-domain releases of the modified original cannot possibly (by defin- ition) be withheld from you. Also by definition, You (singu- lar) have all the rights to this code (including the right to sell without permission, the right to hoard[3] and the right to do other icky things as you see fit) but those rights are also granted to everyone else. Please note that all previous distributions of this software contained a copyright (which is now dropped) to protect its origins and its current public domain status against any possible claims and/or challenges. Acknowledgments Many people have been very helpful and supportive. A partial list would necessarily include Rayan Zacherissen (who contributed the man page, and also hacked a MMAP _________________________ [2] Torek's discussion [Tor87] indicates that dbm/ndbm implementations use the hash value to traverse the radix trie differently than sdbm and as a result, the page indexes are generated in different order. For more information, send e-mail to the author. [3] You cannot really hoard something that is avail- able to the public at large, but try if it makes you feel any better. - 3 - version of sdbm), Arnold Robbins, Chris Lewis, Bill David- sen, Henry Spencer, Geoff Collyer, Rich Salz (who got me started in the first place), Johannes Ruschein (who did the minix port) and David Tilbrook. I thank you all. Distribution Manifest and Notes This distribution of sdbm includes (at least) the following: CHANGES change log README this file. biblio a small bibliography on external hashing dba.c a crude (n/s)dbm page file analyzer dbd.c a crude (n/s)dbm page file dumper (for conversion) dbe.1 man page for dbe.c dbe.c Janick's database editor dbm.c a dbm library emulation wrapper for ndbm/sdbm dbm.h header file for the above dbu.c a crude db management utility hash.c hashing function makefile guess. pair.c page-level routines (posted earlier) pair.h header file for the above readme.ms troff source for the README file sdbm.3 man page sdbm.c the real thing sdbm.h header file for the above tune.h place for tuning & portability thingies util.c miscellaneous dbu is a simple database manipulation program[4] that tries to look like Bell Labs' cbt utility. It is currently incomplete in functionality. I use dbu to test out the rou- tines: it takes (from stdin) tab separated key/value pairs for commands like build or insert or takes keys for commands like delete or look. dbu dbmfile dba is a crude analyzer of dbm/sdbm/ndbm page files. It scans the entire page file, reporting page level statistics, and totals at the end. dbd is a crude dump program for dbm/ndbm/sdbm data- bases. It ignores the bitmap, and dumps the data pages in sequence. It can be used to create input for the dbu util- ity. Note that dbd will skip any NULLs in the key and data fields, thus is unsuitable to convert some peculiar _________________________ [4] The dbd, dba, dbu utilities are quick hacks and are not fit for production use. They were developed late one night, just to test out sdbm, and convert some databases. - 4 - databases that insist in including the terminating null. I have also included a copy of the dbe (ndbm DataBase Editor) by Janick Bergeron [janick@bnr.ca] for your pleas- ure. You may find it more useful than the little dbu util- ity. dbm.[ch] is a dbm library emulation on top of ndbm (and hence suitable for sdbm). Written by Robert Elz. The sdbm library has been around in beta test for quite a long time, and from whatever little feedback I received (maybe no news is good news), I believe it has been func- tioning without any significant problems. I would, of course, appreciate all fixes and/or improvements. Portabil- ity enhancements would especially be useful. Implementation Issues Hash functions: The algorithm behind sdbm implementa- tion needs a good bit-scrambling hash function to be effec- tive. I ran into a set of constants for a simple hash func- tion that seem to help sdbm perform better than ndbm for various inputs: /* * polynomial conversion ignoring overflows * 65599 nice. 65587 even better. */ long dbm_hash(char *str, int len) { unsigned long n = 0; while (len--) n = n * 65599 + *str++; return n; } There may be better hash functions for the purposes of dynamic hashing. Try your favorite, and check the pagefile. If it contains too many pages with too many holes, (in rela- tion to this one for example) or if sdbm simply stops work- ing (fails after SPLTMAX attempts to split) when you feed your NEWS history file to it, you probably do not have a good hashing function. If you do better (for different types of input), I would like to know about the function you use. Block sizes: It seems (from various tests on a few machines) that a page file block size PBLKSIZ of 1024 is by far the best for performance, but this also happens to limit the size of a key/value pair. Depending on your needs, you may wish to increase the page size, and also adjust PAIRMAX (the maximum size of a key/value pair allowed: should always - 5 - be at least three words smaller than PBLKSIZ.) accordingly. The system-wide version of the library should probably be configured with 1024 (distribution default), as this appears to be sufficient for most common uses of sdbm. Portability This package has been tested in many different UN*Xes even including minix, and appears to be reasonably portable. This does not mean it will port easily to non-UN*X systems. Notes and Miscellaneous The sdbm is not a very complicated package, at least not after you familiarize yourself with the literature on external hashing. There are other interesting algorithms in existence that ensure (approximately) single-read access to a data value associated with any key. These are directory- less schemes such as linear hashing [Lit80] (+ Larson varia- tions), spiral storage [Mar79] or directory schemes such as extensible hashing [Fag79] by Fagin et al. I do hope these sources provide a reasonable playground for experimentation with other algorithms. See the June 1988 issue of ACM Com- puting Surveys [Enb88] for an excellent overview of the field. References [Lar78] P.-A. Larson, "Dynamic Hashing", BIT, vol. 18, pp. 184-201, 1978. [Tho90] Ken Thompson, private communication, Nov. 1990 [Lit80] W. Litwin, "Linear Hashing: A new tool for file and table addressing", Proceedings of the 6th Conference on Very Large Dabatases (Montreal), pp. 212-223, Very Large Database Foundation, Saratoga, Calif., 1980. [Fag79] R. Fagin, J. Nievergelt, N. Pippinger, and H. R. Strong, "Extendible Hashing - A Fast Access Method for Dynamic Files", ACM Trans. Database Syst., vol. 4, no.3, pp. 315-344, Sept. 1979. [Wal84] Rich Wales, "Discussion of 'dbm' data base system", USENET newsgroup unix.wizards, Jan. 1984. [Tor87] Chris Torek, "Re: dbm.a and ndbm.a archives", - 6 - USENET newsgroup comp.unix, 1987. [Mar79] G. N. Martin, "Spiral Storage: Incrementally Augment- able Hash Addressed Storage", Technical Report #27, University of Varwick, Coventry, U.K., 1979. [Enb88] R. J. Enbody and H. C. Du, "Dynamic Hashing Schemes",ACM Computing Surveys, vol. 20, no. 2, pp. 85-113, June 1988. ======================================================================== * ext/SDBM_File/readme.ms ======================================================================== .\" tbl | readme.ms | [tn]roff -ms | ... .\" note the "C" (courier) and "CB" fonts: you will probably have to .\" change these. .\" $Id: readme.ms,v 1.1 90/12/13 13:09:15 oz Exp Locker: oz $ .de P1 .br .nr dT 4 .nf .ft C .sp .5 .nr t \\n(dT*\\w'x'u .ta 1u*\\ntu 2u*\\ntu 3u*\\ntu 4u*\\ntu 5u*\\ntu 6u*\\ntu 7u*\\ntu 8u*\\ntu 9u*\\ntu 10u*\\ntu 11u*\\ntu 12u*\\ntu 13u*\\ntu 14u*\\ntu .. .de P2 .br .ft 1 .br .sp .5 .br .fi .. .\" CW uses the typewriter/courier font. .de CW \fC\\$1\\fP\\$2 .. .\" Footnote numbering [by Henry Spencer] .\" \*f for a footnote number.. .\" .FS .\" \*F .\" .FE .\" .ds f \\u\\s-2\\n+f\\s+2\\d .nr f 0 1 .ds F \\n+F. .nr F 0 1 .ND .LP .TL \fIsdbm\fP \(em Substitute DBM .br or .br Berkeley \fIndbm\fP for Every UN*X\** Made Simple .AU Ozan (oz) Yigit .AI The Guild of PD Software Toolmakers Toronto - Canada .sp oz@nexus.yorku.ca .LP .FS UN*X is not a trademark of any (dis)organization. .FE .sp 2 \fIImplementation is the sincerest form of flattery. \(em L. Peter Deutsch\fP .SH A The Clone of the \fIndbm\fP library .PP The sources accompanying this notice \(em \fIsdbm\fP \(em constitute the first public release (Dec. 1990) of a complete clone of the Berkeley UN*X \fIndbm\fP library. The \fIsdbm\fP library is meant to clone the proven functionality of \fIndbm\fP as closely as possible, including a few improvements. It is practical, easy to understand, and compatible. The \fIsdbm\fP library is not derived from any licensed, proprietary or copyrighted software. .PP The \fIsdbm\fP implementation is based on a 1978 algorithm [Lar78] by P.-A. (Paul) Larson known as "Dynamic Hashing". In the course of searching for a substitute for \fIndbm\fP, I prototyped three different external-hashing algorithms [Lar78, Fag79, Lit80] and ultimately chose Larson's algorithm as a basis of the \fIsdbm\fP implementation. The Bell Labs \fIdbm\fP (and therefore \fIndbm\fP) is based on an algorithm invented by Ken Thompson, [Tho90, Tor87] and predates Larson's work. .PP The \fIsdbm\fR programming interface is totally compatible with \fIndbm\fP and includes a slight improvement in database initialization. It is also expected to be binary-compatible under most UN*X versions that support the \fIndbm\fP library. .PP The \fIsdbm\fP implementation shares the shortcomings of the \fIndbm\fP library, as a side effect of various simplifications to the original Larson algorithm. It does produce \fIholes\fP in the page file as it writes pages past the end of file. (Larson's paper include a clever solution to this problem that is a result of using the hash value directly as a block address.) On the other hand, extensive tests seem to indicate that \fIsdbm\fP creates fewer holes in general, and the resulting pagefiles are smaller. The \fIsdbm\fP implementation is also faster than \fIndbm\fP in database creation. Unlike the \fIndbm\fP, the \fIsdbm\fP .CW store operation will not "wander away" trying to split its data pages to insert a datum that \fIcannot\fP (due to elaborate worst-case situations) be inserted. (It will fail after a pre-defined number of attempts.) .SH Important Compatibility Warning .PP The \fIsdbm\fP and \fIndbm\fP libraries \fIcannot\fP share databases: one cannot read the (dir/pag) database created by the other. This is due to the differences between the \fIndbm\fP and \fIsdbm\fP algorithms\**, .FS Torek's discussion [Tor87] indicates that \fIdbm/ndbm\fP implementations use the hash value to traverse the radix trie differently than \fIsdbm\fP and as a result, the page indexes are generated in \fIdifferent\fP order. For more information, send e-mail to the author. .FE and the hash functions used. It is easy to convert between the \fIdbm/ndbm\fP databases and \fIsdbm\fP by ignoring the index completely: see .CW dbd , .CW dbu etc. .R .LP .SH Notice of Intellectual Property .LP \fIThe entire\fP sdbm \fIlibrary package, as authored by me,\fP Ozan S. Yigit, \fIis hereby placed in the public domain.\fP As such, the author is not responsible for the consequences of use of this software, no matter how awful, even if they arise from defects in it. There is no expressed or implied warranty for the \fIsdbm\fP library. .PP Since the \fIsdbm\fP library package is in the public domain, this \fIoriginal\fP release or any additional public-domain releases of the modified original cannot possibly (by definition) be withheld from you. Also by definition, You (singular) have all the rights to this code (including the right to sell without permission, the right to hoard\** .FS You cannot really hoard something that is available to the public at large, but try if it makes you feel any better. .FE and the right to do other icky things as you see fit) but those rights are also granted to everyone else. .PP Please note that all previous distributions of this software contained a copyright (which is now dropped) to protect its origins and its current public domain status against any possible claims and/or challenges. .SH Acknowledgments .PP Many people have been very helpful and supportive. A partial list would necessarily include Rayan Zacherissen (who contributed the man page, and also hacked a MMAP version of \fIsdbm\fP), Arnold Robbins, Chris Lewis, Bill Davidsen, Henry Spencer, Geoff Collyer, Rich Salz (who got me started in the first place), Johannes Ruschein (who did the minix port) and David Tilbrook. I thank you all. .SH Distribution Manifest and Notes .LP This distribution of \fIsdbm\fP includes (at least) the following: .P1 CHANGES change log README this file. biblio a small bibliography on external hashing dba.c a crude (n/s)dbm page file analyzer dbd.c a crude (n/s)dbm page file dumper (for conversion) dbe.1 man page for dbe.c dbe.c Janick's database editor dbm.c a dbm library emulation wrapper for ndbm/sdbm dbm.h header file for the above dbu.c a crude db management utility hash.c hashing function makefile guess. pair.c page-level routines (posted earlier) pair.h header file for the above readme.ms troff source for the README file sdbm.3 man page sdbm.c the real thing sdbm.h header file for the above tune.h place for tuning & portability thingies util.c miscellaneous .P2 .PP .CW dbu is a simple database manipulation program\** that tries to look .FS The .CW dbd , .CW dba , .CW dbu utilities are quick hacks and are not fit for production use. They were developed late one night, just to test out \fIsdbm\fP, and convert some databases. .FE like Bell Labs' .CW cbt utility. It is currently incomplete in functionality. I use .CW dbu to test out the routines: it takes (from stdin) tab separated key/value pairs for commands like .CW build or .CW insert or takes keys for commands like .CW delete or .CW look . .P1 dbu dbmfile .P2 .PP .CW dba is a crude analyzer of \fIdbm/sdbm/ndbm\fP page files. It scans the entire page file, reporting page level statistics, and totals at the end. .PP .CW dbd is a crude dump program for \fIdbm/ndbm/sdbm\fP databases. It ignores the bitmap, and dumps the data pages in sequence. It can be used to create input for the .CW dbu utility. Note that .CW dbd will skip any NULLs in the key and data fields, thus is unsuitable to convert some peculiar databases that insist in including the terminating null. .PP I have also included a copy of the .CW dbe (\fIndbm\fP DataBase Editor) by Janick Bergeron [janick@bnr.ca] for your pleasure. You may find it more useful than the little .CW dbu utility. .PP .CW dbm.[ch] is a \fIdbm\fP library emulation on top of \fIndbm\fP (and hence suitable for \fIsdbm\fP). Written by Robert Elz. .PP The \fIsdbm\fP library has been around in beta test for quite a long time, and from whatever little feedback I received (maybe no news is good news), I believe it has been functioning without any significant problems. I would, of course, appreciate all fixes and/or improvements. Portability enhancements would especially be useful. .SH Implementation Issues .PP Hash functions: The algorithm behind \fIsdbm\fP implementation needs a good bit-scrambling hash function to be effective. I ran into a set of constants for a simple hash function that seem to help \fIsdbm\fP perform better than \fIndbm\fP for various inputs: .P1 /* * polynomial conversion ignoring overflows * 65599 nice. 65587 even better. */ long dbm_hash(char *str, int len) { unsigned long n = 0; while (len--) n = n * 65599 + *str++; return n; } .P2 .PP There may be better hash functions for the purposes of dynamic hashing. Try your favorite, and check the pagefile. If it contains too many pages with too many holes, (in relation to this one for example) or if \fIsdbm\fP simply stops working (fails after .CW SPLTMAX attempts to split) when you feed your NEWS .CW history file to it, you probably do not have a good hashing function. If you do better (for different types of input), I would like to know about the function you use. .PP Block sizes: It seems (from various tests on a few machines) that a page file block size .CW PBLKSIZ of 1024 is by far the best for performance, but this also happens to limit the size of a key/value pair. Depending on your needs, you may wish to increase the page size, and also adjust .CW PAIRMAX (the maximum size of a key/value pair allowed: should always be at least three words smaller than .CW PBLKSIZ .) accordingly. The system-wide version of the library should probably be configured with 1024 (distribution default), as this appears to be sufficient for most common uses of \fIsdbm\fP. .SH Portability .PP This package has been tested in many different UN*Xes even including minix, and appears to be reasonably portable. This does not mean it will port easily to non-UN*X systems. .SH Notes and Miscellaneous .PP The \fIsdbm\fP is not a very complicated package, at least not after you familiarize yourself with the literature on external hashing. There are other interesting algorithms in existence that ensure (approximately) single-read access to a data value associated with any key. These are directory-less schemes such as \fIlinear hashing\fP [Lit80] (+ Larson variations), \fIspiral storage\fP [Mar79] or directory schemes such as \fIextensible hashing\fP [Fag79] by Fagin et al. I do hope these sources provide a reasonable playground for experimentation with other algorithms. See the June 1988 issue of ACM Computing Surveys [Enb88] for an excellent overview of the field. .PG .SH References .LP .IP [Lar78] 4m P.-A. Larson, "Dynamic Hashing", \fIBIT\fP, vol. 18, pp. 184-201, 1978. .IP [Tho90] 4m Ken Thompson, \fIprivate communication\fP, Nov. 1990 .IP [Lit80] 4m W. Litwin, "Linear Hashing: A new tool for file and table addressing", \fIProceedings of the 6th Conference on Very Large Dabatases (Montreal)\fP, pp. 212-223, Very Large Database Foundation, Saratoga, Calif., 1980. .IP [Fag79] 4m R. Fagin, J. Nievergelt, N. Pippinger, and H. R. Strong, "Extendible Hashing - A Fast Access Method for Dynamic Files", \fIACM Trans. Database Syst.\fP, vol. 4, no.3, pp. 315-344, Sept. 1979. .IP [Wal84] 4m Rich Wales, "Discussion of 'dbm' data base system", \fIUSENET newsgroup unix.wizards\fP, Jan. 1984. .IP [Tor87] 4m Chris Torek, "Re: dbm.a and ndbm.a archives", \fIUSENET newsgroup comp.unix\fP, 1987. .IP [Mar79] 4m G. N. Martin, "Spiral Storage: Incrementally Augmentable Hash Addressed Storage", \fITechnical Report #27\fP, University of Varwick, Coventry, U.K., 1979. .IP [Enb88] 4m R. J. Enbody and H. C. Du, "Dynamic Hashing Schemes",\fIACM Computing Surveys\fP, vol. 20, no. 2, pp. 85-113, June 1988. ======================================================================== * ext/XS-Typemap/README ======================================================================== XSTypemap ========= This module tests that the standard XS typemaps are working correctly. perl Makefile.PL make make test Nothing is installed. Currently not all the typemap entries have corresponding tests. Missing entries are T_REF_IV_REF T_PTRDESC T_REFREF T_REFOBJ T_PACKED T_PACKEDARRAY T_DATAUNIT T_CALLBACK T_IN T_INOUT T_OUT Author ------ Tim Jenness Copyright (C) 2001 Tim Jenness All Rights Reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. ======================================================================== * symbian/README ======================================================================== The PerlApp* files are a demonstration application for the CPerlBase class, which is defined and implemented by the PerlBase* files. The rest of the files are part of the Symbian base port. All files are Copyright (c) Nokia, 2004-2005, all rights reserved, and licensed under the same terms as Perl itself. Once the 'sdkinstall' make target has been run in the top level, the PerlApp can be built using the standard Symbian way: bldmake bldfiles abld build wins udeb abld build thumb urel and then packaged into a SIS by: makesis PerlApp.pkg -- ======================================================================== * Copying ======================================================================== GNU GENERAL PUBLIC LICENSE Version 1, February 1989 Copyright (C) 1989 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The license agreements of most software companies try to keep users at the mercy of those companies. By contrast, our General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. The General Public License applies to the Free Software Foundation's software and to any other program whose authors commit to using it. You can use it for your programs, too. When we speak of free software, we are referring to freedom, not price. Specifically, the General Public License is designed to make sure that you have the freedom to give away or sell copies of free software, that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of a such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any work containing the Program or a portion of it, either verbatim or with modifications. Each licensee is addressed as "you". 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this General Public License and to the absence of any warranty; and give any other recipients of the Program a copy of this General Public License along with the Program. You may charge a fee for the physical act of transferring a copy. 2. You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following: a) cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and b) cause the whole of any work that you distribute or publish, that in whole or in part contains the Program or any part thereof, either with or without modifications, to be licensed at no charge to all third parties under the terms of this General Public License (except that you may choose to grant warranty protection to some or all third parties, at your option). c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the simplest and most usual way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this General Public License. d) You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. Mere aggregation of another independent work with the Program (or its derivative) on a volume of a storage or distribution medium does not bring the other work under the scope of these terms. 3. You may copy and distribute the Program (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following: a) accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or, b) accompany it with a written offer, valid for at least three years, to give any third party free (except for a nominal charge for the cost of distribution) a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Paragraphs 1 and 2 above; or, c) accompany it with the information you received as to where the corresponding source code may be obtained. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form alone.) Source code for a work means the preferred form of the work for making modifications to it. For an executable file, complete source code means all the source code for all modules it contains; but, as a special exception, it need not include source code for modules which are standard libraries that accompany the operating system on which the executable file runs, or for standard header files or definitions files that accompany that operating system. 4. You may not copy, modify, sublicense, distribute or transfer the Program except as expressly provided under this General Public License. Any attempt otherwise to copy, modify, sublicense, distribute or transfer the Program is void, and will automatically terminate your rights to use the Program under this License. However, parties who have received copies, or rights to use copies, from you under this General Public License will not have their licenses terminated so long as such parties remain in full compliance. 5. By copying, distributing or modifying the Program (or any work based on the Program) you indicate your acceptance of this license to do so, and all its terms and conditions. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. 7. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of the license which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the license, you may choose any version ever published by the Free Software Foundation. 8. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to humanity, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy 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 1, 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19xx name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (a program to direct compilers to make passes at assemblers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice That's all there is to it! ======================================================================== * cpan/Compress-Raw-Bzip2/bzip2-src/LICENSE ======================================================================== -------------------------------------------------------------------------- This program, "bzip2", the associated library "libbzip2", and all documentation, are copyright (C) 1996-2019 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, jseward@acm.org bzip2/libbzip2 version 1.0.8 of 13 July 2019 -------------------------------------------------------------------------- ======================================================================== * dist/ExtUtils-CBuilder/LICENSE ======================================================================== This software is copyright (c) 2020 by Ken Williams. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. Terms of the Perl programming language system itself a) the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version, or b) the "Artistic License" --- The GNU General Public License, Version 1, February 1989 --- This software is Copyright (c) 2020 by Ken Williams. This is free software, licensed under: The GNU General Public License, Version 1, February 1989 GNU GENERAL PUBLIC LICENSE Version 1, February 1989 Copyright (C) 1989 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The license agreements of most software companies try to keep users at the mercy of those companies. By contrast, our General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. The General Public License applies to the Free Software Foundation's software and to any other program whose authors commit to using it. You can use it for your programs, too. When we speak of free software, we are referring to freedom, not price. Specifically, the General Public License is designed to make sure that you have the freedom to give away or sell copies of free software, that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of a such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any work containing the Program or a portion of it, either verbatim or with modifications. Each licensee is addressed as "you". 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this General Public License and to the absence of any warranty; and give any other recipients of the Program a copy of this General Public License along with the Program. You may charge a fee for the physical act of transferring a copy. 2. You may modify your copy or copies of the Program or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above, provided that you also do the following: a) cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and b) cause the whole of any work that you distribute or publish, that in whole or in part contains the Program or any part thereof, either with or without modifications, to be licensed at no charge to all third parties under the terms of this General Public License (except that you may choose to grant warranty protection to some or all third parties, at your option). c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the simplest and most usual way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this General Public License. d) You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. Mere aggregation of another independent work with the Program (or its derivative) on a volume of a storage or distribution medium does not bring the other work under the scope of these terms. 3. You may copy and distribute the Program (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following: a) accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or, b) accompany it with a written offer, valid for at least three years, to give any third party free (except for a nominal charge for the cost of distribution) a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Paragraphs 1 and 2 above; or, c) accompany it with the information you received as to where the corresponding source code may be obtained. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form alone.) Source code for a work means the preferred form of the work for making modifications to it. For an executable file, complete source code means all the source code for all modules it contains; but, as a special exception, it need not include source code for modules which are standard libraries that accompany the operating system on which the executable file runs, or for standard header files or definitions files that accompany that operating system. 4. You may not copy, modify, sublicense, distribute or transfer the Program except as expressly provided under this General Public License. Any attempt otherwise to copy, modify, sublicense, distribute or transfer the Program is void, and will automatically terminate your rights to use the Program under this License. However, parties who have received copies, or rights to use copies, from you under this General Public License will not have their licenses terminated so long as such parties remain in full compliance. 5. By copying, distributing or modifying the Program (or any work based on the Program) you indicate your acceptance of this license to do so, and all its terms and conditions. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. 7. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of the license which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the license, you may choose any version ever published by the Free Software Foundation. 8. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS Appendix: How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to humanity, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy 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 1, 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19xx name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (a program to direct compilers to make passes at assemblers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice That's all there is to it! --- The Artistic License 1.0 --- This software is Copyright (c) 2020 by Ken Williams. This is free software, licensed under: The Artistic License 1.0 The Artistic License Preamble The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications. Definitions: - "Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification. - "Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder. - "Copyright Holder" is whoever is named in the copyright or copyrights for the package. - "You" is you, if you're thinking about copying or distributing this Package. - "Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.) - "Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it. 1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers. 2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version. 3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following: a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as ftp.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package. b) use the modified Package only within your corporation or organization. c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version. d) make other distribution arrangements with the Copyright Holder. 4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following: a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version. b) accompany the distribution with the machine-readable source of the Package with your modifications. c) accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version. d) make other distribution arrangements with the Copyright Holder. 5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own. 6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package. 7. C or perl subroutines supplied by you and linked into this Package shall not be considered part of this Package. 8. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission. 9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. The End ======================================================================== * t/porting/copyright.t ======================================================================== #!perl =head1 NAME copyright.t =head1 DESCRIPTION Tests that the latest copyright years in the top-level README file and the C output match each other. If the test fails, update at least one of README and perl.c so that they match reality. Optionally you can pass the C<--now> option to check they are at the current year. This isn't checked by default, so that it doesn't fail for people working on older releases. It should be run before making a new release. =cut use strict; use Config; BEGIN { require './test.pl' } if ( $Config{usecrosscompile} ) { skip_all( "Not all files are available during cross-compilation" ); } my ($opt) = @ARGV; my $readme_year = readme_year(); my $v_year = v_year(); # Check that both copyright dates are up-to-date, but only if requested, so # that tests still pass for people intentionally working on older versions: if ($opt eq '--now') { my $current_year = (gmtime)[5] + 1900; is $v_year, $current_year, 'perl -v copyright includes current year'; is $readme_year, $current_year, 'README copyright includes current year'; } # Otherwise simply check that the two copyright dates match each other: else { is $readme_year, $v_year, 'README and perl -v copyright dates match'; } done_testing; sub readme_year # returns the latest copyright year from the top-level README file { open my $readme, '<', '../README' or die "Opening README failed: $!"; # The copyright message is the first paragraph: local $/ = ''; my $copyright_msg = <$readme>; my ($year) = $copyright_msg =~ /.*\b(\d{4,})/s or die "Year not found in README copyright message '$copyright_msg'"; $year; } sub v_year # returns the latest copyright year shown in perl -v { my $output = runperl switches => ['-v']; my ($year) = $output =~ /copyright 1987.*\b(\d{4,})/i or die "Copyright statement not found in perl -v output '$output'"; $year; }