in reply to Regular Expression Trick

Why use a regex?!?
foreach my $line (@lines) { my ($name, $values) = split '::', $line, 2; # <-- This is the key +- limit your split my @values = split /\|/, $values; # <-- This is not limite +d print "$name\n"; foreach my $value (@values) { my ($color, $number) = split '::', $value; print "\t$color => $number\n"; } print $/; }

Update: Fixed stupidity with '|' character (Thanks, duff!)

------
We are the carpenters and bricklayers of the Information Age.

The idea is a little like C++ templates, except not quite so brain-meltingly complicated. -- TheDamian, Exegesis 6

... strings and arrays will suffice. As they are easily available as native data types in any sane language, ... - blokhead, speaking on evolutionary algorithms

Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.

Replies are listed 'Best First'.
Re: Re: Regular Expression Trick (Don't use one!)
by duff (Parson) on Nov 24, 2003 at 15:08 UTC

    Well, your method uses regular expressions too, they're just arguments to the split() routine. BTW, your second split won't work quite right as | is special in regular expressions and the first argument to split is always a regular expression (except for the one special case of ' ').

    Also, it appears from the problem description that a pipe symbol also separates individual records, so your solution won't quite do the right thing anyway. But, I suspect that the original poster left something out when he said

    The only constant is the placement of the "::" and the "|".
    as it looks like the number of things is also constant (otherwise why use such a restrictive RE?). So, it may be that a plain-jane pattern match with captures is the Right Way for this particular problem.