Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: Regexp substitution using variables

by BillKSmith (Prior)
on Nov 26, 2020 at 15:36 UTC ( #11124265=note: print w/replies, xml ) Need Help??


in reply to Regexp substitution using variables

Here is a solution using eval. Some care is required in using escapes. It works with or without the OO interface.
use strict; use warnings; use Test::More tests => 2; my $pattern = '\Aabc\/'; my $replacement = '123\/'; my $flags = 'i'; my $value = 'ABC/def'; my $expected = '123/def'; my $command = "\$value =~ s/$pattern/$replacement/$flags"; diag $command; eval $command; ok( $value eq $expected, 'use eval directly' ); $value = 'ABC/def'; my $re = new Regexp($pattern); $value = $re->substitute( $value, $replacement, $flags ); ok( $value eq $expected, 'use eval in class' ); package Regexp; sub new { my ( $class, $pattern ) = @_; my $new_object = bless \$pattern, $class; return $new_object; } sub substitute { my ( $self, $value, $replacement, $flags ) = @_; my $pattern = $$self; my $command = "\$value =~ s/$pattern/$replacement/$flags"; main::diag $command; eval $command; return $value; }

OUTPUT:

1..2 # $value =~ s/\Aabc\//123\//i ok 1 - use eval directly # $value =~ s/\Aabc\//123\//i ok 2 - use eval in class
Bill

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11124265]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (2)
As of 2021-04-11 21:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?