Acme-Insult
view release on metacpan or search on metacpan
lib/Acme/Insult.pm view on Meta::CPAN
package Acme::Insult 1.1 {
use v5.38;
use parent 'Exporter';
use Module::Load;
our %EXPORT_TAGS = ( all => [ our @EXPORT_OK = qw[insult flavors] ] );
#
my %flavor = (
map {
my $pkg = 'Acme::Insult::' . $_;
( eval 'require ' . $pkg ? ( lc($_) => $pkg ) : () ),
} qw[Glax Evil Pirate]
);
sub insult ( $flavor //= ( keys %flavor )[ rand keys %flavor ] ) {
$flavor{$flavor} // return ();
my $cv = $flavor{$flavor}->can('insult');
$cv ? $cv->() : ();
}
sub flavors () { keys %flavor }
}
1;
__END__
=encoding utf-8
=head1 NAME
Acme::Insult - Code That Wasn't Raised Right
=head1 SYNOPSIS
use Acme::Insult qw[insult];
say insult;
=head1 DESCRIPTION
Acme::Insult is kind of a jerk.
=head1 METHODS
These functions may be imported by name or with the C<:all> tag.
=head2 C<insult( [...] )>
Tear someone down.
my $shade = insult( ); # Random insult
print insult( ); # stringify
print insult( 'evil' );
Expected parameters include:
=over
=item C<flavor>
If undefined, a random supported flavor is used.
Currently, supported flavors include:
=over
=item C<evil>
Uses L<Acme::Insult::Evil>
=item C<glax>
( run in 1.475 second using v1.01-cache-2.11-cpan-140bd7fdf52 )