Integrate mainline
[p5sagit/p5-mst-13.2.git] / pod / perlobj.pod
index f31ce2c..73b67de 100644 (file)
@@ -7,7 +7,7 @@ perlobj - Perl objects
 First you need to understand what references are in Perl.
 See L<perlref> for that.  Second, if you still find the following
 reference work too complicated, a tutorial on object-oriented programming
-in Perl can be found in L<perltoot> and L<perltootc>.
+in Perl can be found in L<perltoot> and L<perltooc>.
 
 If you're still with us, then
 here are three very simple definitions that you should find reassuring.
@@ -200,7 +200,7 @@ methods and instance methods.
 A class method expects a class name as the first argument.  It
 provides functionality for the class as a whole, not for any
 individual object belonging to the class.  Constructors are often
-class methods, but see L<perltoot> and L<perltootc> for alternatives.
+class methods, but see L<perltoot> and L<perltooc> for alternatives.
 Many class methods simply ignore their first argument, because they
 already know what package they're in and don't care what package
 they were invoked via.  (These aren't necessarily the same, because
@@ -361,21 +361,41 @@ are inherited by all other classes:
 
 C<isa> returns I<true> if its object is blessed into a subclass of C<CLASS>
 
-You can also call C<UNIVERSAL::isa> as a sub with two arguments.  The
-first does not need to be an object or even a reference.  This
-allows the ability to check what a reference points to, or whether
+You can also call C<UNIVERSAL::isa> as a subroutine with two arguments.
+The first does not need to be an object or even a reference.  This
+allows you to check what a reference points to, or whether
 something is a reference of a given type. Example
 
     if(UNIVERSAL::isa($ref, 'ARRAY')) {
        #...
     }
 
+To determine if a reference is a blessed object, you can write
+
+    print "It's an object\n" if UNIVERSAL::isa($val, 'UNIVERSAL');
+
 =item can(METHOD)
 
 C<can> checks to see if its object has a method called C<METHOD>,
 if it does then a reference to the sub is returned, if it does not then
 I<undef> is returned.
 
+C<UNIVERSAL::can> can also be called as a subroutine with two arguments.
+It'll always return I<undef> if its first argument isn't an object or a
+class name.    So here's another way to check if a reference is a
+blessed object
+
+    print "It's still an object\n" if UNIVERSAL::can($val, 'can');
+
+You can also use the C<blessed> function of Scalar::Util:
+
+    use Scalar::Util 'blessed';
+
+    my $blessing = blessed $suspected_object;
+
+C<blessed> returns the name of the package the argument has been
+blessed into, or C<undef>.
+
 =item VERSION( [NEED] )
 
 C<VERSION> returns the version number of the class (package).  If the
@@ -539,7 +559,7 @@ breaks the circularities in the self-referential structure.
 =head1 SEE ALSO
 
 A kinder, gentler tutorial on object-oriented programming in Perl can
-be found in L<perltoot>, L<perlbootc> and L<perltootc>.  You should
+be found in L<perltoot>, L<perlboot> and L<perltooc>.  You should
 also check out L<perlbot> for other object tricks, traps, and tips, as
 well as L<perlmodlib> for some style guides on constructing both
 modules and classes.