a question came up today in comp.lang.perl.modules about this
particular answer.  after looking at the code, it seems like 
some wierd things are going on:

    * why do you need the BEGIN block

    * @EXPORT_OK shows up in a use vars (), and then later
    in and our().


is there some reason that this answer doesn't simply point the 
user to h2xs?  i think that the code example leaves a person
with more confusing questions than they before if they don't
already know how to create a module, and even more questions
if they aren't using perl5.6 or greater.

this proposed patch removes the sample code and expands the
discussion of h2xs.


Index: perlfaq7.pod
===================================================================
RCS file: /home/perlcvs/perlfaq/perlfaq7.pod,v
retrieving revision 1.2
diff -u -d -r1.2 perlfaq7.pod
--- perlfaq7.pod        2001/10/16 13:27:22     1.2
+++ perlfaq7.pod        2001/10/18 14:00:02
@@ -167,80 +167,14 @@
 you're writing a C or mixed-language module with both C and Perl, then
 you should study L<perlxstut>.
 
-Here's a convenient template you might wish you use when starting your
-own module.  Make sure to change the names appropriately.
-
-    package Some::Module;  # assumes Some/Module.pm
-
-    use strict;
-    use warnings;
-
-    BEGIN {
-       use Exporter   ();
-       our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
-
-       ## set the version for version checking; uncomment to use
-       ## $VERSION     = 1.00;
-
-       # if using RCS/CVS, this next line may be preferred,
-       # but beware two-digit versions.
-       $VERSION = do{my@r=q$Revision: 1.2 $=~/\d+/g;sprintf '%d.'.'%02d'x$#r,@r};
-
-       @ISA         = qw(Exporter);
-       @EXPORT      = qw(&func1 &func2 &func3);
-       %EXPORT_TAGS = ( );     # eg: TAG => [ qw!name1 name2! ],
-
-       # your exported package globals go here,
-       # as well as any optionally exported functions
-       @EXPORT_OK   = qw($Var1 %Hashit);
-    }
-    our @EXPORT_OK;
-
-    # exported package globals go here
-    our $Var1;
-    our %Hashit;
-
-    # non-exported package globals go here
-    our @more;
-    our $stuff;
-
-    # initialize package globals, first exported ones
-    $Var1   = '';
-    %Hashit = ();
-
-    # then the others (which are still accessible as $Some::Module::stuff)
-    $stuff  = '';
-    @more   = ();
-
-    # all file-scoped lexicals must be created before
-    # the functions below that use them.
-
-    # file-private lexicals go here
-    my $priv_var    = '';
-    my %secret_hash = ();
-
-    # here's a file-private function as a closure,
-    # callable as &$priv_func;  it cannot be prototyped.
-    my $priv_func = sub {
-        # stuff goes here.
-    };
-
-    # make all your functions, whether exported or not;
-    # remember to put something interesting in the {} stubs
-    sub func1      {}   # no prototype
-    sub func2()    {}   # proto'd void
-    sub func3($$)  {}   # proto'd to 2 scalars
-
-    # this one isn't exported, but could be called!
-    sub func4(\%)  {}    # proto'd to 1 hash ref
-
-    END { }       # module clean-up code here (global destructor)
-
-    1;            # modules must return true
-
-The h2xs program will create stubs for all the important stuff for you:
+The C<h2xs> program will create stubs for all the important stuff for you:
 
   % h2xs -XA -n My::Module
+  
+The C<-X> switch tells C<h2xs> that you are not using C<XS> extension
+code.  The C<-A> switch tells C<h2xs> that you are not using the
+AutoLoader, and the C<-n> switch specifies the name of the module.
+See L<h2xs> for more details.
 
 =head2 How do I create a class?
-- 
brian d foy <[EMAIL PROTECTED]> - Perl services for hire
CGI Meta FAQ - http://www.perl.org/CGI_MetaFAQ.html
Troubleshooting CGI scripts - http://www.perl.org/troubleshooting_CGI.html

Reply via email to