The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Devel::DidYouMean - Intercepts failed function and method calls, suggesting the nearest matching alternative.

VERSION

version 0.05

SYNOPSIS

    #!/usr/bin/env perl

    # somescript.pl
    use Data::Dumper;
    use Devel::DidYouMean;

    print Dumpr($data); # wrong function name

*Run the code*

    $ somescript.pl
    Undefined subroutine &main::Dumpr called at somescript.pl line 7.
    Did you mean Dumper?

Or as a one liner:

    $ perl -MData::Dumper -MDevel::DidYouMean -e 'print Dumpr($data)'
    Undefined subroutine &main::Dumpr called at -e line 1.
    Did you mean Dumper?

Or trap the error and extract the matching subs

    use Devel::DidYouMean;
    use Try::Tiny;

    try
    {
        sprintX("", $text); # boom
    }
    catch
    {
        my $error_msg = $_;
        my @closest_matching_subs = @$Devel::DidYouMean::DYM_MATCHING_SUBS;

        # do something cool here
    }

DESCRIPTION

Devel::DidYouMean intercepts failed function and method calls, suggesting the nearest matching available subroutines in the context in which the erroneous function call was made.

THANKS

This module was inspired by Yuki Nishijima's Ruby gem did_you_mean.

Chapter 9 "Dynamic Subroutines" in Mastering Perl second edition by brian d foy was a vital reference for understanding Perl's symbol tables.

tipdbmp on reddit for pointing me in the direction of signal handling instead of the previous AUTOLOAD approach.

SEE ALSO

Symbol::Approx::Sub is a similar module that catches invalid subroutine names and then executes the nearest matching subroutine it can find. It does not export AUTOLOAD to all namespaces in the symbol table.

Mark Jason Dominus' 2014 !!Con talk and 2008 blog post about a similar function.

AUTHOR

David Farrell <sillymoos@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by David Farrell.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.