I think there is some confusion with the CGI.pm syntax. use CGI qw(param) will import the param sub to the caller's namespace, however new CGI qw(param) will initialize a new CGI object with a query string of "param". See:
use CGI; my $q = new CGI qw(param); print "\$q->param($_) = " . $q->param($_) . "\n" for $q->param; print param('asdf'); # not imported, error __END__ prints: $ perl test.pl $q->param(keywords) = param Undefined subroutine &main::param called at - line 4.
If the methods really were being imported into the namespace, they would be automatically usable as methods on your objects, as they are not bound by the lexical scope of your function call. However, I doubt it would work right, as the method calls would eventually translate to CGI::param($obj, 'foo') instead what you probably want: CGI::param($obj->{query}, 'foo'), (i.e., $obj->{query}->param('foo')).

I don't see the problem with using AUTOLOAD to dispatch to the CGI object, even if you want to use it with more than just the param method:

sub AUTOLOAD { my $func = $AUTOLOAD; $func =~ s/^.*:://; $self->{query}->$func(@_); }

blokhead


In reply to Re: Importing CGI methods into a subclass as a class method by blokhead
in thread Importing CGI methods into a subclass as a class method by Phaysis

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.