in reply to regex question - dynamically address captures
The following may be what you want. Note the @captures = map... line in particular.
use warnings; use strict; use Data::Dump::Streamer; my %patterns = ( pattern1 => { 'regex' => qr'^/section/([\d]{1,8})/?$', 'function' => 'do__section', 'id_fields' => ['section_id'] }, pattern2 => { 'regex' => qr'^/para/([\d]{1,8})/?$', 'function' => 'do__para', 'id_fields' => ['para_id'] } ); my @lines = ('/section/123', '/para/256'); for my $line (@lines) { for my $key (keys %patterns) { next if $line !~ /$patterns{$key}->{regex}/; my @captures = map {substr $line, $-[$_], $+[$_] - $-[$_] + 1} 1.. +$#-; my %args; @args{@{$patterns{$key}->{'id_fields'}}} = @captures; print "Dump for $key:\n"; Dump (\%args); } }
Prints:
Dump for pattern1: $HASH1 = { section_id => 123 }; Dump for pattern2: $HASH1 = { para_id => 256 };
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: regex question - dynamically address captures
by ikegami (Patriarch) on Feb 21, 2006 at 23:15 UTC | |
by GrandFather (Saint) on Feb 21, 2006 at 23:22 UTC | |
by ikegami (Patriarch) on Feb 21, 2006 at 23:28 UTC | |
by nmerriweather (Friar) on Feb 21, 2006 at 23:23 UTC | |
by jkeenan1 (Deacon) on Jul 19, 2006 at 03:15 UTC | |
by ikegami (Patriarch) on Jul 19, 2006 at 04:57 UTC | |
by jkeenan1 (Deacon) on Jul 20, 2006 at 01:11 UTC | |
by jkeenan1 (Deacon) on Jul 09, 2006 at 00:54 UTC |