Disclaimer: IANAL. I am not a lawyer linguist.

The syntax of (for example) $cgi = new CGI; is called indirect object syntax, which is also said to be in the dative case. Are these actually the correct designations?

Let me elaborate on that question. The way I understand grammar, it should be direct object (or accusative) instead:

$ball = new Ball:Soccer; # Creates a soccer ball. kick $ball; # Ball::Soccer defines sub kick {...} # I.E. this reads $ball->kick;

We can easily defend that in this example, $ball is not a subject ("it performs the action expressed by the verb"). Rather it could be argued that it is a direct object ("Entity acted upon", I.E. the action is to kick, the thing which is kicked is the ball). Also:

One rule of thumb for English, however, is that an indirect object is not present unless a direct object is also present

Wikipedia: Object (grammar) - Types of objects

For a dative case to be present, we'd need something like

$ball = new Ball::Soccer; $john = new Person; give $john $ball;

And even here, $ball would still be the direct object, or accusative (the object which is being given) and $john would be the indirect object, or dative (the object to which (or rather whom) the ball is being given).