/usr/local/CPAN/App-ForExample/App/ForExample/ModuleEmbedCatalog.pm


package App::ForExample::ModuleEmbedCatalog;

use strict;
use warnings;

{
    my $catalog;
    sub extract {
        my $self = shift;
        my $module = shift;
        my $end = shift;

        $end = '__ASSET__' unless defined $end;
        $end = qr/^\Q$end\E$/ unless ref $end eq 'Regexp';

        my $handle = "${module}::DATA";

        return $catalog ||= do {
            my %catalog;
            my ($path, $content);
            while (<$handle>) {
                if ( ! $path ) {
                    next unless m/\S/;
                    chomp; $path = $_;
                    $content = '';
                }
                elsif ( $_ =~ $end ) {
                    my $__ = $content;                                 
                    $catalog{$path} = \$__;                            
                    undef $path;                                       
                    undef $content;                                    
                }
                else {                                                 
                    $content .= $_;                                    
                }
            }
            \%catalog;
        };
    }     
}

1;