Filter::EOF - Run a callback after a file has been compiled


Filter-EOF documentation Contained in the Filter-EOF distribution.

Index


Code Index:

NAME

Top

Filter::EOF - Run a callback after a file has been compiled

VERSION

Top

0.04

SYNOPSIS

Top

  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

Top

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

Top

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

Top

on_eof_call

You can optionally import the on_eof_call function into your namespace.

EXAMPLES

Top

You can find the example mentioned in SYNOPSIS in the distribution directory examples/synopsis/.

SEE ALSO

Top

Filter::Call::Util, Exporting without using Exporter's import method in Exporter

AUTHOR AND COPYRIGHT

Top

LICENSE

Top

This program is free software; you can redistribute it and/or modify it under the same terms as perl itself.


Filter-EOF documentation Contained in the Filter-EOF distribution.
package Filter::EOF;

use warnings;
use strict;

our $VERSION = 0.04;

use Carp;
use Filter::Util::Call;

my %Export = (
    on_eof_call => sub { my $class = shift; sub (&) { $class->on_eof_call(@_) } },
);

sub import {
    my ($class, @names) = @_;
    for my $name (@names) {
        Carp::croak "Unknown function '$name'" unless exists $Export{ $name };
        no strict 'refs';
        *{ scalar(caller) . '::' . $name } = $Export{ $name }->($class);
    }
    return 1;
}

sub on_eof_call {
    my ($class, $code) = @_;

    my $past_eof;
    filter_add( sub {
        my $status = filter_read;
        return $status if $past_eof;
        if ($status == 0) {
            $code->(\$_);
            $status   = 1;
            $past_eof = 1;
        }
        return $status;
    });
}

1;