Quite often when I’m developing with a new framework or toolset I find it easy to write a small test script to make sure I understand the feature I’m working with. They’re sort of like sketches artists do while working on a piece or noodling an idea, or improve performances by actors trying to flesh out a character.
Some code I posted earlier today to the POE Cookbook started out as a sketch.
    #!/usr/bin/env perl
    use 5.10.0;
    {
        package Counter;
        use MooseX::POE;
        has count => (
            isa     => 'Int',
            is      => 'rw',
            default => 1,
        );
        has id => ( is => 'ro' );
        sub START {
            my ( $self, $kernel, $session ) = @_[ OBJECT, KERNEL, SESSION ];
            say 'Starting '.$self->id;
            $self->yield('dec');
        }
        event inc => sub {
            my ($self) = $_[OBJECT];
            say 'Count '.$self->id . ':' . $self->count;
            $self->count( $self->count + 1 );
            return if 3 < $self->count;
            $self->yield('inc');
        };
        sub on_dec {
            my ($self) = $_[OBJECT];
            say 'Count '.$self->id . ':' . $self->count;
            $self->count( $self->count - 1 );
            $self->yield('inc');
        }
        sub STOP {
            say 'Stopping '.$_[0]->id;
        }
        no MooseX::POE;
    }
    my @objs = map { Counter->new( id => $_ ) } ( 1 .. 10 );
    POE::Kernel->run();
I wrote this code initially to sketch out how MooseX::POE would work.
When I was writing it I had never used MooseX::POE, in fact nobody had since
I was still writing it. This code was a sketch to make sure that I understood
the interface I was developing and to make sure that it worked the way I
wanted.
Sometimes my sketches end up taking on a life of their own. The IRC bot Bender
on irc.perl.org started out as a sketch to learn POE::Component::IRC for a
project that has long since been abandoned. His is probably the oldest code
base that I developed that I still maintain, which is just to show you
sometimes the one you write to throw away never gets thrown away.
The final benefit I want to mention about code sketches is that they become
tests. The code above is part of the MooseX::POE test suite now, and
even if code doesn’t become an official part of the test suite of whatever I’m
working on … I can use it as a simple example of what I’m trying to achieve
so that I can ask others for help.