Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Cooking with Perl explained by Iron Chef Macphisto

by Macphisto (Hermit)
on Jan 05, 2001 at 00:05 UTC ( #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....


Comment on Re: Cooking with Perl explained by Iron Chef Macphisto
Select or Download Code
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
Node Status?
node history
Node Type: note [id://49847]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (9)
As of 2015-07-02 04:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (27 votes), past polls