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

use strict;
use warnings;
use Carp;
use Sub::Install 'reinstall_sub';
use Module::Find;

my %LICENSES;

sub _install_dsl {
  my $class = shift;

  return if $class eq 'main';
  return if $class =~ /^Test::/;

  reinstall_sub({
    as   => 'object',
    into => $class,
    code => sub {
      my ($self, $type, $args) = @_;

      croak "unknown license type: $type" unless $LICENSES{$type};
      $LICENSES{$type}->new($args);
    }
  });
}

BEGIN { _install_dsl(__PACKAGE__); }

sub import {
  my ($class, $flag) = @_;

  _install_dsl(caller) if $flag && $flag eq 'base';

  for my $module (sort {$b cmp $a} usesub 'Software::License') {
    next unless $module->can('meta_name');
    $LICENSES{$module->meta_name}  ||= $module;
    $LICENSES{$module->meta2_name} ||= $module;
  }
}

1;

__END__

=head1 NAME

Module::New::License

=head1 SYNOPSIS

  use Module::New::License;
  Module::New::License->render('perl');

=head1 DESCRIPTION

This is used internally to render a license text. At the moment, only perl license is supported.

=head1 METHOD

=head2 render

takes a license name and render the text.

=head1 CREATE OTHER LICENSES

  package Your::Module::New::License;
  use Module::New::License 'base';

  license 'license name' => content { my @args = @_; return <<"EOT";
  blah blah blah...
  EOT
  };

With a C<base> flag, domain specific C<license> and C<content> functions will be installed to define custom licenses.

=head1 AUTHOR

Kenichi Ishigaki, E<lt>ishigaki at cpan.orgE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2007-2009 by Kenichi Ishigaki.

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

=cut