/usr/local/share/perl5/URI
NameSizeModeActions
file/-0755rm
urn/-0755rm
data.pm34170444editdlrm
Escape.pm70220444editdlrm
file.pm97610444editdlrm
ftp.pm10820444editdlrm
gopher.pm24540444editdlrm
Heuristic.pm65240444editdlrm
http.pm4510444editdlrm
https.pm1700444editdlrm
IRI.pm8200444editdlrm
ldap.pm29500444editdlrm
ldapi.pm4670444editdlrm
ldaps.pm1700444editdlrm
mailto.pm13020444editdlrm
mms.pm1510444editdlrm
news.pm14800444editdlrm
nntp.pm1530444editdlrm
pop.pm12330444editdlrm
QueryParam.pm48870444editdlrm
rlogin.pm1550444editdlrm
rsync.pm2330444editdlrm
rtsp.pm1510444editdlrm
rtspu.pm1520444editdlrm
sftp.pm1240444editdlrm
sip.pm17350444editdlrm
sips.pm1690444editdlrm
snews.pm1980444editdlrm
Split.pm23790444editdlrm
ssh.pm2010444editdlrm
telnet.pm1540444editdlrm
tn3270.pm1540444editdlrm
URL.pm54870444editdlrm
urn.pm22010444editdlrm
WithBase.pm38570444editdlrm
_foreign.pm1330444editdlrm
_generic.pm58480444editdlrm
_idna.pm21030444editdlrm
_ldap.pm32750444editdlrm
_login.pm2570444editdlrm
_punycode.pm46480444editdlrm
_query.pm25570444editdlrm
_segment.pm4420444editdlrm
_server.pm37500444editdlrm
_userpass.pm10600444editdlrm
Edit: /usr/local/share/perl5/URI/data.pm (3417B)
package URI::data; # RFC 2397 use strict; use warnings; use parent 'URI'; our $VERSION = '1.71'; $VERSION = eval $VERSION; use MIME::Base64 qw(encode_base64 decode_base64); use URI::Escape qw(uri_unescape); sub media_type { my $self = shift; my $opaque = $self->opaque; $opaque =~ /^([^,]*),?/ or die; my $old = $1; my $base64; $base64 = $1 if $old =~ s/(;base64)$//i; if (@_) { my $new = shift; $new = "" unless defined $new; $new =~ s/%/%25/g; $new =~ s/,/%2C/g; $base64 = "" unless defined $base64; $opaque =~ s/^[^,]*,?/$new$base64,/; $self->opaque($opaque); } return uri_unescape($old) if $old; # media_type can't really be "0" "text/plain;charset=US-ASCII"; # default type } sub data { my $self = shift; my($enc, $data) = split(",", $self->opaque, 2); unless (defined $data) { $data = ""; $enc = "" unless defined $enc; } my $base64 = ($enc =~ /;base64$/i); if (@_) { $enc =~ s/;base64$//i if $base64; my $new = shift; $new = "" unless defined $new; my $uric_count = _uric_count($new); my $urienc_len = $uric_count + (length($new) - $uric_count) * 3; my $base64_len = int((length($new)+2) / 3) * 4; $base64_len += 7; # because of ";base64" marker if ($base64_len < $urienc_len || $_[0]) { $enc .= ";base64"; $new = encode_base64($new, ""); } else { $new =~ s/%/%25/g; } $self->opaque("$enc,$new"); } return unless defined wantarray; $data = uri_unescape($data); return $base64 ? decode_base64($data) : $data; } # I could not find a better way to interpolate the tr/// chars from # a variable. my $ENC = $URI::uric; $ENC =~ s/%//; eval <new("data:"); $u->media_type("image/gif"); $u->data(scalar(`cat camel.gif`)); print "$u\n"; open(XV, "|xv -") and print XV $u->data; =head1 DESCRIPTION The C class supports C objects belonging to the I URI scheme. The I URI scheme is specified in RFC 2397. It allows inclusion of small data items as "immediate" data, as if it had been included externally. Examples: data:,Perl%20is%20good data:image/gif;base64,R0lGODdhIAAgAIAAAAAAAPj8+CwAAAAAI AAgAAAClYyPqcu9AJyCjtIKc5w5xP14xgeO2tlY3nWcajmZZdeJcG Kxrmimms1KMTa1Wg8UROx4MNUq1HrycMjHT9b6xKxaFLM6VRKzI+p KS9XtXpcbdun6uWVxJXA8pNPkdkkxhxc21LZHFOgD2KMoQXa2KMWI JtnE2KizVUkYJVZZ1nczBxXlFopZBtoJ2diXGdNUymmJdFMAADs= C objects belonging to the data scheme support the common methods (described in L) and the following two scheme-specific methods: =over 4 =item $uri->media_type( [$new_media_type] ) Can be used to get or set the media type specified in the URI. If no media type is specified, then the default C<"text/plain;charset=US-ASCII"> is returned. =item $uri->data( [$new_data] ) Can be used to get or set the data contained in the URI. The data is passed unescaped (in binary form). The decision about whether to base64 encode the data in the URI is taken automatically, based on the encoding that produces the shorter URI string. =back =head1 SEE ALSO L =head1 COPYRIGHT Copyright 1995-1998 Gisle Aas. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut