/usr/share/perl5/URI/urn.pm is in liburi-perl 1.60-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | package URI::urn; # RFC 2141
require URI;
@ISA=qw(URI);
use strict;
use Carp qw(carp);
use vars qw(%implementor);
sub _init {
my $class = shift;
my $self = $class->SUPER::_init(@_);
my $nid = $self->nid;
my $impclass = $implementor{$nid};
return $impclass->_urn_init($self, $nid) if $impclass;
$impclass = "URI::urn";
if ($nid =~ /^[A-Za-z\d][A-Za-z\d\-]*\z/) {
my $id = $nid;
# make it a legal perl identifier
$id =~ s/-/_/g;
$id = "_$id" if $id =~ /^\d/;
$impclass = "URI::urn::$id";
no strict 'refs';
unless (@{"${impclass}::ISA"}) {
# Try to load it
eval "require $impclass";
die $@ if $@ && $@ !~ /Can\'t locate.*in \@INC/;
$impclass = "URI::urn" unless @{"${impclass}::ISA"};
}
}
else {
carp("Illegal namespace identifier '$nid' for URN '$self'") if $^W;
}
$implementor{$nid} = $impclass;
return $impclass->_urn_init($self, $nid);
}
sub _urn_init {
my($class, $self, $nid) = @_;
bless $self, $class;
}
sub _nid {
my $self = shift;
my $opaque = $self->opaque;
if (@_) {
my $v = $opaque;
my $new = shift;
$v =~ s/[^:]*/$new/;
$self->opaque($v);
# XXX possible rebless
}
$opaque =~ s/:.*//s;
return $opaque;
}
sub nid { # namespace identifier
my $self = shift;
my $nid = $self->_nid(@_);
$nid = lc($nid) if defined($nid);
return $nid;
}
sub nss { # namespace specific string
my $self = shift;
my $opaque = $self->opaque;
if (@_) {
my $v = $opaque;
my $new = shift;
if (defined $new) {
$v =~ s/(:|\z).*/:$new/;
}
else {
$v =~ s/:.*//s;
}
$self->opaque($v);
}
return undef unless $opaque =~ s/^[^:]*://;
return $opaque;
}
sub canonical {
my $self = shift;
my $nid = $self->_nid;
my $new = $self->SUPER::canonical;
return $new if $nid !~ /[A-Z]/ || $nid =~ /%/;
$new = $new->clone if $new == $self;
$new->nid(lc($nid));
return $new;
}
1;
|