Yes - the first is called an class method - you do not
need to instantiate an object before calling the method.
Use these just for that situation - when you don't need
to create a new object (waste of RAM).
The second example is best used when you need to store
state information in an object. That way, the method
can do it's thing based on what the state of the object is.
The fact that they return the same value is because it is
the same function which happens to not use member variables.
If that function used some member
varibles that were specific to a particular instance of
the class - then you would see a difference.
Here is an example:
#!/usr/bin/perl -w
use strict;
package foo;
sub new {
my ($class) = @_;
return bless {
foo => 'bar',
}, $class;
}
sub baz {
my ($self) = shift;
print $self->{'foo'}, "\n";
}
package main;
my $obj = new foo;
$obj->baz; # prints bar
&foo::baz; # unitialized value warning issued
Jeff
L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
F--F--F--F--F--F--F--F--
(the triplet paradiddle)
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: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.