20 minutes.
60 modules.
Here are my slides (new window), and here is the content of that talk:
1 - Acme::ProgressBar, by Ricardo Signes
A simple progress bar for the patient
use Acme::ProgressBar; progress { sleep 5; }
2 - Acme::Apache::Werewolf, by Rich Bowen
Keeps werewolves out of a directory during the full moon
<Directory /fullmoon> PerlAccessHandler Acme::Apache::Werewolf PerlSetVar MoonLength 4 </Directory>
3 - Acme::Current, by Jesse Vincent
Determine current year, month, day (GMT)
use Acme::Current; printf "It's now %04d/%02d/%02d.\n", $Acme::Current::YEAR, $Acme::Current::MONTH, $Acme::Current::DAY;
"as long as all you want is the current date (GMT-based), and you keep the module up to date."
4 - Acme::Time::Baby, by Abigail
Tell time little children can understand
use Acme::Time::Baby; print babytime;
Prints "The big hand is on the five and the little hand is on the four"
5 - Acme::No, by Geoffrey Young
Makes no() work the way I want it to
use 5.6; # I use our(), so 5.6 is required no 6.0; # but this was coded for perl 5, not perl 6 # and the perl 6 compat layer isn't really 5.6 # so my code breaks under 6.0 use mod_perl 1.27; # we need at least version 1.27 no mod_perl 2.0; # but mod_perl 2.0 is entirely different than 1. +0 # so keep my cpan email to a minimum
FEATURES/BUGS: "probably lots"
6 - Acme::MetaSyntactic, by Philippe "Book" Bruhat
Themed metasyntactic variables names
use Acme::MetaSyntactic; # loads the default theme print metaname();
THEMES!
batman: zowie, klonk, zlonk
buffy: Buffy, Cordelia, Darla
TONS OF THEMES: alphabet amber antlers any apollo barbapapa barbarella batman booze browser buffy chess colors colours constellations contrade counting_rhyme crypto currency dancers debian dilbert discworld donmartin dwarves elements facecards flintstones foo garbage garfield gems groo haddock hhgg jamesbond jerkcity loremipsum lotr magic8ball magicroundabout monty_spam norse_mythology octothorpe opcodes oulipo pantagruel pasta peanuts pgpfone phonetic planets pm_groups pokemon pooh pop2 pop3 pornstars pumpkings punctuation pynchon python quantum robin roman scooby_doo services shadok simpsons smtp sql stars teletubbies tld tmnt toto trigan unicode us_presidents userfriendly viclones weekdays yapc
7 - Acme::NumericMethod, by gugod
"I know numeric methods"
use Acme::NumericMethod; print one(); # 1
8 - Acme::CreatingCPANModules, by COG
Created during a talk in London
Read the documentation and the code
9 - Acme::Comment, by Jos Boumans
Several different commenting styles
use Acme::Comment type => 'C++', own_line => 1; /* if (ref $mod) { $bar->{do}->blat(msg => 'blarg'); eval { i'm sooo sick of this time for some coffee */ // I prefer beer. --sqrn
10 - Acme::PM::Chicago, by Andy Lester
Functions useful for the Chicago.pm group
random_name
11 - Acme::AutoColor, by Robert Rothenberg
Automatic color names
use Acme::AutoColor; $red = RED(); # 'ff0000' @green = GREEN(); # (0, 255, 0)
12 - ACME::Error::SHOUT, by Casey West
ACME::Error Backend to Scream Errors
use ACME::Error SHOUT;
13 - Acme::PerlTidy, by XERN
Clean code every time
use Acme::PerlTidy; # your code here.
14 - Acme::Landmine, by David Nicol
Variables that explode
use Acme::landmine; # crucial, this line tie $scalar, "Acme::landmine" => "first use of \$scalar";
"useful for locating the first use of a variable after a checkpoint, while debugging."
15 - Acme::Colour, by Leon Brocard
Additive and subtractive human-readable colours
$c = Acme::Colour->new("black"); $colour = $c->colour; # black $c->add("red"); $c->add("green"); $colour = $c->colour; # yellow
16 - Acme::Octarine, by Nicholas Clark
Provides Octarine support for Acme::Colour
use Acme::Octarine; $c = Acme::Colour->new("octarine");
WARNING: may leak magic
17 - Acme::Orange, by Nicholas Clark
Like Acme::Colour but only for important colours
$c = Acme::Orange->new(); $colour = $c->colour; # orange $c->add("orange"); # $c->colour still orange $c->add("blue"); # $c->colour still orange $c = Acme::Orange->new("pink"); $colour = $c->colour; # orange.
18 - Acme::Spider, by Marty Pauley
Frighten some other modules
use Acme::Spider;
"Damian Conway is afraid of spiders, and all his code is afraid of this spider."
"As the spider evolves, it will become better at recognising Damian's modules."
19 - Acme::LAUTER::DEUTSCHER, by Ian Langworth
Make your program's output indistinguishable from someone yelling German
use Acme::LAUTER::DEUTSCHER; print "Timmy pet the cute puppy.\n";
Produces the following output:
DIETER HAUSTIER DER NETTE WELPE!
20 - Acme::Bleach, by Damian Conway
For really clean programs
use Acme::Bleach; print "Hello world";
"the module removes all the unsightly printable characters from your source file."
use Acme::Bleach;
21 - Acme::Morse, by Damian Conway
Perl programming in morse code
use Acme::Morse; print "S-O-S\n";
Code turns into:
use Acme::Morse; .--.-..--..---.-.--..--.-..--..---.-.--. .-.-........---..-..---.-..-.--..---.--. ..-.---......-...-...-..--..-.-.-.--.-.. ----..-.-.--.-..--..-.-...---.-..---.--. .-...-..--.---...-.-....
22 - Acme::Buffy, by Leon Brocard
An encoding scheme for Buffy the Vampire Slayer fans
use Acme::Buffy; print "Hello world";
Code turns into:
use Acme::Buffy; BUffY bUFFY BUffY bUFFY bUfFy buffy BUFfy buFFY BufFy BufFY + bUFfy BuFFY buffy bufFy bUffy bUffY BuFfy BuffY bUFfy BUfFY + BUFFy Buffy bUffY BuFFY BUFFy BufFy BUFfy BUfFY buFfy BuffY BuFfy BUfFY bUffy + buFFy BUffy bUffy
23 - Acme::Pony, by David Cantrell
An encoding scheme for Silly People
use Acme::Pony; print "Hello world";
Code turns into:
use Acme::Pony; b U fFybuf fybuFFYbuF fyBUFfYbuFf YBufFYBuFFybu FfYBUffybufFyb uFfybUffybUffyBu FfyBuFFybuFfyB UffYBUfFYbUFF yb UffybUfFYBuffyb uFfy buFfYBUffybUfFYbUffYbUF fyBUFfY BuFFyBuFFybuffyBufFybufFYbuFFYbUFfYbuF FYBu FFYBuFFybUFFyBUfFyBufFYbuffybUffYBUf FYBu FFYBuFFyBuFfYBUffyBUfFYbufFybUFfybu ffYb ufFybUFFyBuFfYBUffYBUfFYbuffybUff yb UfFYBuffyBuFFyBufFyBUfFYbuFFYb uFFYb UffyBUFfYbufFYBuF fybU ffyBufFYbUFFybu FfYb uffyBu FfybuF FYBU fFyBUFF YbUfF yBu ffY buF FYbuF fyb Uff yBu FFY BUf FyB UFF YbU fXXX XX
24 - Acme::EyeDrops, by Andrew J. Savige
Visual Programming in Perl
use Acme::EyeDrops qw(sightly); print sightly( { Shape => 'camel', SourceFile => 'eyesore.pl' } );
And the result is something like:
.('`'^'/').('['^ ')').('`'|'!').('`'|'.' ).('`'|"'").('`'|'%').('{'^'[' ).''. ('[' ^'(' ).( '`'| '+' ).+( ( '[' )^(( ( '"' )))) .( ( '{' )^(( ( ( '[' ))) )) .( '[' ^(( (( ( '(' ))) ))). ( '[' ^(( '.') ) ).( '[' ^')' ) .+( '[' ^(')')).( ( '`' )|+ (( ( (( '/' )) ) )) ).( ( ( (( '[' ) )))^+ '.' ) .( '`' | '.').('`'|'$').('['^'(').('!'^('+')).( '!' ^'+').("\`"^ "\,").( ( ( "\`"))| ( '!' ) ) .+( '`' |+ ( ( (( '-' ))) ) ).( ( ( '`'))|'"').( ( ( '`'))|'$').( ( '`' ) | ( ( ( (( '!' ) ) ) )) ) .( ( '{')^ ( ( (( ( (( ( ( ( ( ( ( (( ( '[' ))))))))))))))) ) ).('`'|'('). +( ( ( ( ( ( ( ( ( ( ( ( ( '[' ) ) ) ))) )) ) ) ) )^'.').('`'|"'").('[' ^ ( ( '('))).('{'^'[').(('`')| ( ( ( '#')))).('`'|'!').('`'|'-' ) . ( "\`"| '%').('`'|',') .''. ( ( ( '!') ) ^ '+' ) .( '{' ^'+').('['^')'). ((( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( '`' )) ) ) ))))))))))) )
25 - Acme::PerlML, by Adam Kennedy
Replaces your ugly Perl code with powerful XML
use Acme::PerlML; print "Hello World!\n";
26 - Acme::Palindrome, by Casey West
Programs are the same backward and forward
use Acme::Palindrome; print "Hello world";
Code turns into:
use Acme::Palindrome; ;"dlrow olleH" tnirp
27 - Acme::Python, by Cal Henderson
For real python programs
use Acme::Python; print "Hello world\n";
Code turns into:
use Acme::Python; Hisssssssssssssssss hiss Hiss hiss Hiss hisssssssss Hissss hisss Hiss hisss Hissss hiss Hiss hisss Hiss hiss Hisss hisss Hissss hiss Hisss hissss Hiss hiss Hissss hisssssss Hiss hissss Hiss hissss Hiss hissssss Hiss hisss Hiss hiss Hiss hiss Hiss hisss Hisss hissss Hisss hiss Hisss hissss Hisss hiss Hisss hiss Hisssss hiss Hisss hisssssss Hiss hisss Hissss hiss Hiss hiss Hiss hiss Hisssss hiss Hisss hisss Hiss hisss Hissss hissss Hisss hiss Hisss hissss Hiss hisss Hisss hissss Hissss hiss Hiss hisss Hissss hiss Hisss hisss Hiss hissss Hiss hisss Hisss hiss Hissss hisss
28 - Acme::Bleach::Numerically, by Dan Kogai
Fit the whole world between 0 and 1
use Acme::Bleach::Numerically; print "Hello, world!\n";
Code turns into:
0.04077830385217895611955160212512929196016776281431819016525415740357 +276847685546830674148636286630688176512385587746157153993832269969945 +108065634565146854816801317130164957814821591216272596262777549929907 +106239320662736498321147589742139555335498357635515276342630386352539 +0625
29 - Acme::DoubleHelix, by XERN
Double-helix programming
use Acme::DoubleHelix; print "Hello";
Code turns into:
CG T--A A---T A----T C----G T----A A---T G--C AT CG C--G G---C G----C C----G A----T C---G G--C TA CG C--G A---T A----T A----T A----T T---A G--C CG AT T--A G---C G----C C----G C----G G---C C--G TA CG G--C A---T G----C T----A G----C A---T A--T CG AT C--G A---T C----G A----T G----C A---T A--T GC CG A--T T---A G----C G----C G----C C---G G--C AT AT C--G A---T G----C C----G T----A G---C T--A TA CG G--C G---C G----C T----A G----C A---T A--T CG AT A--T G---C T----A G----C C----G A---T T--A GC GC C--G T---A G----C G----C C----G C---G G--C CG TA C--G G---C T----A G----C C----G G---C A--T AT CG A--T A---T G----C T----A G----C T---A T--A CG GC A--T A---T C----G A----T C----G A---T C--G GC CG A--T T---A G----C G----C G----C C---G G--C GC AT C--G G---C T----A C----G C----G G---C A--T AT CG A--T G---C A----T C----G G----C A---T T--A CG GC A--T T---A C----G G----C A----T A---T C--G AT AT G--C T---A G----C A----T C----G C---G G--C GC CG C--G G---C T----A A----T T----A G---C T--A TA TA A--T C---G A----T C----G A----T T---A C--G TA AT C--G C---G A----T A----T
30 - Acme::Smirch, by Jasvir Nagra
For really dirty programs
use Smirch; Smirch::smear("tooClean.pl");
Result is something like:
$==$'; $;||$.| $|;$_ ='*$ ( ^@(%_+&~~;# ~~/.~~ ;_);;.);;#) ;~~~~;_,.~~,.* +,./|~ ~;_);@-, .;.); ~ ~,./@@-__);@-);~~,.*+,. /|);;;~~@-~~~~;;(),. ;.,./@,./@,.;_~~@-););,. ;_);~~,./@,.;;;./@,./ |~~~~;#-(@-__@-__&$#%^';$__ ='`'&'&';$___="````" |"$[`$["|'`%",';$~=("$___$__-$[``$__"| "$___"| ("$___$__-$[.%")).("'`"|"'$["|"'#"). '/.*?&([^&]*)&.*/$'.++$=.("/``"|"/$[`"|"/#'").(";`/[\\`\\`$__] +//`;" |";$[/[\\$[\\`$__]//`;"|";#/[\\\$\\.$__]//'").'@:=("@-","/.", "~~",";#",";;",";.",",.",");","()","*+","__","-(","/@",".%","/| +", ";_");@:{@:}=$%..$#:;'.('`'|"$["|'#')."/(..)(..)/".("```"|"``$ +["| '#("').'(($:{$'.$=.'}<<'.(++$=+$=).')|($:{$'.$=.'}))/'.("```;" +| "``$[;"|"%'#;").("````'$__"|"%$[``"|"%&!,").${$[};`$~$__>&$=`; +$_= '*$(^@(%_+&@-__~~;#~~@-;.;;,.(),./.,./|,.-();;#~~@-);;;,.;_~~@- +,./., ./@,./@~~@-);;;,.(),.;.~~@-,.,.,.;_,./@,.-();;#~~@-,.;_,./|~~@ +-,. ,.);););@-@-__~~;#~~@-,.,.,.;_);~~~~@-);;;,.(),.*+);;# ~~@-, ./|,.*+,.,.);;;);*+~~@-,.*+,.;;,.;.,./.~~@-,.,.,.;_) ;~~~ ~@-,.;;,.;.,./@,./.);*+,.;.,.;;@-__~~;#~~@-,.;;,.* +);; #);@-,./@,./.);*+~~@-~~.%~~.%~~@-;;__,. /.);;#@- __@- __ ~~;;);/@;#.%;#/.;#-(@-__~~;;;.;_ ;#.%~~~~ ;;() ,.;.,./@,. /@,.;_~~@- ););,.;_ );~~,./ @,. ;;;./@,./| ~~~~;#-(@- __,.,.,. ;_);~~~ ~@ -~~());; #);@-,./@, .*+);;; ~~@-~~ );~~);~~ *+~~@-);-( ~~@-@-_ _~~@- ~~@-);; #,./@,.;., .;.);@ -~~@-; #/.;#-( ~~@-@-__ ~~@-~~ @-);@ -);~~, .*+,./ |);;;~ ~@-~~ ;;;.; _~~@-@ -__);. %;#-( @-__@ -__~~;# ~~@-;; ;#,. ;_,.. %);@-,./@, .*+, ..%, .;.,./|) ;;;) ;;#~ ~@-,.*+,. ,.~~ @-); *+,.;_);;.~ ~);); ~~,.; .~~@-);~~,.;., ./.,.; ;,.*+ ,./|,.); ~~@- );;;,.( ),.*+); ;#~~/|@- __~~;#~~ $';$;;
31 - Acme::BadExample, by Adam Kennedy
Perl document, yes. Perl code, no damn way!
32 - Acme::Everything, by Adam Kennedy
Effectively loads every class in CPAN
use Acme::Everything; Any::Module->any_method;
33 - Acme::AsciiArt2HtmlTable, by COG
34 - Acme::Lingua::NIGERIAN, by Jörg Walter
WRITE PERL CODE IN NIGERIAN SPAM
#!/usr/bin/perl use Acme::Lingua::NIGERIAN; DEAR SIR, I AM THE SON OF LATE PRESIDENT ONE-OR-THE-OTHER OF NIGERIA. TRANSFER_DISCREETLY SWISS_BANK_ACCOUNT "H!!!ELLO N!!!IGERIA\N"; TRANSFER_DISCREETLY SWISS_BANK_ACCOUNT US$17 MILLION, "\N"; TRANSFER_DISCREETLY SWISS_BANK_ACCOUNT US$17 MILLION + 25, "\N";
Copyright and License
THIS MODULE MAY BE MASS-EMAILED UNDER THE SAME TERMS AS PERL ITSELF.
35 - Acme::Scurvy::Whoreson::BilgeRat, by David Cantrell
Multi-lingual insult generator
use Acme::Scurvy::Whoreson::BilgeRat; my $insultgenerator = Acme::Scurvy::Whoreson::BilgeRat->new( language => 'pirate' ); print $insultgenerator; # prints a piratical insult
36 - Acme::Scripticide, by Daniel Muey
allow your script to kill itself
use Acme::Scripticide qw(good_bye_cruel_world); if(i_take_medication_and_therapy()) { print "Take that Tom Cruise, you wacky weirdo, tell Jackson how +dy."; } else { good_bye_cruel_world(); }
37 - Acme::Scriptophrenic, by Daniel Muey
Create scripts that randomly change personality
use Acme::ScriptoPhrenic; path/to/script.pl path/to/another_script.pl path/to/you/guessed/it/another/script.pl
38 - Acme::JAPH, by Casey West
Turn anything into a JAPH
use Acme::JAPH a;ltiucqpoc3iqp04tu1 -394t8[ieufea[=09E U 0ET 9u [4tu]]]
39 - Acme::MJD, by D.H.
Mark Jason Dominus does perl
use Acme::MJD; print "Hello world";
Code turns into:
use Acme::MJD; Read. Learn. Evolve. -- Mark Jason Dominus
40 - Acme::DeepThoughts, by D.H.
Jack Handey does perl
use Acme::DeepThoughts; print "Hello world";
Code turns into:
use Acme::DeepThoughts To us, it might look like just a rag. But to the brave, embattled me +n of the fort, it was more than that. It was a flag of surrender. And after that, it was torn up and used for shoe-shine rags, so the men would look nice for the surrender. -- Jack Handey
41 - Acme::Bushisms, by Michael Accardo
Dubya Does Perl
use Acme::Bushisms; print "Hello world";
Code turns into:
use Acme::Bushisms; "Families is where our nation finds hope, where wings take dream." --George W Bush, LaCrosse, Wis., Oct. 18, 2000
42 - Acme::PreReq::A, by Michael Schilli
Module for testing CPAN module prerequisites
use Acme::Prereq::A;
43 - Acme::PreReq::B, by Michael Schilli
Module for testing CPAN module prerequisites
use Acme::Prereq::B;
44 - Acme::MorningMusume, by Kentaro Kuribayashi
All about the Japanese pop star "Morning Musume"
use Acme::MorningMusume; my $musume = Acme::MorningMusume->new; # retrieve the members on their activities my @members = $musume->members; # retrieve +all my @active_members = $musume->members('active'); my @graduate_members = $musume->members('graduate'); my @at_some_time_members = $musume->members(Date::Simple->new('2001- +01-01'));
45 - Acme::Playmate, by Olle de Zwart
Consult the playboy playmate directory for playmate information.
use Acme::Playmate; my $playmate = new Acme::Playmate("2003", "04"); print "Details for playmate " . $playmate->{ "Name" } . "\n"; print "Birthdate" . $playmate->{ "BirthDate" } . "\n"; print "Birthplace" . $playmate->{ "BirthPlace" } . "\n"; print "Bust" . $playmate->{ "Bust" } . "\n"; print "Waist" . $playmate->{ "Waist" } . "\n"; print "Hips" . $playmate->{ "Hips" } . "\n"; print "Height" . $playmate->{ "Height" } . "\n"; print "Weight" . $playmate->{ "Weight" } . "\n";
46 - Acme::Your, by Richard Clamp
Not our variables, your variables
use Data::Dumper; use Acme::Your "Data::Dumper"; your $Varname; # This is really $Data::Dumper::Varname print "The default variable name for DD is $Varname";
47 - Acme::ButFirst, by Paul Jamieson Fenwick
Do something, but first do something else.
use Acme::ButFirst; # Print a greeting, but first find caffiene. { print "Good morning!\n"; } but first { print "I need a coffee\n"; }
48 - Acme::Don't, by Damian Conway
The opposite of do
use Acme::Don't; don't { print "This won't be printed\n" };
49 - Acme::Dot, by Curtis "Ovid" POE
Call methods with the dot operator
package Foo; use Acme::Dot; sub new { bless {}, shift } sub hello { print "Hi there! (@_)\n" } package main; my $x = new Foo; $x.hello(1,2,3); # Calls the method
50 - Acme::Damn, by Ian Brayshaw
'Unbless' Perl objects.
use Acme::Damn; my $ref = ... some reference ... my $obj = bless $ref , 'Some::Class'; ... do something with your object ... $ref = damn $obj; # recover the original reference (unblessed) ... neither $ref nor $obj are Some::Class objects ...
51 - Acme::Holy, by Ian Brayshaw
Test whether references are blessed.
use Acme::Holy; my $ref = ... some reference ... my $obj = bless $ref , 'Some::Class'; print holy( $obj ); # prints 'Some::Class' print ( holy [] ? 'object' : 'not object' ); # prints 'not object'
52 - Acme::Currency, by Steffen Müller
There are other currencies beside $$$
use Acme::Currency '¥'; ¥money = '¥1.12'; @time = ( ¥money, ¥and_I_mean_it );
53 - Acme::ComeFrom, by Audrey
Parallel goto-in-reverse
use Acme::ComeFrom; sub func { print "@_" }; func("start\n"); print "won't happen\n"; comefrom &func; print "branch 1\n"; exit; comefrom &func; print "branch 2\n"; label: print "won't happen either\n"; comefrom label; print "branch 2.1\n"; exit; comefrom label; print "branch 2.2\n"; expr0: print "to be\n"; exit; comefrom "expr".int(rand(2)); print "not to be\n";
54 - Acme::DWIM, by Damian Conway
Perl's confusing operators made easy
use Acme::DWIM; my ($x) = +("Hullo " x 3 . "world" & "~" x 30) =~ /(.*)/; $x =~ tr/tnv/uow/; print $x;
Code turns into:
use Acme::DWIM; my ($x) ... ...("Hullo " ... 3 ... "world" ... "~" ... 30) ... /(... +)/; $x ... tr/tnv/uow/; print $x;
55 - Acme::Pythonic, by Xavier Noria
Python whitespace conventions for Perl
use Acme::Pythonic; # this semicolon yet needed sub delete_edges: my $G = shift while my ($u, $v) = splice(@_, 0, 2): if defined $v: $G->delete_edge($u, $v) else: my @e = $G->edges($u) while ($u, $v) = splice(@e, 0, 2): $G->delete_edge($u, $v)
56 - Acme::MethodCaseInsensitive, by Malte Ubl
Case insensitive method invocation
use Acme::Method::CaseInsensitive; package Class; sub foo_bar { print "it works" } Class->FoO_bAR;
57 - Acme::Goto::Line, by Arthur Bergman
Goto with line number
use Acme::Goto::Line; print "This is a loop\n"; goto(2);
58 - Acme::VerySign, by Mark Fowler
make unused subroutines useful
use Acme::VerySign; sub hello { "Hello World" } print helo(); print "Did you mean: $_ ?" foreach @{ helo() } helo()->buy(); print helo();
59 - Acme::Code::Police, by Curtis "Ovid" POE
Enforce rigorous coding standards
#!/usr/bin/perl use Acme::Code::Police;
Provide this module to programmers who fail to use strict and most of their coding errors will be instantly eliminated.
60 - Acme::Code::FreedomFighter, by Greg McCarroll
Defends our right to code in any style waiting for the right moment to strike back at the evil oppressors.
#!/usr/bin/perl use Acme::Code::FreedomFighter; use Acme::Code::Police;
20060703 Janitored by Corion: Added newline into CODE tag to enable wrapping