Follow Slashdot blog updates by subscribing to our blog RSS feed

 



Forgot your password?
typodupeerror
×
Perl Programming

5th Annual Obfuscated Perl Contest 158

$Bob writes "The best and brightest of the Perl community are showing up to drive you insane. Test you strength in the 5th Annual Obfuscated Perl Contest!" Name your variables after the stooges! Write Spagetti! Its good!
This discussion has been archived. No new comments can be posted.

5th Annual Obfuscated Perl Contest

Comments Filter:
  • by Idaho ( 12907 ) on Thursday August 10, 2000 @11:04AM (#864214)
    I just found it. It's called 'vanschnitz' and can be found here [ioccc.org]
  • "trolling, karma-whoring crap" Have you considered a nice hot bubble bath and maybee a little time off in the country to rest?? Take your mind off things and remember how much we should all just love each other on this big ball of granite?? other than that, I agree.
  • by Anonymous Coward on Thursday August 10, 2000 @12:47PM (#864216)
  • You often post 'jokes' as an AC funny man? More like flame bait.

    Too bad I bit.

    --

    A mind is a terrible thing to taste.

  • well, damn, i'll have to post that more often then.

    mod this guy up!
  • I don't know... I always liked gandalf.c--the one where the code is in the shape of the Cat in the Hat.
  • Nah, that'll come in 2nd. First place will go to the guy who rewrites the BBS Door game 'Cripple Smash'.

    :wq!

  • so do unix hackers... ;)
  • One of the entries is a "wc"[1] programme that will work both in Perl and C... Makes my teeth itch :-)

    [1]Word count, rather than Water Closet, of course.
  • Or perhaps Attack of the Mutant Camels, another Minter classic.

    Jeff Minter is easily the greatest computer game creator the world has ever seen.
  • How could you possibly say that LISP is an obfuscated language? It's by far one of the most elegant languages ever created! You just need to shift your mind from thinking iteratively to thinking recursively.

  • Obfuscated C is funny because C is supposed to be all strict and anal. Obfuscated Perl isn't funny because Perl deliberately allows obfuscation for the sake of speedy coding.

    It's like the Dem/Repub convetions: they are supposed to be flimsy and full of rhetoric, so why does the press write articles proclaiming how flimsy and rhetorical(?) the convetions are (will be.) Duh. As my grandma would say as she downed another Miller Lite: "No shit, Sherlock."


    ---
  • by Octal ( 310 )
    I know I'll get moderated down for trolling or redundancy or somesuch, but I just have to say this: Enter Slash! You know you'll win. Of course getting it under the 512k line will be a little tricky but you can do it! We have faith in you!
  • perl, especially when written by me, seems to be a write-only language... :)
  • ...that there isn't an "Obfuscated C++ Contest?"

    That's because it wouldn't be very challenging... ;)

    (This from a guy who loves C++)

  • by BaronM ( 122102 ) on Thursday August 10, 2000 @11:06AM (#864230)
    How about a writing Perl-obfuscator in obfucsated perl? Then, just crank your code through enough times that even you can't recognize it, and submit!
  • by _xeno_ ( 155264 ) on Thursday August 10, 2000 @11:06AM (#864231) Homepage Journal
    There's nothing better than sitting there with an open Emacs window, watching as some newbie comes by, looks at the mess, and says "That's computer code?" Ah, scaring the uninitiated... that's what Perl code is all about...

    (Well, actually, it was the regex that put him off... Any language where
    while ($line=<>) {
    foreach ($line=~/\"((?:(?:[^\"\\]*)|(?:(?:\\\")*))*)\"\s?| ([^\s]+)\s?|\s/g) {
    print "$_\n";
    }
    }
    is legal is enough to scare anyone...)

    (One faux karma point to anyone who can tell me what that does :))

  • Is someone trying to trick the FBI into releasing the source for Carnivore?
    If so, how do they know it's written in Perl? I thought they were using VB....
    Of course we all know that it's boud to be obfuscated enough to win......

  • by Anonymous Coward
    Perhapse it's redundant because someone says something like it every time Perl comes up in a story...

    dumbass.
  • by toup ( 62454 ) on Thursday August 10, 2000 @11:08AM (#864234)
    How many of you were sitting at work when you saw this item, and have since spent a good deal of time trying to write a bit of obfuscated perl to post here as your response?

    I'm not the only one, fess up.


    Here you go.

    #!/usr/bin/perl
    print "hello world\n";
    exit;

  • eval("\x70\x72\x69\x6e\x74\x20\x22\x54\x68\x69\x73 \x20\x74\x6f\x74\x61\x6c\x6c\x79\x20\x52 \x75\x6c\x33\x5a\x21\x0a\x22")

  • You don't want to admit doing it and it gets a little messy sometimes, but you sometimes need old Rosy to get the dirty deed done quickly.
  • At Paris.pm (in France), we have devoted a page to obfuscating the expression $A++ [pm.org].

    Now 55 and counting.
    Check the one with NO alphanumerical characters AT ALL!

    BooK
  • If you know people that encourage that, you're hanging out with a bunch of idiots. I don't know any perl coders that would recommend any of that.

    Good programming habits are the same across most languages. I think there are just more bad perl programmers because they all came from doing web design. :) Some grow out of it, most don't.

    :wq!

  • by DrQu+xum ( 218745 ) on Thursday August 10, 2000 @10:49AM (#864239) Homepage Journal
    How are you able to tell the difference between Obfuscated & Un-Obfuscated Perl? :) Make your bets now: Will this post be Funny or Flamebait?
  • The problem with Perl is that it lets me do things too quickly, meaning I have to spend the rest of my time reading gentlemen's literature with my feet up on the desk.

    Heh!
  • Quite a bit, I expect:

    tar -xvf perl-5.6.0.tar.gz
    cd perl-5.6.0
    ./Configure
    make
    make install

    :wq!

  • Unfortunately, the resulting "obfuscate.c" is WAY too big to be entered in the contest...
  • I think you're going to have a hard time finding strange attractors in a discrete space, most likely the program will just keep growing.
  • by swerdloff ( 16397 ) on Thursday August 10, 2000 @10:51AM (#864244) Homepage
    How many of you were sitting at work when you saw this item, and have since spent a good deal of time trying to write a bit of obfuscated perl to post here as your response?

    I'm not the only one, fess up.
  • Now we can make some money from GPL'd software: give the source code away for free, and charge for the comments.
  • I'm still waiting for my eyeballs to uncross after reading my last LISP progrem.

    [Begin Also Spach Zarathustra theme music] "My God, it's , it's ... full of parens"
  • All perl is inherently obfuscated. It's the most obfuscated looking language since TECO.

    jeb.

  • Well, how much regex use is appropriate is a matter of opinion. Other than that, how does Perl _encourage_ the use of break, globals, and meaningless variable names?

    (Warning: Variable name too meaningful!)
    (Warning: No break detected! Logic may not be convoluted enough.)
    (Warning: Local variable detected, recommend use of global instead)
  • I think of it as open-source copy protection.
  • LMAO Someone has Karma to burn.. ROFL modding posts randomly as insightful


    If you think education is expensive, try ignornace
  • I've got $7 that says it doesn't get moderated at all.

    Of course, why my cash is talking to me is a different story.
  • I was always a fan of the Obfuscated C contest (my fave category was 'abuse of the preprocessor'), but have to say these contests have their downside. They're used by language Nazis as arguments for why its a bad idea to use the language involved. "How can you consider using a language that's so crappy that people can write inpenetrable code with it?" is the usual harangue. (To which I always responded that any language can be abused in this fashion. Then I'd shoot them with my Nerf gun.)
  • but since i have not moderator points today, i'll just post it. =)

    seriously, though, while i suppose there is such a thing as elegant perl, as neat perl, as organized, modular, and even object-oriented perl, at its core, perl is a way to get things done quickly and simply. and, at least to some of the people whose perl i've had the "pleasure" of wading through, quickly and simply also seems to imply sloppy and quirky. which i suppose doesn't sound too bad, but when another coder comes along and extends sloppy and quirky code with messy, odd-ball code...

    maybe i should just go back to c++, where things are always so straightforward... (heh)

  • by toh ( 64283 ) on Thursday August 10, 2000 @11:11AM (#864254)
    Wouldn't the real challenge be an UnObfuscated Perl contest?

    (disclaimer: I like and use perl for many things...but it still looks like a doctor's handwriting ;)
  • Main Entry: obfuscate Pronunciation: 'äb-f&-"skAt; äb-'f&s-"kAt, &b- Function: transitive verb Inflected Form(s): -cated; -cating Etymology: Late Latin obfuscatus, past participle of obfuscare, from Latin ob- in the way + fuscus dark brown -- more at OB-, DUSK Date: 1577 1 a : DARKEN b : to make obscure 2 : CONFUSE - obfuscation /"äb-(")f&s-'kA-sh&n/ noun - obfuscatory /äb-'f&s-k&-"tOr-E, &b-, -"tor-/ adjective Thus my above coment was a witty comentary upon the popular conception of the word obfuscate. I am dismayed you did not get it.
  • I've always found perl code to be indistinguishable from "strings /dev/random", myself...
  • You mean one faux karma point to anyone with a Perl interpretor?
  • by Once&FutureRocketman ( 148585 ) <otvk4o702@@@sneakemail...com> on Thursday August 10, 2000 @11:12AM (#864258) Homepage
    One word: Microsoft.


  • by Anonymous Coward
    All code due Dec. 31, 2000. Please direct questions to Steve Ballmer, Microsoft Craporation.
  • or write just anything in intercal...
  • I'm getting the impression that implementing forth is a common past time for the adventurous programmer. I did a similar thing for a little z80 project about five years ago as the only 4th compilers I could find had way too much CP/M junk hanging off it. Took about 3 or 4 days for a compiler, written in turbo pascal and compiling to Assembler. Again, only a subset, but verry simple. What a *great* language it is that allows such things to happen. I often wonder just how C became so big... But I guess no one was really trying to implement unix on toasters.
  • The last thing I saw from him was a psychedelic, updated version of the old Atari classic Tempest (remember the rotary control?) for MS-Dos (and the Jaguar IIRC). Tempest 2000 [arrgh.co.uk], it was called.

    Blindingly fast (on a DX66) and insanely addictive.

  • Python has regex's, so you could do much the same thing.
  • Or...was it Revenge of the Killer Llamas (the sequel?) I forgot. It's suuuuuuuuuch a long time ago where code is short and sweet and all packed into 3K (for the VIC 20). Now Take That for obsfuscated!

  • just checked, it's Attack/Revenge of the Mutant Camels. Ilamasoft for the Vic20 (3Kilobytes!).
    I got it confused with Llamasoft.

    Jeff Minter's still coding!
  • Of course even Chinese, having pictograms, is clearer than Perl. I suspect that Billions of years from now when our computers finally succumb to universal heat-death, Perl syntax will remain the only one still thermodynamically permissible.
  • Is there any perl more obfuscated than the implementation of RSA in 2 lines? That's unbelievable. It was impressive years ago when it was 5 lines. Of course, it could be argued that it belongs in an Obfuscated dc contest instead.
  • What do poor RMS's behinds have to do with the beligerance and lack of sense of humour of some (if not most) Perl mongers?

    If anything, you should tell him to go shove his head up Tom Christiansen's ass...
    --

  • The Braille/ascii converter was my favorite too.

    The real beauty of the program, was that the code itself was its own documentation -- in braille!
    You ran the program on itself to see the documentation in ascii.
  • errr.. ummm.. it's a joke.. get over it
    --

    A mind is a terrible thing to taste.

  • And where + means concatenation or addition.
    Gah.
  • It's a wierd contrast.. sometimes the can do something so well, and be feared for it... Yet other time be a bunch of bumbling idiots. (Waco.. Ruby ridge....)
  • Dude...this is the funniest thing I've seen all day. BTW, notice that my original post got modded back up... "insightful"? WTF? It was a troll...
  • by Octal ( 310 )
    Ohh... well then, I guess Slash won't make it after all.
  • Yeah? What's he doing these days, anything interesting?

    Attempt to drag us back to some semblance of on-topicness: Llamas, Camels; is Larry Wall really just a pseudonym for Jeff Minter? :-)
  • Yeah, yeah, Lots of Insane yada-yada

    You know what the fun thing is? Parentheses are about the only syntatic "noise" characters in Lisp that are in your face, so to speak. And if you're an experienced lisper you just ignore'em when reading the code.

    Now compare that with the plethora of $, @, % and what not scattered around here and there in your favourite toy language. Yeah, I know, once you get the hang of it it's OK, but how long does it take and most important: is it really necessary?
    --

  • Ya, isn't "Obfuscated Perl" a bit redundant?
  • Ah yes. I had the same situation with C. My favorite was the guy who knew Fortran and hated C, so he used the preprocessor to, in effect, create his own Fortran-like language. (My God, now I'm going to have nightmares about that one tonight)
  • This is neat, a first post about perl that doesn't necessarily flame it to death.

    My $5 are on obfuscated, perl can be used to generate really neat and inteligable (sp?) code if you're not too lazy. Since I'm REALLY lazy, I'll submit some of my code.

    As a suggestion, they should have a category for the smallest program to serve a webpage - that'll be intresting, coding an http 1.0 daemon and serving a page without using any modules. Just a thought...
  • Absolutely not. I deny it. Uh-uh. Nope.
  • Now this last moderation "Doesn't make a LICK of sense!"

    "Producing satire is kind of hopeless because of the literacy rate of the American public."
  • Try this; it will actually work ;-)

    #!/usr/bin/perl -w
    s{(tech|rights|Constitution)}
    {(qw(corporation abuse geek system internet new era Hellmouth))[int(rand(8))] . " $1"}egi, print for <DATA>;
    __DATA__
    Plugin your text here
  • yohmaz says:
    -----------
    For the next Obuscated C code contest, I'm going to write the follwing perl script:

    #!/usr/bin/perl
    print "Hello World\n";

    and then

    perl -MO=CC,-O2,-oobfuscate.c obfuscate.pl

    and submit the obfuscate.c
    ----------
    So, here's the output {grin}:
    *whine* but its ONLY 295 lines...

    #include "EXTERN.h"
    #include "perl.h"
    #include "XSUB.h"

    /* Workaround for mapstart: the only op which needs a different ppaddr */
    #undef Perl_pp_mapstart
    #define Perl_pp_mapstart Perl_pp_grepstart
    #define XS_DynaLoader_boot_DynaLoader boot_DynaLoader
    EXTERN_C void boot_DynaLoader (pTHX_ CV* cv);

    static void xs_init (pTHX);
    static void dl_init (pTHX);
    static PerlInterpreter *my_perl;

    #ifdef BROKEN_STATIC_REDECL
    #define Static extern
    #else
    #define Static static
    #endif /* BROKEN_STATIC_REDECL */

    #ifdef BROKEN_UNION_INIT
    /*
    * Cribbed from cv.h with ANY (a union) replaced by void*.
    * Some pre-Standard compilers can't cope with initialising unions. Ho hum.
    */
    typedef struct {
    char * xpv_pv; /* pointer to malloced string */
    STRLEN xpv_cur; /* length of xp_pv as a C string */
    STRLEN xpv_len; /* allocated size */
    IV xof_off; /* integer value */
    double xnv_nv; /* numeric value, if any */
    MAGIC* xmg_magic; /* magic for scalar array */
    HV* xmg_stash; /* class package */

    HV * xcv_stash;
    OP * xcv_start;
    OP * xcv_root;
    void (*xcv_xsub) (CV*);
    void * xcv_xsubany;
    GV * xcv_gv;
    char * xcv_file;
    long xcv_depth; /* >= 2 indicates recursive call */
    AV * xcv_padlist;
    CV * xcv_outside;
    #ifdef USE_THREADS
    perl_mutex *xcv_mutexp;
    struct perl_thread *xcv_owner; /* current owner thread */
    #endif /* USE_THREADS */
    cv_flags_t xcv_flags;
    } XPVCV_or_similar;
    #define ANYINIT(i) i
    #else
    #define XPVCV_or_similar XPVCV
    #define ANYINIT(i) {i}
    #endif /* BROKEN_UNION_INIT */
    #define Nullany ANYINIT(0)

    #define UNUSED 0
    #define sym_0 0

    Static OP op_list[3];
    Static LISTOP listop_list[2];
    Static SV sv_list[12];
    Static XPV xpv_list[7];
    Static XPVAV xpvav_list[3];
    Static XPVHV xpvhv_list[1];
    static OP * pp_main (pTHX);

    static OP op_list[3] = {
    { 0, 0, NULL, 0, 0, 65535, 0x0, 0x0 },
    { 0, 0, NULL, 0, 177, 65535, 0x0, 0x0 },
    { (OP*)&listop_list[1], 0, NULL, 0, 190, 65535, 0x1, 0x0 },
    };

    static LISTOP listop_list[2] = {
    { 0, 0, NULL, 0, 209, 65535, 0x5, 0x0, 0, 0, 1 },
    { 0, 0, NULL, 0, 178, 65535, 0xd, 0x40, &op_list[1], &op_list[2], 5 },
    };

    static SV sv_list[12] = {
    { &xpvav_list[0], 1, 0xa },
    { &xpvav_list[1], 1, 0xa },
    { 0, 1, 0x100 },
    { &xpv_list[0], 1, 0x4840004 },
    { &xpvhv_list[0], 2, 0x2000000b },
    { &xpvav_list[2], 2, 0xa },
    { &xpv_list[1], 1, 0x4040004 },
    { &xpv_list[2], 1, 0x4040004 },
    { &xpv_list[3], 1, 0x4040004 },
    { &xpv_list[4], 1, 0x4040004 },
    { &xpv_list[5], 1, 0x4040004 },
    { &xpv_list[6], 1, 0x4040004 },
    };

    static XPV xpv_list[7] = {
    { 0, 12, 13 },
    { 0, 37, 38 },
    { 0, 26, 27 },
    { 0, 47, 48 },
    { 0, 36, 37 },
    { 0, 30, 31 },
    { 0, 1, 2 },
    };

    static XPVAV xpvav_list[3] = {
    { 0, -1, -1, 0, 0.0, 0, Nullhv, 0, 0, 0x1 },
    { 0, -1, -1, 0, 0.0, 0, Nullhv, 0, 0, 0x1 },
    { 0, -1, -1, 0, 0.0, 0, Nullhv, 0, 0, 0x1 },
    };

    static XPVHV xpvhv_list[1] = {
    { 0, 0, 31, 0, 0.0, 0, Nullhv, -1, 0, 0, 0 },
    };

    static int perl_init()
    {
    dTHR;
    dTARG;
    djSP;
    {
    SV **svp;
    AV *av = (AV*)&sv_list[1];
    av_extend(av, 1);
    svp = AvARRAY(av);
    *svp++ = (SV*)&PL_sv_undef;
    *svp++ = (SV*)&sv_list[2];
    AvFILLp(av) = 1;
    }
    op_list[0].op_ppaddr = pp_main;
    op_list[1].op_ppaddr = PL_ppaddr[OP_ENTER];
    xpv_list[0].xpv_pv = savepvn("Hello world\n", 12);
    listop_list[0].op_ppaddr = PL_ppaddr[OP_PRINT];
    op_list[2].op_ppaddr = PL_ppaddr[OP_EXIT];
    listop_list[1].op_ppaddr = PL_ppaddr[OP_LEAVE];
    xpv_list[1].xpv_pv = savepvn("/usr/local/lib/perl5/5.6.0/i686-linux", 37);
    xpv_list[2].xpv_pv = savepvn("/usr/local/lib/perl5/5.6.0", 26);
    xpv_list[3].xpv_pv = savepvn("/usr/local/lib/perl5/site_perl/5.6.0/i686 -linux", 47);
    xpv_list[4].xpv_pv = savepvn("/usr/local/lib/perl5/site_perl/5.6.0", 36);
    xpv_list[5].xpv_pv = savepvn("/usr/local/lib/perl5/site_perl", 30);
    xpv_list[6].xpv_pv = savepvn(".", 1);
    {
    SV **svp;
    AV *av = (AV*)&sv_list[5];
    av_extend(av, 5);
    svp = AvARRAY(av);
    *svp++ = (SV*)&sv_list[6];
    *svp++ = (SV*)&sv_list[7];
    *svp++ = (SV*)&sv_list[8];
    *svp++ = (SV*)&sv_list[9];
    *svp++ = (SV*)&sv_list[10];
    *svp++ = (SV*)&sv_list[11];
    AvFILLp(av) = 5;
    }
    PL_main_root = (OP*)&listop_list[1];
    PL_main_start = &op_list[0];
    PL_curpad = AvARRAY((AV*)&sv_list[1]);
    PL_initav = (AV *) Nullsv;
    GvHV(PL_incgv) = (HV*)&sv_list[4];
    GvAV(PL_incgv) = (AV*)&sv_list[5];
    av_store(CvPADLIST(PL_main_cv),0,SvREFCNT_inc((AV* )&sv_list[0]));
    av_store(CvPADLIST(PL_main_cv),1,SvREFCNT_inc((AV* )&sv_list[1]));
    PL_amagic_generation= 0;
    return 0;
    }
    #include "cc_runtime.h"

    static
    CCPP(pp_main)
    {
    I32 oldsave;
    SV **svp, *sv, *src, *dst, *left, *right;
    MAGIC *mg;
    djSP;
    lab_80f5670:
    PL_op = &op_list[1];
    DOOP(PL_ppaddr[OP_ENTER]);
    TAINT_NOT;
    sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
    lab_80f5848:
    PUSHMARK(sp);
    EXTEND(sp, 1);
    PUSHs((SV*)&sv_list[3]);
    PL_op = (OP*)&listop_list[0];
    DOOP(PL_ppaddr[OP_PRINT]);
    lab_82cddd8:
    TAINT_NOT;
    sp = PL_stack_base + cxstack[cxstack_ix].blk_oldsp;
    PL_op = &op_list[2];
    DOOP(PL_ppaddr[OP_EXIT]);
    DOOP(PL_ppaddr[OP_LEAVE]);
    FREETMPS;
    PUTBACK;
    return PL_op;
    }

    int
    main(int argc, char **argv, char **env)
    {
    int exitstatus;
    int i;
    char **fakeargv;

    PERL_SYS_INIT3(&argc,&argv,&env);

    if (!PL_do_undump) {
    my_perl = perl_alloc();
    if (!my_perl)
    exit(1);
    perl_construct( my_perl );
    PL_perl_destruct_level = 0;
    }

    #ifdef CSH
    if (!PL_cshlen)
    PL_cshlen = strlen(PL_cshname);
    #endif

    #ifdef ALLOW_PERL_OPTIONS
    #define EXTRA_OPTIONS 2
    #else
    #define EXTRA_OPTIONS 3
    #endif /* ALLOW_PERL_OPTIONS */
    New(666, fakeargv, argc + EXTRA_OPTIONS + 1, char *);
    fakeargv[0] = argv[0];
    fakeargv[1] = "-e";
    fakeargv[2] = "";
    #ifndef ALLOW_PERL_OPTIONS
    fakeargv[3] = "--";
    #endif /* ALLOW_PERL_OPTIONS */
    for (i = 1; i argc; i++)
    fakeargv[i + EXTRA_OPTIONS] = argv[i];
    fakeargv[argc + EXTRA_OPTIONS] = 0;

    exitstatus = perl_parse(my_perl, xs_init, argc + EXTRA_OPTIONS,
    fakeargv, NULL);
    if (exitstatus)
    exit( exitstatus );

    sv_setpv(GvSV(gv_fetchpv("0", TRUE, SVt_PV)), argv[0]);
    PL_main_cv = PL_compcv;
    PL_compcv = 0;

    exitstatus = perl_init();
    if (exitstatus)
    exit( exitstatus );
    dl_init(aTHX);

    exitstatus = perl_run( my_perl );

    perl_destruct( my_perl );
    perl_free( my_perl );

    PERL_SYS_TERM();

    exit( exitstatus );
    }

    /* yanked from perl.c */
    static void
    xs_init(pTHX)
    {
    char *file = __FILE__;
    dTARG;
    djSP;

    #ifdef USE_DYNAMIC_LOADING
    newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file);
    #endif
    /* bootstrapping code*/
    SAVETMPS;
    targ=sv_newmortal();
    #ifdef DYNALOADER_BOOTSTRAP
    PUSHMARK(sp);
    XPUSHp("DynaLoader",strlen("DynaLoader"));
    PUTBACK;
    boot_DynaLoader(aTHX_ NULL);
    SPAGAIN;
    #endif
    FREETMPS;
    /* end bootstrapping code */
    }
    static void
    dl_init(pTHX)
    {
    char *file = __FILE__;
    dTARG;
    djSP;
    /* Dynamicboot strapping code*/
    SAVETMPS;
    targ=sv_newmortal();
    FREETMPS;
    /* end Dynamic bootstrapping code */
    }
  • For the next Obuscated C code contest, I'm going to write the follwing perl script:

    #!/usr/bin/perl
    print "Hello World\n";

    and then

    perl -MO=CC,-O2,-oobfuscate.c obfuscate.pl

    and submit the obfuscate.c
    --

    A mind is a terrible thing to taste.

  • by a.out ( 31606 ) on Thursday August 10, 2000 @11:21AM (#864293)
    wow .. moderators really have a sence of humor.

    See Rob's Comments:

    HERE [slashdot.org] for the Third Annual Obfuscated Perl Contest.

  • by Phexro ( 9814 ) on Thursday August 10, 2000 @11:49AM (#864295)
    wow, you must have some upper-class newbies around you. most people who watch me use emacs for anything get scared.

    Me: C-x 5 f ~/pr TAB w TAB RET (type type code hack) C-x w M-x compile RET RET
    Them: AAAAAaaaaaaaaaugh! (head explodes)
    --
  • Or mainframe programmer.
  • My favorite from the Obfuscated C Contest was the one that played Conway's life in the root window of your X display.

    What made it obfuscated?

    • It didn't use Xlib. It opened a socket and wrote the X protocol directly.
    • It was about 1024 characters long.
    • It ran like a bat out of hell - each pixel was a cell (so typical workstation monitor == one million cells), and it appeared to do about five or ten generations a second!
    I loved just leaving that puppy running.... It started out with a random sampling of cells, and watching gliders spring up and soar across the screen....

    ObPerl: And people have suggested using this language as a first programming language? Eep.

  • Since 99% of perl programmers can't stand Windows, something like the following should really look obfuscated(its ASP, with perl as the scripting language):

    #
    $Conn = $Server->CreateObject("ADODB.Connection");
    # Open a system DSN
    #
    $Conn->Open( "ADOSamples" );

    # Execute an SQL Query
    #
    $RS = $Conn->Execute( "SELECT * FROM Orders" );
    # Read a property to get the number of columns
    # present in the Recordset returned from the
    # query.
    #
    $count = $RS->Fields->{Count};
    # Print out the names of each column
    #
    for ( $i = 0; $i $Response->Write( $RS->Fields($i)->Name );
    $Response->Write("
    ");
    };

    # Loop the Recordset until there are no more records
    #
    while ( ! $RS->{EOF} ) {
    for ( $i = 0; $i $Response->Write(" ");
    $Response->Write($RS->Fields($i)->{Value});
    $Response->Write("
    ");
    };

    # Move to the next record
    #
    $RS->MoveNext();
    };
    # Close the Recordset
    #
    $RS->Close();
    $Conn->Close();
    %>

    Of course, a real entry would leave out the comments. Whaddya think? Would this qualify?

  • If the Obfuscated C Contest didn't have such small size limitations on C files, I'd post the source code to Perl!

    ...however, I need to see what silly rules the Obfuscated Perl contest has. If it doesn't have that many, you can just *bet* that I'll write a source filter that decrypts to Perl, runs itself, and calls the C preprocessor! (and maybe I'll have it generate and compile some C code while I'm at it... hmm.)
    ---
    pb Reply or e-mail; don't vaguely moderate [ncsu.edu].
  • by technos ( 73414 ) on Thursday August 10, 2000 @12:00PM (#864303) Homepage Journal
    I hearby nominate Slashcode as the ultimate bit of obfuscated Perl code. Upon reading the relativly clean code, you think it's a mere weblog. But when you implement it, it turns out to be the world's most powerful distributed denial of service tool.

    I know Microsoft technicians who don't sleep well knowing their webserver could be taken down by a global community of GNU extremists at any time of day or night. I know Apache admins that cringe and start filling out requisition orders for RAID arrays and Xeon processors at the slightest suggestion that someone submitted their site to Slashdot. Myself, I planned ahead with a script that reroutes everything to localhost at the first sign that my poor overworked server is having a breakdown. The chance of it being to linked to by Slashdot is one in a million, but I'm not taking any chances at being on the recieving end..
  • #!/usr/bin/perl
    while(){
    $hash{$_}++;
    }
    while(($line,$times_seen) = each %hash){
    print "$times_seen $line\n";
    }


    --
  • sorry that should obviously be
    while(<>)

    --
  • by yomahz ( 35486 ) on Thursday August 10, 2000 @11:24AM (#864312)
    Perl variables can't start w/ numbers

    $5 is invalid :)
    --

    A mind is a terrible thing to taste.

  • by scrytch ( 9198 ) <chuck@myrealbox.com> on Thursday August 10, 2000 @11:25AM (#864314)
    cat
  • Thats not scary... You're simply capturing words or options, optionally between quotes while allowing for quote escaping, using \".

    Try doing that in one line with any other language and still make it as efficient as a Perl regex...
  • Doesn't compile with g++. You need to change it to even get it to work.

    1) you forgot #include
    2) what is foreach? Do you mean for_each?
    3) You've got the unary function declaration all wrong.

    Anyway, your program isn't really fair because you're including a great deal of code that isn't obfuscated. I could play by the same rules and write a C program one line long that includes a great deal of code and isn't obfuscated. If I only count that one line, then I win the challenge!

  • You got modded up because...you suggested that someone else get modded up?

    I guess I'll get modded down for suggesting that you get modded down.
    -----
  • I could submit some really great examples of crazy spaghetti code that was incomprehensible and would not make sense to anyone, but I'd have to get permission from my employer first, since writing bad Perl is what I do for a living:)

    sig:

  • if ($_ =~ /tech|rights|Constitution/) {
    ReplaceRandomWords('corporation|abuse|geek|system| internet|new era|Hellmouth');
    }

    Think that would make it under the crappy web page category?
  • nor does this one, for that matter. :)
  • this is one of the funniest things i've read on slashdot. if anyone has some mod points to spare, mod this guy up.
  • In rebuttal to the Obfuscated Perl contest, I'd like to propose a counter-contest. I dare anyone to write an un-obfuscated program in Befunge [catseye.mb.ca].

    -- Dave

  • by Nidhogg ( 161640 ) <shr...thanatos@@@gmail...com> on Thursday August 10, 2000 @12:24PM (#864343) Journal
    1. (One faux karma point to anyone who can tell me what that does :))

    That's easy. It makes my head hurt and generates a lovely whooshing sound.

    I'll take that karma point now. =)

  • by a.out ( 31606 ) on Thursday August 10, 2000 @10:59AM (#864348)

    Why don't you enter slash??
    I know deep down you've always wanted to. <grin>
  • I've done some contracts maintaining Perl, and have seen some code that could win these hands down. Now I find out that they could have submitted it to the contest instead of the maintenance programmers, and actually won fame!!!
  • by Idaho ( 12907 ) on Thursday August 10, 2000 @11:00AM (#864351)
    Of the Obfuscated C Code Contest.

    That contest could create some real good compiler tests.

    Like, how about a solution to Towers of Hanoi that let the compiler solve the problem by recursively including itself, eventually creating one huge 'printf()'-statement?
    And it used a compiler switch for the number of pegs. At the time I tested it, gcc broke (or my computer ran out of memory, I'm not really sure which of the two...) at 15 pegs.

    The solution to 14 pegs would create a over 1 MB executable containing just an MB of printf("really long string"); text.

    If I find a link to it somewhere I'll let you know. The International Obfuscated C Code Contest (IOCCC) has it's homepage at www.ioccc.org [ioccc.org], but I can't seem to remember the name of the program.
  • Obfuscated code? Hmmm...

    "Don't modify spaghetti code unless you can eat the consequences."

    Or, rather:

    !(modify $spaghetti{$code}) unless $eat{$consequences};

    (Shamelessly stolen from somebody's email sig)


    ---
  • Lots of languages have regex support these days. Other than that, and implicit variables (Pronouns for programming languages), what is really so bad about Perl?

    Sure, it looks unintelligable to someone who doesn't know it, but then so does french.
  • by Anonymous Coward
    cat is the archetypeal Unix program, a text filter that does nothing (despite this, it's one of the more useful things on your system - an irony not lost on Unix types). Thus the joke is that perl comes already obfuscated. Someone actually made the same joke earlier in a different manner, but this one is cute too (and perl is obfuscated enough to deserve more than one joke at its expense, yet useful enough to weather them all, albeit not exactly gracefully ;).
  • If somebody can rewrite that classic Spectrum ZX game Attack of the Killer Llamas in 2048 characters or less, that will win for sure :)
  • by smoondog ( 85133 ) on Thursday August 10, 2000 @11:02AM (#864370)
    Check out the C obfuscated contest from the 90's. If you haven't seen any of the winning programs before, you will be amazed, shocked and left in wonder (Like I wonder what the day job of these developers is...)

    International Obfuscated C page [ioccc.org] and the amazing and confounding winners [ioccc.org].

    My favorite is the tic tac toe game that is both the game and the code! [ioccc.org] (recompile to play next move...)


    -- Moondog
  • 10 A$="Hello World."
    20 ? A$

    --

To the systems programmer, users and applications serve only to provide a test load.

Working...