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, <jfitz@CPAN.org>

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.