Often text substitution is performed using the s/// operator (see perlop). E.g.
my $text = "The cow jumped over the moon"; $text =~ s/(\w+\s+)jumped/$1tripped/;
One might often consider a more natural way of expressing this as:
but of course this is not possible in Perl 5.if ( $text =~ m/cow\s+(jumped)\s+over/ ) { $1 = "tripped"; }
In fact it's not been uncommon to be finding myself wishing I could express such if match-replace expressions, not least because I might have other triggers that need to occur in the event that the match was made, e.g.:
rather thanif ( $text =~ m/cow\s+(\w+)\s+over/ ) { do_action( $1 ); $1 = calculate_new_action( $1 ); }
if ( $text =~ m/cow\s+(\w+)\s+over/ ) { do_action( $1 ); my $new_action = calculate_new_action( $1 ); $text =~ s/(cow\s+)(\w+)(\s+over)/$1$new_action$3/; }
I wonder if others consider allowing the captured variables to be modified as possible and/or pragmatic?
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Manipulating the Capture(s) of Regular Expressions
by ysth (Canon) on Jan 12, 2009 at 04:58 UTC | |
by ikegami (Patriarch) on Jan 12, 2009 at 05:18 UTC | |
by missingthepoint (Friar) on Jan 12, 2009 at 06:12 UTC | |
by monarch (Priest) on Jan 12, 2009 at 05:46 UTC | |
Re: Manipulating the Capture(s) of Regular Expressions
by JavaFan (Canon) on Jan 12, 2009 at 09:59 UTC | |
Re: Manipulating the Capture(s) of Regular Expressions
by Jenda (Abbot) on Jan 12, 2009 at 15:09 UTC |