Devel::DidYouMean - Intercepts failed function and method calls, suggesting the nearest matching alternative.
version 0.04
#!/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 'Dumpr' not found in main. Did you mean Dumper? at somescript.pl line 7.
Or as a one liner:
$ perl -MData::Dumper -MDevel::DidYouMean -e 'print Dumpr($data)' Undefined subroutine 'Dumpr' not found in main. Did you mean Dumper? at -e line 1.
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 }
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.
This library is experimental, on load it exports an AUTOLOAD subroutine to every namespace in the symbol table. In version 0.03 and higher, this library must be loaded using use and not require. In version 0.04 and higher it will not overwrite an existing AUTOLOAD in a namespace.
use
require
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.
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.
David Farrell <sillymoos@cpan.org>
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.
To install Devel::DidYouMean, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Devel::DidYouMean
CPAN shell
perl -MCPAN -e shell install Devel::DidYouMean
For more information on module installation, please visit the detailed CPAN module installation guide.