ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
10.15. Trapping Undefined Function Calls with AUTOLOADProblemYou want to intercept calls to undefined functions so you can handle them gracefully. SolutionDeclare a function called DiscussionAnother strategy for creating similar functions is to use a proxy function. If you call an undefined function, instead of automatically raising an exception, you can trap the call. If the function's package has a function named sub AUTOLOAD { use vars qw($AUTOLOAD); my $color = $AUTOLOAD; $color =~ s/.*:://; return "<FONT COLOR='$color'>@_</FONT>"; } #note: sub chartreuse isn't defined. print chartreuse("stuff"); When the nonexistent The technique using typeglob assignments shown in Recipe 10.14 is faster and more flexible than using { local *yellow = \&violet; local (*red, *green) = (\&green, \&red); print_stuff(); } While Aliasing subroutines like this won't handle calls to undefined subroutines. See AlsoThe section on "Autoloading" in Chapter 5 of Programming Perl and in perlsub (1); the documentation for the standard modules AutoLoader and AutoSplit, also in Chapter 7 of Programming Perl; Recipe 10.12; Recipe 12.10, Recipe 13.11 |