Philip Newton wrote:
> 
> What I use in a script of mine is:
> 
>     while ($string =~ /(\d\d)-(\d\d)-(\d\d)/g) {
>         ($mo, $dy, $yr) = ($1, $2, $3);
>     }
> 
> Although this, of course, also requires that you know the number of
> backreferences. Nicer would be to be able to assign from @matchdata or
> something like that :)
> 
I mentioned in another thread the concept (stolen from SNOBOL) of a 
conditional function call, post-match. Winging a syntax which I am 
absolutely NOT committed to:

   my @list;
   my $capture = sub {push @list, makedate(\1,\2,\3);};
   $string =~ /(\d\d)-(\d\d)-(\d\d)?&$capture/g;

In a regular, non-global match, the anonymous sub gets called if the 
match preceeding it succeeds. If it fails, the function doesn't get 
called.  In a "/g", it gets called *each time* a global match succeeds; 
you get an implicit "while" over the string.

This is NOT completely thought out yet; I've been mulling it over as a 
possible RFC. I'm not happy with this syntax as it stands - there's too 
much possible action at a distance. I'm not seeing a nicely-parseable, 
easily-understandable way of doing this. Would this be a possible:

   $string =~ /(\d\d)-(\d\d)-(\d\d)?&{push @list,makedate(\1,\2,\3)}/g;

Or is that just too ugly and nasty for words?

  --- Joe M.

Reply via email to