in reply to 500 Internal server error
Here’s the skinny on this one: Apache has been configured to believe that anything which is sent to <Location /cgi-bin/> corresponds to the name of a file that it should execute, in order to return to you the output from that file being executed. (You have not specified a Handler ...) Which is exactly what it is trying to do. It found a file by that name at that location, but of course it is not executable. So, Apache throws up its hands.
What you need to do is to tell Apache, say, that <Location /cgi-bin/Output/Waybill/> should cause a particular Handler, not a file in this location, to be executed. Upon recognizing this pattern, Apache will (maybe) launch the Handler, and pass the URL-string as input to it. That script which will be responsible for extracting whatever parameters from it and carrying-out the request.
An elementary Apache-configuration problem ... and not Perl-specific ... but, confusing nonetheless.