A version of this article is published on my Perl blog.
The Amazon booth at OSCON 2008 is advertising heavily that they are hiring. They are also holding a raffle. To enter, simply look over some Perl code they have written out on some poster board and tell them what it does. It looks a little something like this (transcribing from memory):
my $code = qq{
print 1+1 . "\n";
$code =~ m/(\d+)\+(\d+)/;
$new = $1 + $2;
$code =~ s/\d+\+(\d+)/$2+$new/;
};
for ( 1 .. 10 ) {
eval($code);
}
What’s the first bug? Yes, it should use q{}, or the variables will interpolate on the initial assignment to $code. To their credit, they initially used single quotes, but people said it was too hard to read.
I wasn’t content with just figuring out what the code did and fixing a small bug. I think it can be written better.
eval($code = q{
print 1+1 . "\n";
$code =~ s/(\d+)(\+)(\d+)/"$3$2" . ($1 + $3)/e;
eval $code;
});
Much better. Not only is it more concise, I was able to remove that pesky loop, so I wouldn’t be bothered by any silly upper bounds.
So what does it do? Should be obvious. Head over to the Amazon booth and let them know.