Hello my good Monks. Based on a question in irc.freenode.net/#perl, I created a simple pattern matching routine. It takes patterns with names match tokens between curly brackets, such as {foo}/{bar}-{baz}, and the returns a hash containing the token names as hash keys, and the matched strings as values.
It is fairly trivial, and the code to implement it is quite simple. But before I blow this away, I was curious if there were any CPAN modules to accomplish the same task. I would be surprised if there weren't, but if not, perhaps I should make one? It seems vaguely useful, and might deserve somewhere to live. Any thoughts welcomed.
Here is the code as it currently stands:
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; print Dumper({ named_match("{foo} {bar}", "one two" ) }); print Dumper({ named_match("{baz} - {qux}", "three - four - five") }); sub named_match { my ($pattern, $string) = @_; my @names; for my $token ($pattern =~ /{([^}]+)}/g) { $token = quotemeta $token; $pattern =~ s/{$token}/(.*)/; push @names, $token; } my %matches; @matches{@names} = $string =~ /$pattern/; return %matches; }
Update: fixed an error caused by last-minute changes. Thanks to ccn.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: RFC: named pattern match tokens
by diotalevi (Canon) on Oct 04, 2004 at 20:04 UTC | |
by revdiablo (Prior) on Oct 04, 2004 at 21:53 UTC | |
by Jenda (Abbot) on Oct 04, 2004 at 22:46 UTC | |
by diotalevi (Canon) on Oct 04, 2004 at 23:10 UTC | |
by diotalevi (Canon) on Oct 04, 2004 at 22:12 UTC | |
|
Re: RFC: named pattern match tokens
by hardburn (Abbot) on Oct 04, 2004 at 20:09 UTC | |
by revdiablo (Prior) on Oct 04, 2004 at 21:23 UTC | |
by SpanishInquisition (Pilgrim) on Oct 05, 2004 at 16:36 UTC | |
by ambrus (Abbot) on Oct 05, 2004 at 16:52 UTC | |
by revdiablo (Prior) on Oct 05, 2004 at 19:59 UTC | |
by revdiablo (Prior) on Oct 05, 2004 at 19:53 UTC |