in reply to Crafting a regex for a split() function...

You can do it in one with:

use strict; use warnings; use constant TO_US => 0.127; while (<DATA>) { s/(\d+.\d+)/convert($1)/eg; print; } sub convert { return sprintf "%.2f", $_[0] * TO_US; } __DATA__ Hello all! Today I bought breakfast for 02.50 and lunch for 10.20 Di +nner was a real splurge at 21.00.

Prints:

Hello all! Today I bought breakfast for 0.32 and lunch for 1.30 Dinn +er was a real splurge at 2.67.

DWIM is Perl's answer to Gödel

Replies are listed 'Best First'.
Re^2: Crafting a regex for a split() function...
by chinamox (Scribe) on Nov 23, 2006 at 01:41 UTC

    I didn't even know you could call a subroutine from inside a regex. Wow, this crazy language gets cooler and cooler...

    Just to be certain, the value for the match of /(\d+.\d+)/ is $1 and is then carried into sub convert as the value $_ ?

    Thank you very much!

    -mox

      I didn't even know you could call a subroutine from inside a regex.

      The replace expression of the substitution operator is treated as Perl code rather than a string literal when the e modifier is used.

      Ref: perlop

      Just to be certain, the value for the match of /(\d+.\d+)/ is $1 and is then carried into sub convert as the value $_ ?

      No. A subroutine's arguments are found in @_ (no relation to $_). $_[0] (again, no relation to $_) is the first element of @_, so it's the first argument of the subroutine.

      Ref: perlsub

        Thank you very much for the explaination. Storing arguements in @_ makes a great deal of sense.

        -mox