NAME Getargs::Original - remember the original arguments a program was invoked with SYNOPSIS In your main program: use Getargs::Original; Later on somewhere else require Getargs::Original; exec @{ Getargs::Original->args }; DESCRIPTION Common behaviour for a daemon is to re-exec itself upon receipt of a signal (typically SIGHUP). It is also common to use modules like Getopt::Long to parse command line arguments when the program first starts. To achieve both of these tasks one must store the original contents of $0 and @ARGV, as argument processing usually removes elements from @ARGV. Getargs::Original simplifies this task by storing the contents of $0 and @ARGV when it is first used in a program. Later on when the original arguments are required, a singleton instance of Getargs::Original can be used to retrieve the arguments. Getargs::Original is not meant to be instantiated as an object. All of the methods are called as class methods. RESOLVING THE PATH OF $0 In normal operation, the path of $0 is made absolute using "File::Spec->rel2abs()". Sometimes it is desireable for the canonical name of the program run to be rooted in a particular directory. Take for example a scenario where the canonical path to programs is /opt/foo/bin/ but /opt/foo/ is a symlink to another filesystem which can differ from machine to machine. When the full path to $0 is resolved, the path will be the true filesystem and not /opt/foo/. This distinction may not matter to most, but if system monitoring tools are looking for a program to be running with a specific path then things will break. /opt/foo/bin/mumble.pl is not the same as /.d1/bin/mumble.pl after all. To address this, Getargs::Original provides a way to specify the base directory used for resolution of $0. By passing a directory to the base_dir method the resolved path to $0 will be calculated relative to that directory. METHODS argv() Returns the original value of $0 and @ARGV as a list reference in scalar context and a list in array context. If the base_dir() method has been called then the first element of the list returned will be a relative path rooted in the directory that base_dir() was called with. If base_dir() has not been called then the first element of the list will be the absolute path to $0. Resolution of $0 is performed the first time that the argv() method (or the shortcuts described below) are called. As such if relative resolution is desired then the base_dir() method must be called prior to the first use of argv(), program() or args(). program() Returns the original value of $0. A shortcut to saying $originalargs->argv->[0]; args() Returns the original value of @ARGV. A shortcut to saying my $numargs = $originalargs->_argv_count; $originalargs->argv->[1..$numargs] As with argv() arguments are returned as a list or list reference depending on calling context. base_dir() Sets or gets the base directory used for resolution of $0. See "RESOLVING THE PATH OF $0" above for more detail. Returns the previous base directory. resolved() Sets or gets the flag indicating whether $0 has been resolved. Returns the previous state of the flag. Using this method as a set accessor should only be required if the argv() method or one of it's shortcuts was inadvertently called prior to the base_dir() method being called. AUTHOR James FitzGibbon, COPYRIGHT Copyright (c) 2003 James FitzGibbon. All Rights Reserved. This module is free software; you may use it under the same terms as Perl itself.