So yesterday I gave a talk on Acme modules.

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; } [download]

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> [download]

3 - Acme::Current, by Jesse Vincent

Determine current year, month, day (GMT)

use Acme::Current; printf "It's now %04d/%02d/%02d.

", $Acme::Current::YEAR, $Acme::Current::MONTH, $Acme::Current::DAY; [download]

"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; [download]

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 [download]

FEATURES/BUGS: "probably lots"

6 - Acme::MetaSyntactic, by Philippe "Book" Bruhat

Themed metasyntactic variables names

use Acme::MetaSyntactic; # loads the default theme print metaname(); [download]

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 [download]

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 [download]

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

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. [download]

14 - Acme::Landmine, by David Nicol

Variables that explode

use Acme::landmine; # crucial, this line tie $scalar, "Acme::landmine" => "first use of \$scalar"; [download]

"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 [download]

16 - Acme::Octarine, by Nicholas Clark

Provides Octarine support for Acme::Colour

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. [download]

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.

"; [download]

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"; [download]

"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

"; [download]

Code turns into:

22 - Acme::Buffy, by Leon Brocard

An encoding scheme for Buffy the Vampire Slayer fans

use Acme::Buffy; print "Hello world"; [download]

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 [download]

23 - Acme::Pony, by David Cantrell

An encoding scheme for Silly People

use Acme::Pony; print "Hello world"; [download]

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 [download]

24 - Acme::EyeDrops, by Andrew J. Savige

Visual Programming in Perl

use Acme::EyeDrops qw(sightly); print sightly( { Shape => 'camel', SourceFile => 'eyesore.pl' } ); [download]

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!

"; [download]

26 - Acme::Palindrome, by Casey West

Programs are the same backward and forward

use Acme::Palindrome; print "Hello world"; [download]

Code turns into:

use Acme::Palindrome; ;"dlrow olleH" tnirp [download]

27 - Acme::Python, by Cal Henderson

For real python programs

use Acme::Python; print "Hello world

"; [download]

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 [download]

28 - Acme::Bleach::Numerically, by Dan Kogai

Fit the whole world between 0 and 1

use Acme::Bleach::Numerically; print "Hello, world!

"; [download]

Code turns into:

0.04077830385217895611955160212512929196016776281431819016525415740357 + 276847685546830674148636286630688176512385587746157153993832269969945 + 108065634565146854816801317130164957814821591216272596262777549929907 + 106239320662736498321147589742139555335498357635515276342630386352539 + 0625 [download]

29 - Acme::DoubleHelix, by XERN

Double-helix programming

use Acme::DoubleHelix; print "Hello"; [download]

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 [download]

30 - Acme::Smirch, by Jasvir Nagra

For really dirty programs

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

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"; [download]

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 [download]

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(); } [download]

37 - Acme::Scriptophrenic, by Daniel Muey

Create scripts that randomly change personality

38 - Acme::JAPH, by Casey West

Turn anything into a JAPH

use Acme::JAPH a;ltiucqpoc3iqp04tu1 -394t8[ieufea[=09E U 0ET 9u [4tu]]] [download]

39 - Acme::MJD, by D.H.

Mark Jason Dominus does perl

use Acme::MJD; print "Hello world"; [download]

Code turns into:

use Acme::MJD; Read. Learn. Evolve. -- Mark Jason Dominus [download]

40 - Acme::DeepThoughts, by D.H.

Jack Handey does perl

use Acme::DeepThoughts; print "Hello world"; [download]

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 [download]

41 - Acme::Bushisms, by Michael Accardo

Dubya Does Perl

use Acme::Bushisms; print "Hello world"; [download]

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 [download]

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')); [download]

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" } . "

"; print "Birthdate" . $playmate->{ "BirthDate" } . "

"; print "Birthplace" . $playmate->{ "BirthPlace" } . "

"; print "Bust" . $playmate->{ "Bust" } . "

"; print "Waist" . $playmate->{ "Waist" } . "

"; print "Hips" . $playmate->{ "Hips" } . "

"; print "Height" . $playmate->{ "Height" } . "

"; print "Weight" . $playmate->{ "Weight" } . "

"; [download]

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"; [download]

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!

"; } but first { print "I need a coffee

"; } [download]

48 - Acme::Don't, by Damian Conway

The opposite of do

use Acme::Don't; don't { print "This won't be printed

" }; [download]

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! (@_)

" } package main; my $x = new Foo; $x.hello(1,2,3); # Calls the method [download]

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 ... [download]

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' [download]

52 - Acme::Currency, by Steffen Müller

There are other currencies beside $$$

53 - Acme::ComeFrom, by Audrey

Parallel goto-in-reverse

use Acme::ComeFrom; sub func { print "@_" }; func("start

"); print "won't happen

"; comefrom &func; print "branch 1

"; exit; comefrom &func; print "branch 2

"; label: print "won't happen either

"; comefrom label; print "branch 2.1

"; exit; comefrom label; print "branch 2.2

"; expr0: print "to be

"; exit; comefrom "expr".int(rand(2)); print "not to be

"; [download]

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; [download]

Code turns into:

use Acme::DWIM; my ($x) ... ...("Hullo " ... 3 ... "world" ... "~" ... 30) ... /(... + )/; $x ... tr/tnv/uow/; print $x; [download]

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) [download]

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; [download]

57 - Acme::Goto::Line, by Arthur Bergman

Goto with line number

use Acme::Goto::Line; print "This is a loop

"; goto(2); [download]

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(); [download]

59 - Acme::Code::Police, by Curtis "Ovid" POE

Enforce rigorous coding standards

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.