Force parsing of blessed() as a function
Yuval Kogman [Thu, 17 Sep 2009 11:47:04 +0000 (14:47 +0300)]
In the generated constructor it was parsed and invoked as an indirect
method, which worked for classes that did not remove C<blessed> or
define it as an accessor.

This broke Search::GIN which had a class that used namespace::clean and
had a 'blessed' attribute which was incorrectly invoked on the class.

lib/Moose/Meta/Method/Constructor.pm

index aecd683..af6a1b4 100644 (file)
@@ -58,7 +58,7 @@ sub _initialize_body {
     $source .= "\n" . 'my $_instance = shift;';
 
     $source .= "\n" . q{Carp::cluck 'Calling new() on an instance is deprecated,'
-                        . ' please use (blessed $obj)->new' if blessed $_instance;};
+                        . ' please use (blessed $obj)->new' if Scalar::Util::blessed($_instance);};
 
     $source .= "\n" . 'my $class = Scalar::Util::blessed($_instance) || $_instance;';