horrendo has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks,

I'm obviously missing something very simple when it comes to using the automated coersion mechanism with Class::Std.

Here is my simple class ...

package BaseClass; use Class::Std; { sub as_num :NUMERIFY { return 42 } # sub as_num { return 42 } # use overload (q{0+} => 'as_num', fallback=>1); 1; }

Here is my calling code ...

#!/usr/bin/perl use strict; use warnings; use BaseClass ; my $c = BaseClass->new ; my $x = 0 ; $x += $c ; print "x = $x\n";

And here is what I get when I run it ...

[stbaldwin@audev02 dev]$ ./tst.pl Use of uninitialized value in method lookup at (eval 2) line 3. Can't locate object method "" via package "BaseClass" at (eval 2) line + 3

As you can see, I have also experimented with using overload, and that mechanism works fine. However, call me stubborn, but I like to understand the tools I use.

Any help is much appreciated. Thanks.

Replies are listed 'Best First'.
Re: Using automated coersion methods with Class::Std
by gargle (Chaplain) on Aug 30, 2005 at 10:45 UTC

    Well...

    I don't get it. I even copied your code to my local disk and it ran without problems (cygwin). Your code appears to be fine.

    bash-3.00$ ./test.pl x = 42 bash-3.00$

    Maybe a reinstall of your Class::Std module could do the trick?

    I have here:

    Class-Std-0.0.4.tar.gz
    Module-Build-0.2611.tar.gz
    ExtUtils-MakeMaker-6.30.tar.gz
    version-0.47.tar.gz