> > >> __DATA__
> > >> abc0[1-9].ctr.[pad,spd].set.in
> > >> abc[01-22].ctr.[pad,spd].set.in
> > >> abcL[1,2,3].ctr.[pad,spd].set.in
> > >> abcL[1,2,3].ctr.[pad,spd].set.in
> > >> abcL[1,2,3].ctr.[70,001].set.in
> > >>
> > ---------------------------------------------------
> > >>
> > >> It should work for lists of ranges, and
> ranges of
> > strings as well as
> > >> numbers.
> > >>
> > >> Regarding incorporating into Getopt::Long,
> see the
> > Tips and Tricks
> > >> section of the doco.
>
> Brian,
>
> Can this solution be generalized in a way to support
> --option_value=abc0[1-9].ctr.[pad,spd].set.in,xxx0[2-8].mmm.[rst,spd].afr.org
> types?
> Means those _DATA_ lines all appear in one line separated
> by comma as above (instead of newline separated). Should it
> be efficient to do in the expand_string() or from the main
> while iteration just before calling expand_string.
Replying back with a solution I can see. In case of such option value supplies
it becomes difficlut to do the similar thing as below-
GetOptions ("library=s" => \@libfiles);
@libfiles = split(/,/,join(',',@libfiles));
Such mixed strings can be parsed and returned as a list as below. In our
context, to be called from the main before the while iteration. After that this
list's elems can be passed on to the expand_xxx routine(s) one by one.
# Arg-> A string which is the option value like
#abc0[1-9].ctr.[pad,spd].set.in,xxx0[2-8].mmm.[rst,spd].afr.org,<some more
values...>
sub parse_mix_strings {
my @x = split (//, $_[0]);
my $bracket_close;
my $bracket_open;
my @elems;
my @hstrings;
for (@x) {
push @elems, $_;
if ($_ eq '[') {
$bracket_open = 1;
}
if ($_ eq ']') {
if ($bracket_open == 1) {
$bracket_close = 1;
$bracket_open = 0;
}
}
if ($_ eq ',' && !$bracket_open && $bracket_close) {
$elems[$#elems] =~ s/,//;
push @hstrings, join("",@elems);
@elems = ();
}
}
push @hstrings, join("", @elems);
return@hstrings;
}
On *another note* leveraging use of the Getopts::Long can be this way I think ?
my %list;
GetOptions('list=s%' =>
sub { print "1 = $_[1] 2 = $_[2]\n";
push(@{$list{$_[1]}}, expand_string($_[2])) });
print "Elems = ", scalar @{$list->{add}}, "\n"; # debug
print "> ", @{$list{add}}, "\n"; # debug
<skip>
And program can be called as - <prog_name.pl> --list add=abc0[1-2].src.spd.in
--list add=volvo[1-5].jeep.sch.edu
~TIA
_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs