 <p>You make the same mistake several times. I'll use the first instance an example:</p> <pre><code>$name = param($name); </code></pre> <p>You get the value of <code>$name</code> (which you haven't yet defined) and use it to get a param from the HTTP request. Since it isn't defined, you don't get the result you are looking for, so you don't get the submitted data in <code>$name</code>.</p> <p>Presumably you intended:</p> <pre><code>$name = param('name'); </code></pre> <hr> <p>Update now you have the form you are using:</p> <pre><code>print qq!&lt;br&gt;&lt;form method="get" action="serverside.pl"&gt;!; print qq!&lt;input type="submit" value="Confirm Booking" /&gt;\n&lt;/form&gt;&lt;br /&gt;!; </code></pre> <p>You don't have any <code>&lt;input&gt;</code> elements except for the submit button (which doesn't have a <code>name</code> attribute), so there is no data to submit.</p>