package NetHirc::Amusements;
use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(
yoda_front
pigl_front
mirror
shuffle
);
our @EXPORT_OK = @EXPORT;
sub yoda_front
{
my @a = split(/([-`!&(){}\[\]<>":;,.?=\\|^\$#_@]+)/, $_[0]);
my @w;
my $b;
for my $segment (@a)
{
@w = split(/(\s+)/, $segment);
$b .= &yoda(@w);
}
return $b;
}
sub yoda
{
my (@words) = @_;
my ($x, $y);
my ($iterations);
$iterations = $#words;
if (join("", @words) !~ /\S/)
{
return join "", @words;
}
for (1..$iterations)
{
while (1)
{
$x = rand($#words + 1);
last if ($words[$x] =~ /\S/);
}
while (1)
{
$y = rand($#words + 1);
last if ($words[$y] =~ /\S/);
}
($words[$x], $words[$y]) = +($words[$y], $words[$x])
}
return join "", @words;
}
sub pigl_front
{
my @a = split(/(\b)/, $_[0]);
my @b = ();
for my $i (@a) {
push @b, &pigl($i);
}
return join "", @b;
}
sub pigl
{
my $garply = shift;
return $garply if ($garply =~ /^(a(nd?|[st])?|t(o|he)|o[frn]|i[fnst]?)$/oi);
return $garply if ($garply =~ /^(\W|\d|\s)*$/);
$garply =~ s/^([^a-zA-Z]*)([^aeiouyAEIOUY]*)([a-zA-Z']*)(.*)/$1$3$2ay$4/;
return $garply;
}
sub mirror
{
my $line = shift;
my $enil;
chomp($line);
while ($line =~ /\t/) { # untab for effective mirroring.
my $spaces = " " x (8 - (index($line, "\t") % 8));
$line =~ s/\t/$spaces/;
}
$enil = scalar reverse $line;
$enil =~ tr,\\/\(\)\[\]{}<>`',/\\\)\(\]\[}{><'`,;
return $enil;
}
sub shuffle
{
my $line = shift;
my @words = split(' ', $line);
my @ret;
while (@words)
{
push @ret, splice(@words, rand @words, 1);
}
return join(' ', @ret);
}
1;
__END__
syntax highlighted by Code2HTML, v. 0.9.1