in reply to Re: Array of ($1, $2, ...) in replacement part of s///?
in thread Array of ($1, $2, ...) in replacement part of s///?

Wow, I learn something new about perl every day.

from perlvar:

After a match against some variable $var: $` is the same as substr($var, 0, $-[0]) $& is the same as substr($var, $-[0], $+[0] - $-[0]) $' is the same as substr($var, $+[0]) $1 is the same as substr($var, $-[1], $+[1] - $-[1]) $2 is the same as substr($var, $-[2], $+[2] - $-[2]) $3 is the same as substr $var, $-[3], $+[3] - $-[3])
so I wrote a test case:
use strict; for my $regex (qr/(.)oo(.)ar(.)az/, qr/fo(.)barba(.)/) { my $str = "foobarbaz"; $str =~ s/$regex/ my @a; for my $index (1 .. $#+) { push @a, substr($str, $-[$index], $+[$index] - $-[$index]) +; } join "," , @a; /e; print "$str\n"; }
outputs
f,b,b o,z
I'll have to remmember that one.

--

flounder

Replies are listed 'Best First'.
Re: Re: Re: Array of ($1, $2, ...) in replacement part of s///?
by diotalevi (Canon) on Jan 28, 2004 at 21:28 UTC

    And now in the usual idiom as well.

    join "," , map substr( $str, $-[$_], $+[$_] - $-[$_] ), 1 .. $#+;
      Reminds me of the old BBS days.
      join ",",map substr($str,$-[$_],$+[$_]-$-[$_]),1..$#+;#NO CARRIER

      --

      flounder