Greetings!

With Version 2.0 of the train crew volunteer signup form program about
to go online, I am now turning my attention to Version 3.0, which will
be Done The Right Way.  

To start with, I am going to create a class named Train.  A train has a
name, a date, a crew call time, and a bunch of people working on it. 
So I am creating a file named Train.pm.  Since it's not a good idea for
users of a class to know about what's inside the class, I'll have a
bunch of accessor methods.  Here's what I have so far:

#!/usr/bin/perl

use warnings;
use strict;

package Train;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(Load 
                         SetName 
                         GetName 
                         SetDate
                         GetDate
                         SetCrewCall 
                         GetCrewCall 
                         AddCrewMember 
                         GetCrewList 
                         new);

sub new
{
        my $self = {};  # $self is a reference to an anonymous, empty (for
now) hash
        bless $self;
        return $self;
}

sub SetName
{
        my $self = shift; # This is the "%self" that is flagged as an error
        $self{name} = shift;
}

I have a couple of questions.  

When I run perl -c to check this, it complains that @ISA, @EXPORT and
%self are global symbols that need explicit package names.  Why is
this?  I haven't seen @ISA or @EXPORT qualified with package names in
any samples.  What package name do I need to use?  (I solved %self.  It
should have been $$self{name}.)

I tried reading the perldoc pages about object-oriented programming,
perlobj and perltoot.  I was surprised (to say the least) to come
across the following quote in perltoot:
"By proper design, we mean always using the two-argument form of
bless(), avoiding direct access of global data, and not exporting
anything."
But I thought exporting was how a script that uses a module knew what
the module had to offer!  If I say "use Train", doesn't my Train.pm
module have to export the methods that let the train objects actually
be used?  If I don't need to export methods here, when do I need to
export them?

Confusedly,

RobR






__________________________________________________
Do you Yahoo!?
Yahoo! Mail Plus - Powerful. Affordable. Sign up now.
http://mailplus.yahoo.com

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to