I don't believe that the overhead is in exporting the functions, but in the ability for the methods to "swing both ways".
Every dual-nature (ie. functional and OO) method in CGI starts off by calling an internal sub, self_or_default, to determine the calling style. If the method was called as an export, self_or_default has to do the additional task of unshifting the default CGI object ($Q in the CGI.pm source) onto @_. This negates any performance gain from not having the method-call overhead:
use strict;
use warnings;
use Benchmark qw(cmpthese);
use CGI qw(:standard);
my $q = new CGI;
cmpthese (-3, {
method => sub { $q->header; },
direct => sub { header; }
});
### RESULTS ####
Rate direct method
direct 14483/s -- -4%
method 15106/s 4% --
So it appears as if OO calling style on CGI is indeed faster in practice.
MeowChow
s aamecha.s a..a\u$&owag.print |