Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

Replace In a Single Line

by anshumangoyal (Scribe)
on Jan 17, 2013 at 08:25 UTC ( #1013726=perlquestion: print w/replies, xml ) Need Help??
anshumangoyal has asked for the wisdom of the Perl Monks concerning the following question:

I have a Variable
$var = "GoodMan"
I want to replace "oo" and assign it to a variable $var2 in a single line. With Multiple Lines I can do like this:
$var1 = $var; $var1 =~ s/oo//gi;
How to do this in a line, so that $var is not changed and $var1 get's changed variable.

Replies are listed 'Best First'.
Re: Replace In a Single Line
by tobyink (Abbot) on Jan 17, 2013 at 08:33 UTC

    In recent versions of Perl, you can do:

    $var1 = ($var =~ s/oo//gir);

    In pretty much any version of Perl, you can do:

    ($var1 = $var) =~ s/oo//gi;

    Update: the second method is about 35% faster according to my benchmarking. The first one is sometimes more elegant - especially when the variable you're operating on (and don't want to be changed) is $_ such as this map block:

    my @without_oo = map { s/oo//rig } @with_oo; # traditional version: my @without_oo = map { (my $x = $_) =~ s/oo//ig; $x } @with_oo;

    But in your original example, neither of the two solutions I presented above seems more elegant than the other, so I'd prefer the faster one.

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
Re: Replace In a Single Line
by 7stud (Deacon) on Jan 17, 2013 at 11:04 UTC
    use strict; use warnings; use 5.012; my $var = "GoodMan"; my $result = join "", (sprintf "%s", $var) =~ m/(.*?) oo (.*)/xms; say $var; say $result; --output:-- GoodMan GdMan

    A ridiculous question deserves a ridiculous answer.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1013726]
Approved by tobyink
Front-paged by Corion
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (5)
As of 2018-05-23 17:45 GMT
Find Nodes?
    Voting Booth?