Because setup() is called by new() and you're not setting the params until new() returns. Pass them to new() via PARAMS and you'll see them in setup().
-sam
Comment on Re: CGI::Application and $self->param() wierdness
Thank you. I feel kind of silly. I was familiar with the PARAMS option on the new method, but didn't realize the significance/difference. Works fine after modification.