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; }