From: Ilya M. <m_...@us...> - 2003-05-21 09:16:13
|
Update of /cvsroot/perl-xml/XML-LibXML-XPathContext In directory sc8-pr-cvs1:/tmp/cvs-serv8650 Modified Files: XPathContext.pm Log Message: Minor refactoring: move dublicated logic from find() and findnodes() to _guarded_find_call() Index: XPathContext.pm =================================================================== RCS file: /cvsroot/perl-xml/XML-LibXML-XPathContext/XPathContext.pm,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- XPathContext.pm 30 Apr 2003 20:31:46 -0000 1.23 +++ XPathContext.pm 21 May 2003 09:15:57 -0000 1.24 @@ -20,20 +20,8 @@ sub findnodes { my ($self, $xpath, $node) = @_; - my @nodes; - my $prev_node; - if (ref($node)) { - $prev_node=$self->getContextNode(); - $self->setContextNode($node); - } - $self->_enter; - eval { - @nodes = $self->_findnodes($xpath); - }; - $self->_leave; - $self->setContextNode($prev_node) if ref($node); - if ($@) { die $@; } + my @nodes = $self->_guarded_find_call('_findnodes', $xpath, $node); if (wantarray) { return @nodes; @@ -43,33 +31,42 @@ } } +sub find { + my ($self, $xpath, $node) = @_; + my ($type, @params); + + ($type, @params) = $self->_guarded_find_call('_find', $xpath, $node); + + if ($type) { + return $type->new(@params); + } + return undef; +} + sub findvalue { my $self = shift; return $self->find(@_)->to_literal->value; } -sub find { - my ($self, $xpath, $node) = @_; - my ($type, @params); +sub _guarded_find_call { + my ($self, $method, $xpath, $node) = @_; my $prev_node; if (ref($node)) { - $prev_node=$self->getContextNode(); - $self->setContextNode($node); + $prev_node = $self->getContextNode(); + $self->setContextNode($node); } $self->_enter; + my @ret; eval { - ($type, @params) = $self->_find($xpath); + @ret = $self->$method($xpath); }; $self->_leave; $self->setContextNode($prev_node) if ref($node); - if ($@) { die $@; } + if ($@) { die $@; } - if ($type) { - return $type->new(@params); - } - return undef; + return @ret; } sub registerFunction { |