$hash is an object. $hash->LicenseData(); calls the "method" LicenseData on the hash object. Without bothering with details, that means a sub named LicenseData is called and passed $hash as the first parameter. The LicenseData sub uses the contents of $hash to do some work.
$hash probably isn't a very good name. If the code were written:
sub LicenseData{
my ($licCode) = @_;
my $licObj = LIC_INFO($licCode);
return $licObj->LicenseData();
}
it may be a little clearer.
Premature optimization is the root of all job security