1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
NAME
Filter::EOF - Run a callback after a file has been compiled
VERSION
0.04
SYNOPSIS
package MyPackage;
use warnings;
use strict;
use Filter::EOF;
sub import {
my ($class, @args) = @_;
my $caller = scalar caller;
# set the COMPILE_TIME package var to a false value
# when the file was compiled
Filter::EOF->on_eof_call(sub {
no strict 'refs';
${ $caller . '::COMPILE_TIME' } = 0;
});
# set the COMPILE_TIME package var to a true value when
# we start compiling it.
{ no strict 'refs';
${ $caller . '::COMPILE_TIME' } = 1;
}
}
1;
...
package MyUsingPackage;
use warnings;
use strict;
our $COMPILE_TIME;
use MyPackage;
# prints 'yes'
BEGIN { print +( $COMPILE_TIME ? 'yes' : 'no' ), "\n" }
# prints 'no'
print +( $COMPILE_TIME ? 'yes' : 'no' ), "\n";
1;
DESCRIPTION
This module utilises Perl's source filters to provide you with a
mechanism to run some code after a file using your module has been
processed.
METHODS
"import( @functions )"
Currently, only a function equivalent of the "on_eof_call" method is
provided for export.
use Filter::EOF qw( on_eof_call );
sub import {
my ($class) = @_;
...
on_eof_call { ... };
}
...
"on_eof_call( $code_ref )"
Call this method in your own "import" method to register a code
reference that should be called when the file "use"ing yours was
compiled.
The code reference will get a scalar reference as first argument to an
empty string. if you change this string to something else, it will be
appended at the end of the source.
# call C<some_function()> after runtime.
Filter->on_eof_call(sub {
my $append = shift;
$$append .= '; some_function(); 1;';
});
EXPORTS
on_eof_call
You can optionally import the "on_eof_call" function into your
namespace.
EXAMPLES
You can find the example mentioned in "SYNOPSIS" in the distribution
directory "examples/synopsis/".
SEE ALSO
Filter::Call::Util, "Exporting without using Exporter's import method"
in Exporter
AUTHOR AND COPYRIGHT
Robert 'phaylon' Sedlacek - "<rs@474.at>". Many thanks to Matt S Trout
for the idea and inspirations on this module.
LICENSE
This program is free software; you can redistribute it and/or modify it
under the same terms as perl itself.
|