The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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 useing 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.