Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Trying to learn how to build a module

by arturo (Vicar)
on Feb 02, 2001 at 20:01 UTC ( [id://56008]=note: print w/replies, xml ) Need Help??


in reply to Trying to learn how to build a module

In Perl, an object is a reference that's been blessed into a package. You've got parts of the necessary procedure in your new subroutine, but you need the classname (and the two-argument version of bless -- consult perldoc -f bless for more); when you do the call to new, the first argument passed to the sub is the name of the class (in this case, "mytest").

So change your constructor to:

sub new { my $class = shift; my $self = {}; # makes $self a reference to an anon hash bless $self, $class; $self; # returns $self (blessed hashref) }

(The shift acts on the argument list @_, so you get the first argument with the first shift)

Further, a method receives the object as its first argument, so your methods need to know what object they're talking about:

sub get_ foo { my $self = shift; $self->{foo}; } sub put_foo { my $self = shift; $self->{foo} = shift; }

(both of these methods are *skeletal*, but they'll do for testing purposes =)

Note, also, that if you don't want $self to be a hashref, it doesn't *have to be*, but I'd keep it as one for now.

Good references? perldoc perltoot, perldoc perlbot, and the Tutorials section on this here site. And if you like dead-tree stuff, you can't go wrong with Damian Conway's excellent Object Oriented Perl <-- a review

HTH!

Philosophy can be made out of anything. Or less -- Jerry A. Fodor

Replies are listed 'Best First'.
Re: Re: Trying to learn how to build a module
by Yoda (Sexton) on Feb 02, 2001 at 20:23 UTC
    Thanks! All three answers helped out. I built my constructor correctly and added the shifts into the two functions. I now get the desired output! Is there a benefit to using a constructor and object reference over just using the module and calling the functions directly Module::funct()?

    I can probably find the answer in perltoot.

      Objects have associated instance data as well as methods. This means that you can create many objects and they can each have a different set of data associated with them. In your example, each object could have a different name.

      --
      <http://www.dave.org.uk>

      "Perl makes the fun jobs fun
      and the boring jobs bearable" - me

        Thanks! You have been a lot of help.

        Yoda

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://56008]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (3)
As of 2024-04-26 04:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found