X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FHTML%2FString%2FValue.pm;h=d6bac14cc9fdde7bc7a371c27eb2c42e6951de23;hb=4f4204a3cb10eac31bb4387275f10753d25bf07e;hp=5adf3a9d1b01db7dbe367047359d72cf5ac69844;hpb=ac4c210b31335cc8ded4649a31c03031cf78eff5;p=scpubgit%2FHTML-String.git diff --git a/lib/HTML/String/Value.pm b/lib/HTML/String/Value.pm index 5adf3a9..d6bac14 100644 --- a/lib/HTML/String/Value.pm +++ b/lib/HTML/String/Value.pm @@ -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(@_) );