The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
CHANGELOG

v2.03 (2016/08/09)
==================
--Bad plan for non-IPv6-enabled systems

v2.02 (2016/08/09)
==================
--Typos in documentation (Debial Perl Group)
--Regex improvement for IPv6 addresses (theodore@grcrun11.gr)

v2.01 (2016/06/23)
==================
--Fixed error in prm where files weren't actually deleted if there was a 
  previous error in $! that set ENOENT
--Fixed error in Paranoid::Filesystem where umask was improperly applied
--Fixed error in popen where mode & perms weren't detainted completely
--Adjusted log file test to account for some timing issues on some platforms
--Expanded documentation for Paranoid::Input (documenting known regexes)

v2.00 (2015/10/12)
==================
--Dropped support for Perl 5.6
--Eliminated most instances of croak/die in favor of expecting developers 
  to check the return value
--Complete rewrite of I/O layers and functions
--Added Paranoid::IO
--Added Paranoid::IO::Line
--Moved slurp, sip, etc., to Paranoid::IO::Line
--Rewrote slurp, sip, etc., to provide non-locking versions of functions
--Rewrote slurp, sip, etc., to leverage tuneable performance options from
  Paranoid::IO
--Rewrote and moved Paranoid::Lockfile to Paranoid::IO::Lockfile
--Rewrote Paranoid::Log, Paranoid::Log::Buffer, and Paranoid::Log::File
--Renamed perror to pderror in Paranoid::Debug to avoid name conflict 
  with POSIX
--Added printf functionality to pdebug
--Added platform-agnostic pchomp to Paranoid::Input
--Added passed regex functionality to detaint
--Updated detaint to make target var (third argument) optional
--Updated detaint to work on arrays and hashes as well
--Improved/expanded module unit tests
--Eliminated use of prototypes except where absolutely needed 
  (which eliminates the need to pass by reference for many functions)
--Eliminated pglob from Paranoid::Filesystem.  Globs should be handled
  exclusively through Paranoid::Glob.
--Modified all Paranoid::Filesystem functions to reorder arguments in 
  actual order of importance, making optional arguments truly optional
--Made all Paranoid::Filesystem functions consistent in declaring 
  a filesystem target:  you can pass either a string or a glob, but if
  specifying disparate targets as a list you must pass it as a 
  Paranoid::Glob.
--Removed Paranoid::BerkeleyDB, Paranoid::Log::Syslog, and 
  Paranoid::Log::Email.  Those are now in their own CPAN distributions.
--Added/improved various regexes in Paranoid::Input
--Improved Paranoid::Network's extractIPs to also extract network 
  addresses
--Added deepCmp to the Paranoid::Data module.

v0.36 (2012/09/24)
==================
--Documentation updates
--Added IPv4/6 sorting functions, supporting string, packed, and 
  integer formats
--Fixed MAXIPV6CIDR constant to 128
--Fixed bare words warnings in Perl 5.6 for IPv6 modules

v0.34 (2012/05/29)
==================
--Added Paranoid::Network::IPv4 & Paranoid::Network::IPv6 to provide 
  general protocol-specific functions
--Added ipv4NetConvert function to convert IPv4 IPs to native integer 
  format, and network ranges to base, broadcast, and netmasks in 
  native integer format
--Added ipv6NetConvert function to convert IPv6 IPs to 32bit integer 
  arrays, and network ranges to base, broadcast, and netmasks in 
  32bit integer arrays
--Added ipv4NetIntersect function to test whether two IPv4 IP/network 
  address ranges intersect
--Added ipv6NetIntersect function to test whether two IPv6 IP/network 
  address ranges intersect
--Reworked Paranoid::Network to make use of IPv4/IPv6 modules for 
  use in ipInNetwork
--Added netIntersect to Paranoid::Network, which is an IPv4/IPv6-
  agnostic wrapper for the related functions in the IPv4/IPv6 modules
--Typo fixed in Paranoid::Network::Socket documentation

v0.33 (2011/12/29)
==================
--Detection of imported symbols in the local namespace wasn't working
  correctly.  Fixed.

v0.32 (2011/12/19)
==================
--Added new wrapper module for simpler, more portable IPv6 support and 
  checking (Paranoid::Network::Socket)
--Modified Paranoid::Network to use Paranoid::Network::Socket, and removed 
  Socket, Socket6, and Paranoid::Module dependencies
--Improved Paranoid::Module to reduce the number of detaints, requires, 
  and evals for high frequency calls
--Improved debug output of Paranoid::Module

v0.31 (2011/12/06)
==================
--Use of cached file handles in Paranoid::Lockfile is now fork-safe
--Use of open databases in Paranoid::BerkeleyDB is now fork-safe
--Added lock/unlock methods to Paranoid::BerkeleyDB objects for 
  multiple operations that need to be atomic
--Socket6 is no longer needed or looked for if on Perl 5.14 or newer

v0.30 (2011/08/17)
==================
--Added file permissions support to BerkekelyDB module
--Moved flocking of lockfile to the BerkelelyDB internals
--plock, etc., now returns exit value of flock routine in Lockfile
--Fixed optional prereqs in generated META.yml file
--Added CREDITS file (with recognition for Slaven Rezic (srezic@cpan.org))

v0.29 (2011/04/15)
==================
--Perl-5.6 compatibility fix:  Socket in 5.6 doesn't export AF/PF_INET6, 
  so using Socket6's exclusively
--Perl-5.8 compatibility fix:  Perl's parser chokes on the use of 'bare
  word' imports (i.e., AF_INET), so calling them as subs.
--Optimizing regexes with code-based interpolations of constants
--Misc code adjustments

v0.28 (2011/04/12)
==================
--Updated ipInNetwork in Paranoid::Network to support IPv6 networks &
  addresses
--Added new function extractIPs to Paranoid::Network which can extract IPv4/
  IPv6 addresses from arbitrary text
--Minor tweaks to some regexes in Paranoid::Input

v0.27 (2010/06/03)
==================
--Added the ability to restrict level of indentation for pdebug messages in
  Paranoid::Debug
--Fixed pchmod so that relative permissions applied to a symlink doesn't use 
  the symlink's permissions to apply, but rather the target
--Rewrote Paranoid::Log's internals
--Added '!' as a supported scope for logging facilities
--Added more severity level aliases

v0.26 (2010/05/08)
==================
--Changed daemonize's behavior:  reopening STD* on /dev/null and chdir'ing
  to /.  Hindsight's 20/20, eh?
--Made backup/restore of SIGCHLD in pcapture dependent upon an actual
  sighandler being installed

v0.25 (2010/05/05)
==================
--Fixed tail's behavior to be consistent with documentation
--Fixed tail/sip to preserve file position and buffers when 
  reopening the file in children
--Fixed tail functionality to handle deleted, truncated, moved, or replaced
  files
--Expanded tail/sip documentation
--Added daemonize function to Paranoid::Process

v0.24 (2010/04/15)
==================

--Added Paranoid::Glob
--Major cleanup to satisfy PerlCritic and PerlTidy
--Fixed pmkdir to allow permissions that include sticky bits, etc.
--Updated filesystem functions to use Paranoid::Glob instead of pglob
--pglob is now just a wrapper around Paranoid::Glob as well
--Removed excessive external locking in Paranoid::BerkeleyDB -- hopefully
  internal CDB locking mechanism is robust enough
--Made user input validation on Paranoid::Filesystem non-fatal (handing in
  undefs as filenames, etc.)
--Removed MAXLINKS in Paranoid::Filesystem


v0.23  (2009/03/17)
===================
--Fixed tests that weren't fully supported on all platforms
--Commented out pchown tests which were failing to due to a bug
  in Perl.  A patch has been submitted to bleadperl to address it.
--Added manual detaint of TERM environment variable in psecureEnv
--Updated documentation to include Paranoid::Data
--Made getKeys in Paranoid::BerkeleyDB use finer grained locking
--Added Paranoid::Data
--Added sip, tail, and closeFile functions
--Fixed bug in preadDir that added undef records while filtering out
  symlinks (bug introduced in v0.21)

v0.21  (2009/03/04)
===================
--Massive reformat with Perl::Tidy
--Massive rewrite to accommodate Perl::Critic
--Converted all tests to use Test::More
--Converted licensing to be same as Perl
--Documentation updates
--Updated to only support Perl 5.6 or better
--Fixed bug in pcapture to return appropriate return values
--Fixed bug in pchmodR/pchownR to return correct RV (false)
  with non-existant targets
--Added Paranoid::Args

v0.20  (2008/04/28)
===================
--Misc. POD updates

Paranoid::Filesystem:
--Fixed bug in the recursion wrapper where there were errors in certain
  modes when called on a hierarchy that included an empty subdirectory
--Fixed bug in pchmod where subtracting perms (i.e., o-w) wouldn't result
  in the correct permissions
--Added automatic argument detainting for most functions
--Replaced the horrible manual kludge of pglob with an intelligent wrapper for
  the shell glob
--ptouch now supports full shell globbing, even for non-existent files.
--ptouchR can now create files, but won't automatically create subdirectories

Paranoid::Input:
--Added automatic filename detainting for slurp
--Updated filename/fileglob regexes (expanded allowed characters)

Paranoid::Log & Paranoid::Module:
--Added automatic detainting of module names

Paranoid::Log::File:
--Added automatic detainting of log filenames

v0.19  (2008/04/28)
===================
--Made the croak statements more internally consistent
--Made releasing the lockfiles and db entries in BerkeleyDB more explicit
--Updated filename regex in Input
--Added study to stringMatch
--Added pcapture function to Process

v0.18  (2008/02/29)
===================
--Fixed mail headers for Email module when there are multiple recipients
--Fixed tests to account for FreeBSD's comments in /etc/passwd, /etc/group

v0.17  (2008/02/28)
===================
--Made more tests conditional to account for more types of
  system configurations
--Made error checking more explicit for e-mail logging, and storing
  those errors in Paranoid::ERROR

v0.16  (2008/02/27)
===================
--Fixed conditional tests
--Added new function to Paranoid::Debug (psetDebug)

v0.15  (2008/02/26)
===================
--Initial public release