http://qs321.pair.com?node_id=338574


in reply to Slashdot lamejoke generator

How to run this beast? I created file joke.pl, it starts with:

#!/usr/bin/perl $|++;;($;,$:,$,,$\,$^,$==>$~,$.,$})=("Izntvar n", "Prey pbqr","fpevor"=> "!$/","ernql"=>$^F, ...
but when I run it I get:
Missing comma after first argument to join or string function at ./jok +e.pl line 7, near "@_]" Execution of ./joke.pl aborted due to compilation errors.
I run:
perl -version
This is perl, v5.8.3 built for i386-linux-thread-multi

Ugh, help?

Max

Edited by Chady -- fixed formatting.

Replies are listed 'Best First'.
Re: How to run it?
by jonadab (Parson) on Mar 23, 2004 at 19:33 UTC
    Missing comma after first argument to join or string function at ./joke.pl line 7, near "@_]"

    Hmmm.... weird. Are you certain you copied it exactly? This is line 7:

    for join$',@$die[        $%,$==>$|]}}map{[map{sub

    There's no occurance of @_] there. There is one on line 6:

    split//,pop@_]}@%=        map{my$die=$_;sub{print

    I don't see anyplace there on line 6 where a comma is wanted, so maybe it really is talking about line 7, but on line 7 there most certainly is a comma after the first argument to join.

    It has been reported to work on versions from 5.005 through 5.8.1, but it is possible that something changed from then to 5.8.3 that throws it off. If for example $' were handled differently, that could maybe break it. Or if the precedence tables changed -- but that seems unlikely; I don't thing the precedence tables are going to change much in Perl5, because that would break *lots* of existing code. (Perl6 is going to change them, but Perl6 is changing *lots* of stuff; Perl5 code will not be able to parse as Perl6 code and mean the same thing, generally, though Perl6 will be able to parse it as Perl5 code.)

    I'm not sure what the newest Perl I have access to is, but I'm pretty sure it's not 5.8.3, so I'd have to do an upgrade. I can't justify that here; maybe at home later, time permitting -- but doublecheck also to make sure you have the code copied exactly.


    ;$;=sub{$/};@;=map{my($a,$b)=($_,$;);$;=sub{$a.$b->()}} split//,".rekcah lreP rehtona tsuJ";$\=$;[-1]->();print