Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: Re: Re: $1 in variable regex replacement string

by dvergin (Monsignor)
on Feb 12, 2003 at 19:42 UTC ( [id://234811]=note: print w/replies, xml ) Need Help??


in reply to Re: Re: $1 in variable regex replacement string
in thread $1 in variable regex replacement string

tachyon wrote:
there are many ways to tackle the problem and this way has dubious value IMHO

You will have an easy time convincing me of this. As I continue to muddle around with this, my current approach does have the feel of a mis-guided solution strategy. Problem is, this is the only entry door I can see at present and once I get in the room it seems to be full of only less-than-desirable options.

So let me back off a bit and state the problem in a more general way.

Given:
  $str (some arbitrary string)
  $pat (a string to be used as a regex pattern)
  $repl (a string to be used as a regex RHS and
        which may contain $1, $2...)

Can I / How can I perform the indicated regex substitution on $str?

At this point in this project I *do* have control over the inputs and even the 'API' for the code that calls this routine. But I am hard put to imagine another way of specifying and requesting this kind of functionality.

But try me... I'm open to suggestions. I would dearly love to find an elegant way of doing this.

  • Comment on Re: Re: Re: $1 in variable regex replacement string

Replies are listed 'Best First'.
Re: Re: Re: Re: $1 in variable regex replacement string
by tachyon (Chancellor) on Feb 12, 2003 at 21:12 UTC

    Presumably you want to do something like this example. You would not want stuff passed in $repl like$repl = q/";`arbitrary_command`;$whoops="/ because that will run an arbitrary command unless you are careful. So the answer is you can do it but you probably should not. That said we can sanitise $repl with the substitution shown. Comment it out and uncomment the hack to see the problem.

    my $str = 'abcadefaghi'; my $pat = '(a.)'; my $repl = '$1 '; #$repl = q/";`arbitrary_command`;$whoops="/; $str = munge_string($str, $pat, $repl); sub munge_string { my ( $str, $pat, $repl ) = @_; # make $repl safe to eval $repl =~ s/([^A-Za-z0-9\$])/\\$1/g; $repl = '"' . $repl . '"'; $str =~ s/$pat/$repl/eeg; return $str; } print "$str\n";

    I just don't see the point. If it is your API you are just digging a big hole for yourself I reckon. If you could outline the problem space it would be easier to suggest other methods. It seems you want to abstract the regex from the core code. This seems like it might be a case of one level of abstraction too many.

    cheers

    tachyon

    s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (3)
As of 2024-04-24 19:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found