package importopt;
use strict;
my %type = (i => "^[+-]?[0-9]+\$",
s => ".",
f => "^[+-]?[0-9.]+(e[+-][0-9]+)?\$",
v => "^\$");
sub import (@) {
no strict 'refs';
shift (@_);
my %arg = @_;
if (!defined ($arg {options})) { return(); }
my $ns = $arg {namespace} || "";
my %opt = %{$arg {options}};
my $args = \@{"$ns\::_args"};
my $err = \${"$ns\::_err"};
foreach my $o (keys (%opt)) {
if ($opt{$o} =~ /^([a-zA-Z])(\[\])?$|^=(.*)/) {
my ($t, $a, $r) = ($1 || "", $2 || "", $3 || "");
if ($r) { # option is an alias for another option
unless ($opt{$r}) {
print STDERR ("$o: reference to nonexistent option $r\n");
$$err = 3;
}
$opt{$o} = $opt{$r};
if (defined (@{"$ns\::$r"})) {
*{"$ns\::$o"} = \@{"$ns\::$r"};
} else {
*{"$ns\::$o"} = \${"$ns\::$r"};
}
} else { # assigning twice to avoid "used only once" warning - p
+erhaps not the cleanest solution
if ($a) {
@{"$ns\::$o"} = ();
@{"$ns\::$o"} = ();
} else {
${"$ns\::$o"} = "";
${"$ns\::$o"} = "";
}
$opt{$o} = $t;
}
}
}
@$args = ();
$$err = 0;
while (@ARGV) {
if ($ARGV[0] =~ /^--?(.*?)(?:=(.*))?$/o) {
my ($n, $v) = ($1, $2);
if (defined ($opt{$n})) {
if (($type{$opt{$n}}) && (($v || "") =~ /$type{$opt{$n}}/i)) {
unless (defined ($v)) { $v = ""; }
if (defined (${"$ns\::$n"})) {
${"$ns\::$n"} = $v;
} else {
push (@{"$ns\::$n"}, $v);
}
} else {
print STDERR ("\"$v\": invalid value for $n ($opt{$n})\n");
$$err = 1;
}
} else {
print STDERR ("$n: unknown option\n");
$$err = 2;
}
} else {
push (@$args, $ARGV[0]);
}
shift (@ARGV);
}
@ARGV = @$args;
}
1;
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|