Getopt-ArgvFile
view release on metacpan or search on metacpan
ArgvFile.pm view on Meta::CPAN
differently if just started in its installation path. Because a user might
be more aware of configuration editing then of the current path, I choose
the current implementation, but this preceedence might become configurable
in a future version.
If there is no I<HOME> environment variable, the I<home> setting takes no effect
to avoid trouble accessing the root directory.
B<Cascades>
The function supports multi-level (or so called I<cascaded>) option files.
If a filename in an option file hint starts with a "@" again, this complete
name is the resolution written back to @ARGV - assuming there will be
another utility reading option files.
Examples:
@rfile rfile will be opened, its contents is
made part of @ARGV.
@@rfile cascade: "@rfile" is written back to
@ARGV assuming that there is a subsequent
tool called by the script to which this
hint will be passed to solve it by an own
call of argvFile().
The number of cascaded hints is unlimited.
B<Processing an alternative array>
Although the function was designed to process @ARGV, it is possible to
process another array as well if you prefer. To do this, simply pass
a I<reference> to this array by parameter B<array>.
Examples:
argvFile() # processes @ARGV;
argvFile(array=>\@options); # processes @options;
ArgvFile.pm view on Meta::CPAN
prefixes C<->, C<--> and C<+>.
Once an option is declared, it I<can> replace a prefix. (Prefixes remain
in action as well.)
# with -options declared to be a file option,
# these sequences are equivalent
@file
-options file
# five equivalent cascades
@@@@file
-options @@@file
-options -options @@file
-options -options -options @file
-options -options -options -options file
Please note that prefixes are attached to the filename with no spaces
in between, while the option declared via -fileOption is separated from
the filename by whitespace, as for normal options.
ArgvFile.pm view on Meta::CPAN
for ($i=0; $i<@$arrayRef; $i++)
{
if ($nr{$i})
{
# an option file - handle it
# remove the option hint
$arrayRef->[$i]=~s/$prefix//;
# if there is still an option file hint in the name of the file,
# this is a cascaded hint - insert it with a special temporary
# hint (has to be different from $prefix to avoid a subsequent solution
# by this loop)
push(@c, $arrayRef->[$i]), next if $arrayRef->[$i]=~s/^$prefix/$maskString/;
# skip nonexistent or recursively nested files
next if !-e $arrayRef->[$i] || -d _ || $rfiles{$casesensitiveFilenames ? $arrayRef->[$i] : lc($arrayRef->[$i])};
# store filename to avoid recursion
$rfiles{$casesensitiveFilenames ? $arrayRef->[$i] : lc($arrayRef->[$i])}=1;
ArgvFile.pm view on Meta::CPAN
}
}
# substitute file options by prefixes, if necessary
_fileOptions2prefixes($fileOption, $prefix, \@c) if $fileOption;
# replace original array by expanded array
@$arrayRef=@c;
}
# reset hint character in cascaded hints to $prefix
@$arrayRef=map {s/^$maskString/$prefix/; $_} @$arrayRef;
}
# allow one line invokation via "use", but make sure to keep backwards compatibility to
# the traditional interface inherited from Exporter
sub import
{
# check if the caller intended to import symbols
# (till 1.06, import() was inherited from Exporter and the only symbol to import was argvFile())
( run in 0.855 second using v1.01-cache-2.11-cpan-49f99fa48dc )