in reply to Re: secret code generator
in thread secret code generator

A simpler way to populate the @chars array.

my @chars = map {pack q{C}, $_} 0x21 .. 0x7e;



Replies are listed 'Best First'.
Re^3: secret code generator
by BrowserUk (Patriarch) on Dec 19, 2006 at 10:25 UTC

    Simpler still

    my @chars = map chr, 0x21 .. 0x7e;

    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Blast, I thought it was char and when I couldn't find that in the Camel book I decided I had imagined the function so went for pack instead :(
Re^3: secret code generator
by Hofmator (Curate) on Dec 19, 2006 at 10:28 UTC
    Simpler, yes. Easier to understand, no - unless you use ASCII codes all day long.

    Also, note BrowserUK's solution, your map can be written simply as map chr, 0x21 .. 0x7e;

    Update: BrowserUK noted himself :)

    -- Hofmator

    Code written by Hofmator and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

      Easier to understand? Debateable. I feel that this

      my @chars = ("a".."z", "A".."Z", 0..9 , split //, qq(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~));

      looks a bit messy and it is difficult to see at a glance, or even with a long stare, if you've got them all. In fact, I think tilly will have missed one since qq{...} is going to lose the backslash so q{...} might have been better.

      $ perl -le 'print for split m{}, qq{!@#{}[\]&*};' ! @ # { } [ ] & * $ perl -le 'print for split m{}, q{!@#{}[\]&*};' ! @ # { } [ \ ] & * $



      Update: Added one-liners to show backslash behaviour