in reply to Re: Returning transliteration from eval
in thread Returning transliteration from eval

Thanks. I guessed it was a backslash issue, but hadn't stumbled to that one.

You've made a light bulb go off, and I'm much clearer on eval now. Point on printing out the eval is well-taken, and will use it in the future.

  • Comment on Re^2: Returning transliteration from eval

Replies are listed 'Best First'.
Re^3: Returning transliteration from eval
by Your Mother (Archbishop) on Jan 28, 2011 at 16:45 UTC

    Habitual backslasher ikegami might have something to say about it but single (non-interpolating/literal) quotes can be a bit easier to read.

    ( eval '( $string1 | $string2 ) =~ tr[$n1][$n1]' ), ( eval '( ~$string1 & $string2 ) =~ tr[$ndiff][$ndiff]' ), ( eval '( $string1 & ~$string2 ) =~ tr[$ndiff][$ndiff]' ), ( eval '( $string1 & $string2 ) =~ tr[$n2][$n2]' ) ),

    Update: my eyes are getting old. I missed the interpolation in the trs.

      ...but that wouldn't interpolate where interpoplation is needed ($n1, $n2 and $ndiff).

      (With single quotes, the resulting code such as ( ~$string1 & $string2 ) =~ tr[$ndiff][$ndiff] would count the total number of characters belonging to the set '$','n','d','i','f' — which is not what is intended here.)

      print 'f $ d d i $ n' =~ tr/$ndiff/$ndiff/; # 7

      (Update: added sample code for the downvoter, who apparently didn't get it.)

        Oh, quite right. Bad reading on my part. :(