DOKK / manpages / debian 12 / libfilter-eof-perl / Filter::EOF.3pm.en
Filter::EOF(3pm) User Contributed Perl Documentation Filter::EOF(3pm)

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

0.04

  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;

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.

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 { ... };
  }
  ...

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;';
  });

You can optionally import the "on_eof_call" function into your namespace.

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

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

Robert 'phaylon' Sedlacek - "<rs@474.at>". Many thanks to Matt S Trout for the idea and inspirations on this module.

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

2022-10-13 perl v5.34.0