Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re: Splitting multiple commands with regex failure

by bart (Canon)
on Aug 24, 2012 at 08:02 UTC ( #989448=note: print w/replies, xml ) Need Help??

in reply to Splitting multiple commands with regex failure

The reason why
$command =~ m/(!\w+\s?.+?)(?=!\w)/simg;
only returns one result is because you call it in scalar or void context, once. You either have to loop through the parts, or extract them all at once and then loop through each.

The latter approach look easier to me. It can be done by modifying your code like:

my @commands = $command =~ m/(!\w+\s?.+?)(?=!\w)/simg;
Except that you'll miss the last command because there's no "!word" pattern following it. You can fix that by allowing that it's followed by either a new command, or the end of the string.
my @commands = $command =~ m/(!\w+\s?.+?)(?=!\w|\z)/simg;
n.b. The flags /i and /m are superfluous, and 1) there's nothing case sensitive and 2) there are no "^" or "$" meta characters that can change meaning.

Anyway, once you have the list of commands, you can go through them like

foreach my $command (@commands) { ... }
and process them pretty much as you do now; reusing the $command variable name (it's a different variable, regardless) allows to keep the remainder of the code as is.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://989448]
[planetscape]: boo
marto faints

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (8)
As of 2018-04-27 09:42 GMT
Find Nodes?
    Voting Booth?