Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

usage of EXPORT function

by himesh (Initiate)
on Sep 29, 2012 at 13:31 UTC ( #996376=perlquestion: print w/replies, xml ) Need Help??
himesh has asked for the wisdom of the Perl Monks concerning the following question:

Hi , I have been using perl for some days and had a question in mind.How the EXPORT is useful in OO programming of perl,when I create a .pm file. For Example :Is it require to export "new" function from to be included into file. student->new('swarup','26');

Replies are listed 'Best First'.
Re: usage of EXPORT function
by 2teez (Priest) on Sep 29, 2012 at 13:50 UTC

    How the EXPORT is useful in OO programming of perl
    Please note as a general rule, if the module is trying to be object oriented (OO) as stated in the OP, then export nothing.
    Check the example below:

    package Student; use warnings; use strict; sub new { my $type = shift; my $class = ref($type) || $type; my $self = { name => shift // "No name", score => shift // 0, }; return bless( $self, $class ); } sub name { my $self = shift; $self->{'name'} = shift // $self->{'name'}; return $self->{'name'}; } sub score { my $self = shift; $self->{'score'} = shift // $self->{'score'}; return $self->{'score'}; } 1;
    Then that is called in the .pl script like so:, without the Exporting any subroutine
    #!/usr/bin/perl -l use warnings; use strict; use Student; # the module used my $std = Student->new(); print join " - " => ( $std->name(), $std->score() ); # prints No name +- 0 my $std2 = Student->new( "melchi", 78 ); print join " - " => ( $std2->name(), $std2->score() ); # prints melchi + - 78 print join " - " => ( $std->name("kunle"), $std2->score(90) ); # print +s kunle - 90
    You might what to check, perlobj, perlmod, perlmodlib
    Hope this helps.

    If you tell me, I'll forget.
    If you show me, I'll remember.
    if you involve me, I'll understand.
    --- Author unknown to me
Re^2: usage of EXPORT function
by tobyink (Abbot) on Sep 29, 2012 at 14:53 UTC

    Modules written to be used for OO should generally not be exporting anything. Especially they should never export a sub which is expected to be called as a method.

    (This was intended as a reply to the OP, not to 2teez. Anyone who has suitable privileges, feel free to re-parent it.)

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://996376]
Approved by Old_Gray_Bear
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (10)
As of 2017-01-23 21:00 GMT
Find Nodes?
    Voting Booth?
    Do you watch meteor showers?

    Results (196 votes). Check out past polls.