#!/usr/bin/perl use strict; use warnings 'all'; use Lingua::EN::Inflect; my $beer = abs (shift || 99); sub UNIVERSAL::TIEHASH {bless [] => shift} sub UNIVERSAL::FETCH {no strict 'refs'; &{"Lingua::EN::Inflect::" . ref $_ [0]} (split /$;/ => $_ [1])} tie my %N => 'NUMWORDS'; tie my %B => 'PL'; print <<"--" while $beer; \u$N{$beer} $B{bottle => $beer} of beer on the wall, $N{$beer} $B{bottle => $beer --} of beer. Take one down, pass it around. \u$N{$beer} $B{bottle => $beer} of beer on the wall. -- package NUMWORDS; package PL; __END__