package Woeisme; use strict; local $^W = 1; use vars qw ($VERSION ); $VERSION = 0.01; use Carp; my %default_values = ( SUBJECT => 'Subject (<= 44 characters) goes here', AUTHOR => { NAME => 'A. U. Thor', CPANID => 'AUTHOR', WEBSITE => 'http://a.galaxy.far.far.away/modules', EMAIL => 'a.u.thor@a.galaxy.far.far.away', }, ); sub new { my ($class, %parameters) = @_; my $self = ref($class) ? bless( \%default_values, ref($class) ) : bless( \%default_values, $class ); foreach my $param ( keys %parameters ) { if ( ref( $parameters{$param} ) eq 'HASH' ) { foreach ( keys( %{ $parameters{$param} } ) ) { $self->{$param}{$_} = $parameters{$param}{$_}; } } else { $self->{$param} = $parameters{$param}; } } $self->verify_values(); return ($self); } sub verify_values { my $self = shift; my (@errors); push( @errors, 'NAME is required' ) unless ( $self->{NAME} ); push( @errors, 'Module NAME contains illegal characters' ) unless ( $self->{NAME} and $self->{NAME} =~ m/^[\w:]+$/ ); push( @errors, 'SUBJECTs are limited to 44 characters' ) if ( length( $self->{SUBJECT} ) > 44 ); push( @errors, 'CPAN IDs are 3-9 characters' ) if ( $self->{AUTHOR}{CPANID} !~ m/^\w{3,9}$/ ); push( @errors, 'EMAIL addresses need to have an at sign' ) if ( $self->{AUTHOR}{EMAIL} !~ m/.*\@.*/ ); push( @errors, 'WEBSITEs should start with an "http:" or "https:"' ) if ( $self->{AUTHOR}{WEBSITE} !~ m/https?:\/\/.*/ ); if (@errors) { croak( join "\n", @errors, '', $!); } } 1;