Debian lenny version packages
[pkg-perl] / deb-src / liburi-perl / liburi-perl-1.35.dfsg.1 / URI / urn / isbn.pm
1 package URI::urn::isbn;  # RFC 3187
2
3 require URI::urn;
4 @ISA=qw(URI::urn);
5
6 use strict;
7 use Business::ISBN ();
8
9
10 sub _isbn {
11     my $nss = shift;
12     $nss = $nss->nss if ref($nss);
13     my $isbn = Business::ISBN->new($nss);
14     $isbn = undef if $isbn && !$isbn->is_valid;
15     return $isbn;
16 }
17
18 sub _nss_isbn {
19     my $self = shift;
20     my $nss = $self->nss(@_);
21     my $isbn = _isbn($nss);
22     $isbn = $isbn->as_string if $isbn;
23     return($nss, $isbn);
24 }
25
26 sub isbn {
27     my $self = shift;
28     my $isbn;
29     (undef, $isbn) = $self->_nss_isbn(@_);
30     return $isbn;
31 }
32
33 sub isbn_publisher_code {
34     my $isbn = shift->_isbn || return undef;
35     return $isbn->publisher_code;
36 }
37
38 sub isbn_country_code {
39     my $isbn = shift->_isbn || return undef;
40     return $isbn->country_code;
41 }
42
43 sub isbn_as_ean {
44     my $isbn = shift->_isbn || return undef;
45     return $isbn->as_ean;
46 }
47
48 sub canonical {
49     my $self = shift;
50     my($nss, $isbn) = $self->_nss_isbn;
51     my $new = $self->SUPER::canonical;
52     return $new unless $nss && $isbn && $nss ne $isbn;
53     $new = $new->clone if $new == $self;
54     $new->nss($isbn);
55     return $new;
56 }
57
58 1;