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.
In reply to RFC: named pattern match tokens by revdiablo
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |