in reply to RFC: named pattern match tokens
You might also like to look at extending the regexp syntax. This adds the new ( ... capture ... )\C{name} element to regular expression syntax. It copies the contents of the last closed capture into the scalar variable named 'name'. So /( [\dA-F]+ ) \C{ hex }/x would copy a hex string to the $hex variable.
use Regexp::NamedCaptures; $_ = "three - four - five"; /(\w+)\C{baz} - (\w+)\C{qux}/g; print "baz=$baz, qux=$qux\n";
Regexp::NamedCaptures
Updated: Changed the \N{ ... } to \C{ ... } to not conflict with named characters.
Also changed the return value of convert() so it returns the altered expression instead of the boolean result of the s///.
package Regexp::NamedCaptures; use overload; sub import { shift; die "No argument allowed to " . __PACKAGE__ . "::import" if @_; overload::constant qr => \ &convert; } sub convert { my $re = shift; $re =~ s( \\ ( \\ | C\{ (?>\s*) ((?>\w+)) (?>\s*) \} ) ) { defined $2 ? "(?{\$$2=\$^N})" : "\\" }xeg; $re; } 1;
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: RFC: named pattern match tokens
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 |
In Section
Meditations