Revision history for Perl extension Argv. 0.01 Thu May 27 14:32:34 1999 - original version; created by h2xs 1.18 0.25 Tue Nov 2 22:42:50 EST 1999 - first CPAN release. NKNTW 0.26 Tue Nov 9 19:36:17 EST 1999 - Fix Windows autoquoting for paths ending in \ 0.27 Thu Nov 11 09:37:06 EST 1999 - Fix Windows autoquoting again - turn embedded newlines back into a literal "\n" so the &*@# cmd shell can turn it BACK. 0.28 Thu Nov 11 22:09:44 EST 1999 - Bugfix: if ->qx has options but no args - Removed unused ->script method. 0.29 Sun Nov 14 12:55:37 EST 1999 - added Argv->count class method for metrics collection 0.30 Mon Nov 15 12:05:47 EST 1999 - Bugfix: change shell quoting on Unix to be closer to Win32 (quote embedded double-quotes, then double-quote the entire word, rather than try to use single quotes on Unix and the above on Windows). 0.32 Tue Nov 16 16:01:56 EST 1999 - Added an integration with IPC::ChildSafe. This allows a user to request that commands be run in the context of a single co-process rather than doing a new fork/exec for each one. 0.33 Fri Nov 19 11:45:44 EST 1999 - Fixed a bug in Argv->quote method. 0.34 Mon Nov 29 13:03:31 EST 1999 - Lots of POD work. - Implemented inheritance of attributes when constructor used as an instance method. - Renamed exported qxargv() to qv(). - Modified many methods to return the object in 'set' mode. 0.35 Wed Dec 8 23:22:54 EST 1999 - Some cosmetic work. - Improved integration with IPC::ChildSafe with quoting fixes. 0.39 Thu Dec 16 21:58:20 EST 1999 - Renamed 'ipc' method to 'childsafe'. - Renamed 'dfltopts' method to 'dfltsets'. - Added 'stdopts' method. - Allow config data to be specified for methods calling Getopt::Long::GetOptions(). 0.40 Fri Dec 17 20:25:13 EST 1999 - Added 'autofail' method. - Cleaned up PODs some. - Reformatted to 4-space indenting. 0.41 Wed Jan 5 12:31:18 EST 2000 - Renamed 'nativepath' to 'pathnorm'. - Worked on 'stdopts' method. - Removed overcomplicated 'dbglevel' stuff. 0.42 Sun Jan 9 18:15:39 EST 2000 - POD work - Fixed quoting bug. - Defer errors to caller in ipc_childsafe call. 0.45 Fri Jan 14 21:42:12 EST 2000 - Added anon-hash metthod of setting attrs - Implemented non-sticky context-sensitive attrs. - Implemented ->stdout(2) and ->stderr(1), etc. - Renamed stdopts method to attropts. - push(@EXPORT_OK, MSWIN) constant. 0.46 Sun Jan 16 06:18:11 EST 2000 - bugfix in functional interface 0.47 Tue Jan 18 21:09:41 EST 2000 - Regularized handling of qx/qv/ccqv/etc 0.48 Sun Jan 30 22:40:17 EST 2000 - Renamed 'systemxargs' to 'syxargs'. - Renamed 'pathnorm' to 'inpathnorm', and added an 'outpathnorm' method as well. - Renamed 'cmd' method to 'argv' (to avoid confusion with $self->ipc_cleartool->cmd() method. - Added ->syfail and ->qxfail attributes. - Allow hashref attr specifiers to have a leading '-'. 0.49 Wed Feb 2 14:56:04 EST 2000 - Bugfix - qx() was overwriting stderr output with stdout when both were redirected, in ipc_childsafe mode. - Added an "exception-handling" capability. The autofail attr can be a code-ref indicating a function to call on failure, or an array-ref of which the first element is a code-ref as above and the remainder constitutes the arguments to pass to said sub. - Allow constructor to be called as ->clone to clone an existing instance. - Reworked ipc_childsafe to only allow derived classes access to the coprocess (since the base class cannot directly support it). - Reworked attropts() to allow prefix_pattern to be specified. - Normalised -dbglevel output somewhat - made normal mode show returned data at dbglevel >= 2 since ipc mode does so. 0.50 Wed Feb 16 11:52:40 EST 2000 - Added experimental AUTOLOAD capability, analogous to "perldoc Shell". 0.51 Mon Apr 3 17:26:46 EDT 2000 - The 'quote' method now returns $self instead of @_. This is to emphasize the fact that it modifies @_ in place. - Propagate class attributes into the env to set the defaults for child processes. - Cleaned up issues related to Getopt::Long::Configure and default settings. 0.54 Thu Aug 10 11:54:14 EDT 2000 - Compatibility for old Data::Dumper builds without Dumpxs. 0.55 Thu Nov 30 15:14:29 EST 2000 - Bugfix for case where ->exec returns on UNIX. - Bugfix: previous versions silently removed '--' from @ARGV. - POD work. ---------------------------------------------------------------------------- 1.00 Wed Aug 29 00:10:24 EDT 2001 = Test Env: Solaris 8/Win2K SP2/Perl 5.6/CC 4.2 - Fixed a bug in the interaction with IPC::ChildSafe; the status from system() wasn't being correctly returned in coprocess mode. - Added a ->quiet() attribute which suppresses stdout from system and exec (but not qx). - Minor cosmetic fix: in verbose mode, quote whitespace so the resulting cmdline can be pasted back into a shell. - Insist on a modern (>=2.23) Getopt::Long for simplicity. - Bugfixes contributed by Silvio Wanka of alcatel.de. - Try to use Clone or Storable modules for cloning if present; they're significantly faster. (Then removed Clone again for now, it's not ready for prime time). - Minor new feature: the ->autofail exception-handling mechanism now allows a scalar-ref; the scalar will be incremented for each execution error. - Improved verbosity (dbglevel=1) to show when cmd lines are split up for syxargs() reasons. - Bugfix in ->summary class method. - Recognizing that the API has reached maturity, I've moved the version to indicate a released state. I'll try hard to stay compatible with 1.00 in subsequent releases. 1.01 Mon Sep 3 21:53:25 EDT 2001 - More cleanups of ->summary class method; try to make invocation and argument counts agree better. - Bugfix in ->argv method. 1.02 Tue Sep 25 10:17:42 EDT 2001 - *COMPATIBILITY ALERT*: The ->inpathnorm attribute now defaults to OFF on Windows (it's always been a no-op on UNIX so the only effect is on Windows). In previous versions the default was ON. Programs which depended on this default must now set it explicitly. - Reworked ->outpathnorm to be overrideable. This does not change any semantics in Argv per se. 1.03 Wed Oct 3 11:56:58 EDT 2001 - Added ->envp method to specify a custom environment for the child process. - Added ->dump method (debugging aid). - Defined a meaning for dbglevel=2; it now shows the $? from each child process. - Defined a meaning for dbglevel=3; it now invokes ->dump before each execution. 1.04 Thu Nov 1 10:52:36 EST 2001 - Clean up and release 1.03 work (1.03 was never released). 1.05 Tue Nov 20 21:48:36 EST 2001 - Minor cleanup work. - bugfix in ->warning method - bugfix in interface to IPC::ChildSafe 1.06 Fri Dec 21 07:54:24 EST 2001 - bugfix to let subclasses interface with their own in-process implementations. 1.07 Sun Jan 13 22:23:38 EST 2002 - Cosmetic improvements to -> envp work (tighter scoping, no semantic effect). - Cosmetic improvement to dbglevel=1 verbosity quoting. - Fixed ->exec return codes on Windows ($?<<=8). 1.08 Tue Mar 5 14:37:51 EST 2002 - Added ->readonly attribute. Helpful with ->noexec (see). 1.09 Wed May 8 17:13:42 EDT 2002 - Changed autoquoting strategy to always respect single quotes on 'arg', escape "arg" to look like \"arg\", and allow a particular arg to opt out of autoquoting by prepending "^" as in ^arg. 1.10 Tue Jul 22 10:35:41 EDT 2003 - Fixed contact data. 1.11 Wed Dec 31 12:37:08 EST 2003 - Allow negative arguments to ->qxargs() and ->syxargs() to specify a maximum command-line length. As a special case, a value of -1 means to look up and use ARG_MAX. Also, the default was changed to -1. Thus cmd lines are now limited by length according to the OS limit instead of an arbitrary number. This was suggested by, and a sample implementation was provided by, Alex Harper of Digital Motorworks. - Bugfix: chunked qx() would continue past a failed chunk and lose $?. It still continues but now remembers $?. - Feature: the ->argv() method now returns the entire command line when called with no arguments. 1.12 Thu Jan 29 12:31:07 EST 2004 - Added ->lastresults method for use in exception handlers. 1.13 Fri Oct 29 17:57:01 EDT 2004 - Fixed a typo reported by Leo Sager which caused internal and external redirections to confuse each other. 1.14 Mon Mar 14 11:13:42 EST 2005 - Allow ->stdout() and ->stderr() to specify any EXPR which is valid to open(), e.g. ->stdout(">>/tmp/foo"); - Show redirections in verbosity output. - Previously, when std{in,out,err} were turned off, this was done by closing the handle. Now, the handle is connected to the null device (/dev/null or NUL) instead because closing these standard descriptors can raise complications. - Various other cleanups vis-a-vis the -std*() redirection methods. - Improve ->inpathnorm() reliability. - Fix to autoquoting: on windows globbing is not handled by the shell so we let '*' go by. 1.15 Tue Mar 29 23:47:15 EST 2005 - Show file redirections using \ on Windows. - Removed CORE:: from exec functions: unnecessarily constrictive for users. - Bugfix: enhanced redirection code was not working right for ->qx (reported by Andrew Maguire). - Renamed the ->dump method to ->objdump to avoid name conflicts. I doubt anyone ever used this explicitly (if I'm wrong, sorry!). 1.16 Tue Oct 24 14:40:00 EDT 2006 - Accepted patches contributed by Kenneth Olving implementing the new ->pipe method and surrounding support code for Win32: - Ensure cloning code also 'clones' the pipe callback - Added code in Makefile.PL to tell user about optional modules useful for the ->pipe method on Win32. - Updated docs and fixed some typos. 1.17 Fri Oct 27 10:29:33 EDT 2006 - Minor documentation tweaks. 1.18 Fri Oct 27 10:39:50 EDT 2006 - Fixed a minor POD typo. 1.19 Wed Dec 27 11:25:31 EST 2006 - No change - dealing with CPAN versioning mistake. 1.20 Tue Apr 24 08:55:06 EDT 2007 - Unreleased. - Minor bugfix from Kenneth Olving for ->pipe method on Win32. - Fix POD formatting bug. 1.21 Thu Jul 26 07:12:03 EDT 2007 - A little more POD work. 1.22 Thu Aug 2 16:02:34 EDT 2007 - Feature: "Inherit class attributes from subclass class attributes" added to support new work in ClearCase::Argv. 1.23 Fri Sep 5 10:21:25 BST 2008 - Fix for ClearCase::Argv in fork mode: let double-quotes pass through in unix (revert part of change in 1.09) 1.24 Sat Feb 21 19:54:58 EST 2009 - Fixed an uninitialized-value warning.