in reply to Re^2: How do I pass $1 to s///?
in thread How do I pass $1 to s///?

Nice, as long as the parameters of foo aren't read a file.

Replies are listed 'Best First'.
Re^4: How do I pass $1 to s///?
by Anonymous Monk on Jan 06, 2006 at 20:10 UTC
    ~/perl/monks$ cat foo.txt sub{"fish $_[0]"};
    ...then...
    $foo_from_file = do "foo.txt"; foo("This is test 1\n", qr/test (.*)/, $foo_from_file); sub foo { (my $text = $_[0]) =~ s/$_[1]/$_[2]->($1)/e; print $text; }
      You're using eval (disguised as do), so my point stands.
        ~/perl/monks$ cat foo.txt fish $1 ~/perl/monks$
        ...then...
        #!/usr/bin/perl open FOO, "<foo.txt"; $foo_from_file = <FOO>; foo("This is test 1\n", qr/test (.*)/, $foo_from_file); sub foo { (my $text = $_[0]) =~ s/$_[1]/interpolate($_[2],$1)/e; print $text; } sub interpolate { my ($str,@vars) = @_; $str =~ s/\$(\d+)/$vars[$1-1]/g; $str }