O'Reilly logo

Games, Diversions & Perl Culture by Jon Orwant

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Chapter 25. Correcting Typos with Perl

Dave Cross

Symbol::Approx::Sub is a Perl module that allows us to call subroutines even if we spell their names wrong. Using it can be as simple as adding this to your programs:

use Symbol::Approx::Sub;

Once we’ve done this, we never have to worry about spelling our subroutine names correctly again. For example, this program prints This is the foo subroutine!, even though &foo was misspelled as &few.

use Symbol::Approx::Sub;

sub foo {
    print "This is the foo subroutine!\n";
}

&few;

Why Was It Written?

This is obviously a very dangerous thing to want, so what made me decide to write Symbol::Approx::Sub?

In July 2000 I attended the O’Reilly Perl Conference and took Mark Jason Dominus’s “Tricks of the Wizards” tutorial. He explained a number of concepts that can take your Perl programs to a new level of complexity and elegance. The most important of these concepts are typeglobs and the AUTOLOAD function. It was the first time that I’d really tried to understand either of these concepts and, thanks to Dominus’s clear explanations, I began to understand their power.

One example that Dominus used in this class was a demonstration of how we can use AUTOLOAD to catch misspelled subroutine names and perhaps do something about it. He showed a slide containing code like this:

sub AUTOLOAD {
    my ($sub) = s/.*::(.*)/;
    # Work out what sub the user really meant
    $sub = get_real_name_of_sub($sub);

    goto &$sub;
}

On the following slide, he went into some detail about what ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required