in reply to Re: Confessions of a back-alley map abuser
in thread Confessions of a back-alley map abuser

I like to use "for" for that kind of thing:

my $sBegin = "hello world"; my $sEnd = $sBegin; for ($sEnd) { s/hello/goodbye/g; s/world/todo el mondo/; uc; }; print $sEnd;

Replies are listed 'Best First'.
Re^3: Confessions of a back-alley map abuser
by Sidhekin (Priest) on Dec 18, 2004 at 19:40 UTC

    I like to use "for" for that kind of thing

    Me too, but I have found do{} is more readable. For one thing, it saves you from your bug: Your version throws away the uppercase string and so prints just "goodbye todo el mondo". My version would look like this:

    my $sBegin = "hello world"; my $sEnd; for ($sEnd = $sBegin) { s/hello/goodbye/g; s/world/todo el mondo/; $_ = uc; }; print $sEnd;

    TIMTOWTDI, but I think do{} is the more readable here.

    Update: I trust you. No problem. But the bug still illustrates how the void context makes the for loop slightly less readable here. Such a bug (update: or the more likely opposite bug) could not as easily occur in the do{} block.

    print "Just another Perl ${\(trickster and hacker)},"
    The Sidhekin proves Sidhe did it!

      Oops, thanks! I didn't test the code, of course. It was just a quick cut-n-paste recast as a for. But trust me, when I do it in practice it works fine. ;-)