Ryan Moszynski wrote:
> I need to write some code to allow users to specify which of a whole
> bunch of elements(e.g.512/1024) that they want to view. My idea for
> how to do this was to have them input a semicolon delimited list, for
> example:
>
> 1-10;25;33;100-250
>
>
> i tried using this to check to make sure they input a valid list that
> i can process:
> ###########
> foreach ($temp2 = <>) {
>
> $list1 = $temp2;
You are assigning a scalar from <> to $temp2 and then foreach is assigning
that same value to $_ and then you are assigning that same value to $list1.
How many variables do you need to hold the same value? Perhaps you should use:
while ( my $list1 = <> ) {
> if ($list1 =~ /(\s*\d+;)+/g || $list1 =~ /(\s*\d+;)+/g ) {
>From your example above the pattern matches the three substrings:
1-10;25;33;100-250
^^^+++^^^
And after the match $1 contains '33;'
> print "yay\n";
> }else {print "boo\n";};
>
> #print "...",$list1, "...\n";
>
> }
> ###########
>
> which doesn't work, because as soon as it matches the first time,
> anything goes. How do i get it check for repetition, even though i
> don't know how many repetitions there will be. there could be
> 1,2,3,5, even 10 groupings.
>
> so the pattern isns't hard, there has to be a number, then either a
> '-' or s ';', then repeat or not. the only special case is the first
> one which could just be a single number, or a number '-'number. I
> just don't know how to implement it.
>
> (#(-||;))(#(-||;))(#(-||;))
You probably want:
while ( my $list1 = <> ) {
chomp $list1;
if ( $list1 =~ /^(?:\d[\d;-]*\d|\d)$/;
print "yay\n";
}
else {
print "boo\n";
}
#print "...$list1...\n";
}
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>