home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2000 May
/
Chip_2000-05_cd1.bin
/
zkuste
/
Perl
/
ActivePerl-5.6.0.613.msi
/
䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥
/
_1331e4c10e7c382dadb1226afbf9aa10
< prev
next >
Wrap
Text File
|
2000-03-15
|
3KB
|
142 lines
package URI::WithBase;
use strict;
use vars qw($AUTOLOAD);
use URI;
use overload '""' => "as_string", fallback => 1;
sub as_string; # help overload find it
sub new
{
my($class, $uri, $base) = @_;
my $ibase = $base;
if ($base && UNIVERSAL::isa($base, "URI::WithBase")) {
$base = $base->abs;
$ibase = $base->[0];
}
bless [URI->new($uri, $ibase), $base], $class;
}
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, "URI::WithBase");
$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 base {
my $self = shift;
my $base = $self->[1];
if (@_) { # set
my $new_base = @_;
$new_base = $new_base->abs if ref($new_base); # ensure absoluteness
$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 = URI->new($base);
$self->[1] = $base unless @_;
}
$base;
}
sub clone
{
my $self = shift;
bless [$self->[0]->clone, $self->[0]], ref($self);
}
sub abs
{
my $self = shift;
my $base = shift || $self->base || return $self->clone;
bless [$self->[0]->abs($base, @_), $base], ref($self);
}
sub rel
{
my $self = shift;
my $base = shift || $self->base || return $self->clone;
bless [$self->[0]->rel($base, @_), $base], ref($self);
}
1;
__END__
=head1 NAME
URI::WithBase - URI which remember their base
=head1 SYNOPSIS
$u1 = URI::WithBase->new($str, $base);
$u2 = $u1->abs;
$base = $u1->base;
$u1->base( $new_base )
=head1 DESCRIPTION
This module provide the C<URI::WithBase> class. Objects of this class
are like C<URI> objects, but can keep their base too.
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.
=item $uri->base( [$new_base] )
This method can be used to get or set the value of the base attribute.
=item $uri->abs( [$base_uri] )
The $base_uri argument is now made optional as the object carries it's
base with it.
=item $uri->rel( [$base_uri] )
The $base_uri argument is now made optional as the object carries it's
base with it.
=back
=head1 SEE ALSO
L<URI>
=head1 COPYRIGHT
Copyright 1998 Gisle Aas.
=cut