Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: Cooking with Perl explained by Iron Chef Macphisto

by Macphisto (Hermit)
on Jan 05, 2001 at 00:05 UTC ( [id://49847]=note: print w/replies, xml ) Need Help??


in reply to Cooking with Perl

Okay, Being that I talk to zdog and really respect his level of programming skill, I decided I'd explain how this one went because while it's somewhat simple, zdog was very creative with it and I like it more than most.

First we'll make it look more recognizable and throw in some quick commentary
#!/usr/bin/perl -w # cooking with perl -- "mmm I hope it's +pie" use strict; { $_.=<DATA>; # read one line of <DATA> redo if !eof(DATA); # read all of data into $_ } s/[ \n3A-Z]//g; # delete any newline, any digit '3'and any A- +Z s/000/032/g; # switch any 000 with a 032 my @z = split //; # Puts $_ into the array @z for (my $i=0;$i<24;$i++) # 23 loops { $_[@_] = "$z[@_*3]$z[@_*3+1]$z[@_*3+2]" # Chops $_ into three digit + sections } my $z; map $z .= chr($_),@_; # maps each three digit sequence into chr($_) to + create each letter in the japh $_ = $z."\n"; #Throws a new line to the end of the $z and stores it in +to $_ print; # prints $_

Now for a line by line description:
Line 1-2 These are of course self explanatory
Line 3-6 This little construct will read all of <DATA> into $_ ending when DATA ends of course
Line 7 The regex here takes out all of the newlines, all the digits'3' and all any alpha numeric ( capital of course ). Which leaves us with the following string07411711511603209711011101161041011140320801011141000072097099107101114 ( hope I didn't miss any )
Line 8 Switches all 000's in the above string with 032
Line 9 Throw $_ into the array @z
Line 10-13 This for loops mercilessly hacks the digit string into sections of three digits. Giving us the following:
074 117 115 116 032 097 110 111 116 104 101 114 032 080 101 114 100 007 209 709 910 710 111 4
Line 14 Declares $z
Line 15 maps the character representation of each three digit piece into $z
Line 16 Adds a new line to $z and assigns it to $_
Line 17 Prints $_ and thus prints "Just Another Perl Hacker"

I was very impressed with this and hope my explination was adequate.

Iron Chef Macphisto
Next episode I'll show you how to make Perl Pie
Addendum: zdog noted that I had mistyped and said the for loop iterates 23 times when it really iterates 24 times. I was typing too fast.

Everyone has their demons....

Replies are listed 'Best First'.
Re: Re: Cooking with Perl explained by Iron Chef Macphisto
by Sisyphus (Chaplain) on Oct 27, 2002 at 17:16 UTC

    Thanks for the explanation, since then it was just easy to follow the code. ++votes for you and for zdog.

    One more thing. As I got 'another' in lowercase (guess you made a typo in the explanation), and curious enough, I wondered what changes to introduce in the data to get a capital A. So I replaced the meaningless '3' and 'X' chars with hiphens, just to track down the '097' ASCII code. As it can be easily seen:

    
        -0-    --7---4-
        --1-  --1---7---1
        ---1---5---1---1---
        6---0---0--   -0---
       0---9---7---    1---
     1 -- -0---1---  1 ---1
      --  -1---1---6  ---1
            ---0---4-
            --1---0---1---1---1---4---0---0---0-
            --0---8---0---1---0---1---1---1---4--
             -1---0---8---0---0---0---0---7---2---0
              ---9---7---0---9---9---1---0---7---1---
               0---1---1---1---4------------------
                 --------------------------------
                  ------------------------------
                    ---------------- ----------
                     ------           ----------
                      ----            ---   -----
                       ---              ---    ----
                        --               --      --
                        --               --      --
                        --              --       --
                        --             --        --
                      ---            ---        --
    

    it is in line 5. Replaced it with '065' and I was done.

    Where is the promissed Perl pie? :-)

    -- Ricardo
    use MacPerl;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://49847]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (8)
As of 2024-04-18 15:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found