Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask

(Challenge)(for new users) Replacing a text

by theroninwins (Friar)
on Sep 24, 2004 at 09:38 UTC ( #393430=perlquestion: print w/replies, xml ) Need Help??

theroninwins has asked for the wisdom of the Perl Monks concerning the following question:

Ok I found this little golf challenge on the net and would like to see how it can be solved.... then again i guess it will be fun for you all to try it.

Write a command-line Perl program to replace every occurance of 'Will Emigh' (exactly like that) with 'YAPH Emigh' in a given file. Hint: look at the -i command-line flag.

Update: thanks to castaway who told me that this here is not difficult I have to mention that this challenge was given by a University to test there best Perl users..... sorry about this I thought I would be more difficult.

the goal is to have the shortest answer.
  • Comment on (Challenge)(for new users) Replacing a text

Replies are listed 'Best First'.
Re: (Challenge)(for new users) Replacing a text
by tachyon (Chancellor) on Sep 24, 2004 at 11:02 UTC
    perl -pi -e 's/Will(?= Emigh)/YAPH/g' file



Re: (Challenge)(for new users) Replacing a text
by borisz (Canon) on Sep 24, 2004 at 14:02 UTC
    36 from me
    perl -i -pe's/Will(?= Emigh)/YAPH/g'

      Does that include the surname in the changed version? Or am I missing something?

        Take a look! Just inspect the source of this page. My solution replace all occurrence of Will Emigh with YAPH Emigh.
Re: (Challenge)(for new users) Replacing a text
by Random_Walk (Prior) on Sep 24, 2004 at 12:18 UTC

    If the phrase split across a line break does not count then it is easy. If it does count then it is rather hard to do in a one liner without being clunky..

    # No worries about line breaks perl -i -pe's/Will Emigh/YAPH Emigh/g' # line breaks concern me but STDOUT will do perl -pe'$a.=$_}{$_=$a;s/Will(\n*) (\n*)Emigh/YAPH\1 \2Emigh/g' # line break concern me and lets put it back in the file perl -ne'BEGIN{$f=$ARGV[0]}$a.=$_}{$_=$a;s/Will(\n*) (\n*)Emigh/YAPH\1 + \2Emigh/g;open F,">$f";print F $_'
    Of course the last only works with one input file, and I got so worried about line breaks I forgot to make it short. (cunning tachyon)


Re: (Challenge)(for new users) Replacing a text
by robharper (Pilgrim) on Sep 24, 2004 at 11:01 UTC

    Well, I'm a newbie, so a rummage through perlrun (thanks for the hint) got me there. I'll hide this behind a readmore, just in case anyone else wants a go...

    Update: not including the filename at the end, 37 chars

      And with -w...

      # perl -wpi -e 's/Will( Emigh)/JAPH\1/g' FileName \1 better written as $1 at -e line 1. #

      The first rule of Perl club is - use Perl
      ith rule of Perl club is - follow rule i - 1 for i > 1

Re: (Challenge)(for new users) Replacing a text
by JediWizard (Deacon) on Sep 24, 2004 at 14:05 UTC
    perl -pi -e 's/Will(\s+Emigh)/YAPH$1/g'

    Is this what you are looking for?

    May the Force be with you
Re: (Challenge)(for new users) Replacing a text
by theroninwins (Friar) on Sep 24, 2004 at 12:17 UTC
    In case you are interested in who has the shortest answer it would be nice if you could write the amount of chars used before the eradmore

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://393430]
Approved by ysth
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (2)
As of 2022-01-22 18:22 GMT
Find Nodes?
    Voting Booth?
    In 2022, my preferred method to securely store passwords is:

    Results (63 votes). Check out past polls.