dear TT, you are a pain in the buttocks
[scpubgit/HTML-String.git] / lib / HTML / String / Value.pm
index 5adf3a9..d6bac14 100644 (file)
@@ -3,6 +3,7 @@ package HTML::String::Value;
 use strictures 1;
 use UNIVERSAL::ref;
 use Safe::Isa;
+use Scalar::Util qw(blessed);
 use Data::Munge;
 
 use overload
@@ -14,7 +15,10 @@ use overload
 ;
 
 sub new {
-    if (ref($_[0])) { my $c = shift; return $c->_hsv_unescaped_string->new(@_) }
+    if (blessed($_[0])) {
+        my $c = shift;
+        return $c->_hsv_unescaped_string->new(@_);
+    }
     my ($class, @raw_parts) = @_;
 
     my $opts = (ref($raw_parts[-1]) eq 'HASH') ? pop(@raw_parts) : {};
@@ -71,7 +75,7 @@ sub _hsv_unescaped_string {
 sub _hsv_dot {
     my ($self, $str, $prefix) = @_;
 
-    return $self unless $str;
+    return $self unless defined $str && length $str;
 
     my @parts = @{$self->{parts}};
 
@@ -87,7 +91,7 @@ sub _hsv_dot {
         push @parts, @new_parts;
     }
 
-    return ref($self)->new(@parts, { ignore => $self->{ignore} });
+    return bless({ %$self, parts => \@parts }, blessed($self));
 }
 
 sub _hsv_is_true {
@@ -115,7 +119,7 @@ sub can {
     return (
         do {
             local $@;
-            eval { blessed($self) and $self->_hsv_unescaped_string->isa(@_) }
+            eval { blessed($self) and $self->_hsv_unescaped_string->can(@_) }
         }
         or $self->SUPER::can(@_)
     );