📄 withbase.pm
字号:
package URI::WithBase;use strict;use vars qw($AUTOLOAD $VERSION);use URI;$VERSION = "2.19";use overload '""' => "as_string", fallback => 1;sub as_string; # help overload find itsub new{ my($class, $uri, $base) = @_; my $ibase = $base; if ($base && ref($base) && UNIVERSAL::isa($base, __PACKAGE__)) { $base = $base->abs; $ibase = $base->[0]; } bless [URI->new($uri, $ibase), $base], $class;}sub new_abs{ my $class = shift; my $self = $class->new(@_); $self->abs;}sub _init{ my $class = shift; my($str, $scheme) = @_; bless [URI->new($str, $scheme), undef], $class;}sub eq{ my($self, $other) = @_; $other = $other->[0] if UNIVERSAL::isa($other, __PACKAGE__); $self->[0]->eq($other);}sub AUTOLOAD{ my $self = shift; my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::')+2); return if $method eq "DESTROY"; $self->[0]->$method(@_);}sub can { # override UNIVERSAL::can my $self = shift; $self->SUPER::can(@_) || ( ref($self) ? $self->[0]->can(@_) : undef )}sub base { my $self = shift; my $base = $self->[1]; if (@_) { # set my $new_base = shift; # ensure absoluteness $new_base = $new_base->abs if ref($new_base) && $new_base->isa(__PACKAGE__); $self->[1] = $new_base; } return unless defined wantarray; # The base attribute supports 'lazy' conversion from URL strings # to URL objects. Strings may be stored but when a string is # fetched it will automatically be converted to a URL object. # The main benefit is to make it much cheaper to say: # URI::WithBase->new($random_url_string, 'http:') if (defined($base) && !ref($base)) { $base = ref($self)->new($base); $self->[1] = $base unless @_; } $base;}sub clone{ my $self = shift; my $base = $self->[1]; $base = $base->clone if ref($base); bless [$self->[0]->clone, $base], ref($self);}sub abs{ my $self = shift; my $base = shift || $self->base || return $self->clone; $base = $base->as_string if ref($base); bless [$self->[0]->abs($base, @_), $base], ref($self);}sub rel{ my $self = shift; my $base = shift || $self->base || return $self->clone; $base = $base->as_string if ref($base); bless [$self->[0]->rel($base, @_), $base], ref($self);}1;__END__=head1 NAMEURI::WithBase - URIs which remember their base=head1 SYNOPSIS $u1 = URI::WithBase->new($str, $base); $u2 = $u1->abs; $base = $u1->base; $u1->base( $new_base )=head1 DESCRIPTIONThis module provide the C<URI::WithBase> class. Objects of this classare like C<URI> objects, but can keep their base too. The baserepresents the context where this URI was found and can be used toabsolutize or relativize the URI. All the methods described in L<URI>are supported for C<URI::WithBase> objects.The methods provided in addition to or modified from those of C<URI> are:=over 4=item $uri = URI::WithBase->new($str, [$base])The constructor takes a an optional base URI as the second argument.If provided this argument initialize the base attribute.=item $uri->base( [$new_base] )This method can be used to get or set the value of the base attribute.The return value is the old value and will be an URI object or C<undef>.=item $uri->abs( [$base_uri] )The $base_uri argument is now made optional as the object carries itsbase with it. A new object is returned even if $uri is alreadyabsolute (while plain URI objects will simply return themselves inthat case).=item $uri->rel( [$base_uri] )The $base_uri argument is now made optional as the object carries itsbase with it. A new object is always returned.=back=head1 SEE ALSOL<URI>=head1 COPYRIGHTCopyright 1998-2002 Gisle Aas.=cut
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -