Sorry - more song lyrics, but I heard this on the radio this morning (yes yes - I'm in the 'Oldies FM' demographic{g}), and just had to have a go at "re-factoring" it. :)
#!/usr/bin/perl
package Talker;
sub new {return bless {'me'=>$_[1]}, $_[0];}
sub say {my $s=shift();print $s->{me}," say ",@_,"\n";}
1;
package main;
use strict;
my $You = new Talker("You");
my $I = new Talker("I");
my %o = ("yes"=>"no","stop"=>"go go go","high"=>"low","why"=>"I don't
+know");
Opposite("yes"); Opposite("stop"); WeSay();
Opposite("high"); Opposite("why"); WeSay();
Why(6); do {$You->say("goodbye " x 2,"bye " x 2)}; WeSay();
Opposite("yes"); $I->say("yes, but I may mean no"); Opposite("stop");
my $t = time; while($t == time) {;} # I can stay till it's time to go.
+.. ;)
WeSay(); print Hello(8),"\n",Hello(4,"international");
sub Opposite {my $p = shift();$You->say($p);$I->say($o{$p});}
sub WeSay() {print "Oh No. ";for(0..1){GH(3);Why()};GH(1);}
sub GH {$You->say("goodbye") and $I->say(Hello($_[0]));}
sub Hello {(($_[1])?"Hela, heba, helloa.\n":"hello ")x$_[0];}
sub Why {print ((@_)?"Why " x $_[0]:"I don't know why ");}
Cheers, Ben