in reply to Re: Re:^2 Golf: string complement
in thread Golf: string complement

But, when you print, it forces scalar context. The output of the print statement is the same. Same if you assigned result of sub to a scalar explicitly:
my $result = invert($string);
is the same with or without the join.

.02

cLive ;-) - see above

Replies are listed 'Best First'.
Re: Re: Re: Re:^2 Golf: string complement
by BrowserUk (Patriarch) on May 16, 2004 at 01:23 UTC

    Not quite. A list grep in a scalar context return the size of the list.

    sub invert { #23456789012345678901234567890 grep/[^\Q@_\E]/,map{chr}1..255 }; $inverted = invert( 'Just Another Perl Hacker!' ); print $inverted; 237

    237 + 18 (unique characters in the string) = 255.


    Examine what is said, not who speaks.
    "Efficiency is intelligent laziness." -David Dunham
    "Think for yourself!" - Abigail
      I actually already did toy with the idea of interpolating the output of grep into a string, but it turned out to fail to gain any ground; it works, but it's no shorter, plus to get identical output you would have to also set $" to '' (empty string), which takes additional keystrokes..

      My 37 keystroke method:

      sub invert { #234567890123456789012345678901234567 join'',grep/[^\Q@_\E]/,map{chr}1..255 }

      And now without join, but with double-quotish interpolation:

      sub invert { #234567890123456789012345678901234567 "@{[grep/[^\Q@_\E]/,map{chr}1..255]}" }

      Dave

Re: Re: Re: Re:^2 Golf: string complement
by japhy (Canon) on May 16, 2004 at 01:23 UTC
    Huh? grep() in scalar context returns a number, not a join()ed list of elements that passed through. And print() doesn't "force scalar context" -- in fact, it invokes list context, which is the only reason why print invert($string) works.
    _____________________________________________________
    Jeff[japhy]Pinyan: Perl, regex, and perl hacker, who'd like a job (NYC-area)
    s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;