here was a fun unbless function i wrote in response to something
on spug's mailing list (it never made here or there, due to mailing
difficulties at the time)

sub curse ($) {
    my $thing = shift;
    if (!(ref($thing))) {
        die "Can't curse non-reference value";
    if ("$thing" =~ m/=(SCALAR|ARRAY|HASH|CODE|GLOB)\(/) {
        return bless $thing, $1;
    } else {
        return $thing;

Trelane then came up with this error case

$x = curse new String("This is a problem cos I have =ARRAY(foo in my text");
print $x,"\n";

package String;

use overload '""' => sub { $_[0]->{text}};
use overload;

sub new
    my $class = shift;
    return bless {text => join('',@_)}, $class;

which just shows you what a so and so he is ;-)

However there is a good soln in scalar::util or somesuch


Greg McCarroll                      

Reply via email to