The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package IO::Infiles;

use v5.8;
use strict;
use warnings;
use Fatal qw(open);

our $VERSION = '0.06';



sub inlinefiles {
        m/ ^__([A-Z]\w+)__\s*\n
           (.*?)
           (?=__[A-Z]\w+__\s*\n | \Z)
        /xsmgo;
}

sub import {
        local $_ = do{ local $/; open 0; <0>};
        (my $pack)= (caller 1)[3] =~ /^(.*::)/g ;
        my %files = inlinefiles;
        no strict 'refs' ; no warnings 'once';
        open *{$pack.$_} , '<', \$files{$_}   for keys(%files);
}


1;
__END__ 

=head1 NAME

IO::Infiles - Multiple handlers for multiple __END__-like tokens

=head1 SYNOPSIS

  use IO::Infiles;

  __END__
  end data 
  __FOO__
  foo data
  more
  __JOHN__
  john data

=head1 DESCRIPTION

This module adds more token sections at the end of your code. The
first token must be named __END__ ; as before, its data are available 
through the END handler. If there are more token sections with other names, 
handlers of the same name will all be pre-opened.


=head2 EXPORT

One read-only IO handler is exported for each token name.


=head1 TROUBLESHOOTING

The first token should be the __END__ token. If instead you use __DATA__ 
as the name for the first token, you will receive the warning "Attempt to free 
unreferenced scalar: SV 0x82ebdf0 during global destruction."  Rename 
your first token to __END__  if you want to silence this warning.


=head1 AUTHOR

Ioannis Tambouras, E<lt>ioannis@yahoo.comE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2005 by Ioannis Tambouras

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.8.4 or,
at your option, any later version of Perl 5 you may have available.


=for nothing

This 'for nothing' section was written to silence test::pod::coverage

=head2  inlinefiles() 
An internal subroutine, the user should hold no interest.
=head2  open()
=cut