summaryrefslogtreecommitdiff
path: root/lib/URI/IRI.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/URI/IRI.pm')
-rw-r--r--lib/URI/IRI.pm47
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/URI/IRI.pm b/lib/URI/IRI.pm
new file mode 100644
index 0000000..8906399
--- /dev/null
+++ b/lib/URI/IRI.pm
@@ -0,0 +1,47 @@
+package URI::IRI;
+
+# Experimental
+
+use strict;
+use warnings;
+use URI ();
+
+use overload '""' => sub { shift->as_string };
+
+our $VERSION = "1.69";
+
+sub new {
+ my($class, $uri, $scheme) = @_;
+ utf8::upgrade($uri);
+ return bless {
+ uri => URI->new($uri, $scheme),
+ }, $class;
+}
+
+sub clone {
+ my $self = shift;
+ return bless {
+ uri => $self->{uri}->clone,
+ }, ref($self);
+}
+
+sub as_string {
+ my $self = shift;
+ return $self->{uri}->as_iri;
+}
+
+our $AUTOLOAD;
+sub AUTOLOAD
+{
+ my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::')+2);
+
+ # We create the function here so that it will not need to be
+ # autoloaded the next time.
+ no strict 'refs';
+ *$method = sub { shift->{uri}->$method(@_) };
+ goto &$method;
+}
+
+sub DESTROY {} # avoid AUTOLOADing it
+
+1;