in reply to How do I prevent unwanted print output from an eval? (RESOLVED! eval NOT THE PROBLEM!)

eval "\$test_crypt =~ tr/$key/$word/";
I'm not an expert and I can't explain why I'm doing it the way I'm doing it, but if it's not quoted and back-slashed, it does not work.

This bit I can demystify... it's about interpolation. The eval here has two phases: first, the construction of the string to be processed -- which here involves interpolation; second, the processing of that string as Perl.

In the first phase, "...." constructs the string to be processed, and in doing so it replaces $key and $word by the string version of the values of those variables (aka interpolation). I suspect that $key will be something along the lines of a-z0-9A-Z and $word is some permutation of that. So what eval is to process is

$test_crypt =~ tr/abcde.../zQ5Ra.../
In order to prevent string interpolation replacing $test_crypt by its contents, the \$ is used to generate $ in the result.

Of course, as others have pointed out, if any of $key, $word or $test_crypt is undefined you'll get errors thrown at you.

Replies are listed 'Best First'.
Re^2: How do I prevent unwanted print output from an eval?
by duggles (Acolyte) on Aug 26, 2008 at 21:43 UTC
    Thanks for the explanation. I remember reading that now and it makes sense.
    I appreciate the input!
    Life is short, but it's wide -- Chuck Pyle