Description: Create license from short name
--- a/lib/Software/License.pm
+++ b/lib/Software/License.pm
@@ -11,15 +11,48 @@
 use Sub::Install ();
 use Text::Template ();
 
+my %short_name = (
+  'GPL-1'  => 'GPL_1',
+  'GPL-2'  => 'GPL_2',
+  'GPL-3'  => 'GPL_3',
+  'Artistic' => 'Artistic_1_0',
+  'Artistic-1' => 'Artistic_1_0',
+  'Artistic-2' => 'Artistic_2_0',
+);
+
+# Software::License is a virtual class. On the other hand, it's a
+# natural entry point to create "real" license using short names.
+# Of the 2 solutions provided below, I don't know which one is the best
+# (or the worse).
 
 sub new {
   my ($class, $arg) = @_;
 
   Carp::croak "no copyright holder specified" unless $arg->{holder};
 
-  bless $arg => $class;
+  # This ugly hack avoids having 2 constructors.
+  if ($class eq __PACKAGE__ ) {
+    return new_from_short_name(@_) ;
+  }
+  else {
+    bless $arg => $class;
+  }
 }
 
+# here's a second constructor that will provide a real license
+sub new_from_short_name {
+  my ($class, $arg) = @_;
+
+  Carp::croak "no license short name specified" unless $arg->{short_name};
+  my $short = delete $arg->{short_name} ;
+  my $lic = $short_name{$short} ;
+  Carp::croak "Unknow license with short name $short" unless $lic;
+
+  my $lic_file = my $lic_class = __PACKAGE__.'::'.$lic ;
+  $lic_file =~ s!::!/!g ;
+  require "$lic_file.pm";
+  return $lic_class->new ($arg) ;
+}
 
 sub year   { defined $_[0]->{year} ? $_[0]->{year} : (localtime)[5]+1900 }
 sub holder { $_[0]->{holder}     }
@@ -112,6 +145,15 @@
   holder - the holder of the copyright; required
   year   - the year of copyright; defaults to current year
 
+=head2 new_from_short_name
+
+ my $license = Software::License -> new_from_short_name(
+   { short_name => 'GPL-1', %arg }
+ );
+
+This constructor will return the correct subclass depending on
+C<short_name> value.
+
 =head2 year
 
 =head2 holder
