If you execute this script in the same directory as it and you don't pass any parameters, your Usage() doesn't construct $prog correctly.
my ($prog) = $0 =~ /\/([^\/]+)$/;
---- Change to:
my ($prog) = basename($0);
We are the carpenters and bricklayers of the Information Age.
The idea is a little like C++ templates, except not quite so brain-meltingly complicated. -- TheDamian, Exegesis 6
Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.