/
usr
/
local
/
share
/
perl5
/
URI
/
/usr/local/share/perl5/URI
mkdir
upload
Name
Size
Mode
Actions
file/
-
0755
rm
urn/
-
0755
rm
data.pm
3417
0444
edit
dl
rm
Escape.pm
7022
0444
edit
dl
rm
file.pm
9761
0444
edit
dl
rm
ftp.pm
1082
0444
edit
dl
rm
gopher.pm
2454
0444
edit
dl
rm
Heuristic.pm
6524
0444
edit
dl
rm
http.pm
451
0444
edit
dl
rm
https.pm
170
0444
edit
dl
rm
IRI.pm
820
0444
edit
dl
rm
ldap.pm
2950
0444
edit
dl
rm
ldapi.pm
467
0444
edit
dl
rm
ldaps.pm
170
0444
edit
dl
rm
mailto.pm
1302
0444
edit
dl
rm
mms.pm
151
0444
edit
dl
rm
news.pm
1480
0444
edit
dl
rm
nntp.pm
153
0444
edit
dl
rm
pop.pm
1233
0444
edit
dl
rm
QueryParam.pm
4887
0444
edit
dl
rm
rlogin.pm
155
0444
edit
dl
rm
rsync.pm
233
0444
edit
dl
rm
rtsp.pm
151
0444
edit
dl
rm
rtspu.pm
152
0444
edit
dl
rm
sftp.pm
124
0444
edit
dl
rm
sip.pm
1735
0444
edit
dl
rm
sips.pm
169
0444
edit
dl
rm
snews.pm
198
0444
edit
dl
rm
Split.pm
2379
0444
edit
dl
rm
ssh.pm
201
0444
edit
dl
rm
telnet.pm
154
0444
edit
dl
rm
tn3270.pm
154
0444
edit
dl
rm
URL.pm
5487
0444
edit
dl
rm
urn.pm
2201
0444
edit
dl
rm
WithBase.pm
3857
0444
edit
dl
rm
_foreign.pm
133
0444
edit
dl
rm
_generic.pm
5848
0444
edit
dl
rm
_idna.pm
2103
0444
edit
dl
rm
_ldap.pm
3275
0444
edit
dl
rm
_login.pm
257
0444
edit
dl
rm
_punycode.pm
4648
0444
edit
dl
rm
_query.pm
2557
0444
edit
dl
rm
_segment.pm
442
0444
edit
dl
rm
_server.pm
3750
0444
edit
dl
rm
_userpass.pm
1060
0444
edit
dl
rm
Edit:
/usr/local/share/perl5/URI/_punycode.pm
(4648B)
package URI::_punycode; use strict; use warnings; our $VERSION = '1.71'; $VERSION = eval $VERSION; use Exporter 'import'; our @EXPORT = qw(encode_punycode decode_punycode); use integer; our $DEBUG = 0; use constant BASE => 36; use constant TMIN => 1; use constant TMAX => 26; use constant SKEW => 38; use constant DAMP => 700; use constant INITIAL_BIAS => 72; use constant INITIAL_N => 128; my $Delimiter = chr 0x2D; my $BasicRE = qr/[\x00-\x7f]/; sub _croak { require Carp; Carp::croak(@_); } sub digit_value { my $code = shift; return ord($code) - ord("A") if $code =~ /[A-Z]/; return ord($code) - ord("a") if $code =~ /[a-z]/; return ord($code) - ord("0") + 26 if $code =~ /[0-9]/; return; } sub code_point { my $digit = shift; return $digit + ord('a') if 0 <= $digit && $digit <= 25; return $digit + ord('0') - 26 if 26 <= $digit && $digit <= 36; die 'NOT COME HERE'; } sub adapt { my($delta, $numpoints, $firsttime) = @_; $delta = $firsttime ? $delta / DAMP : $delta / 2; $delta += $delta / $numpoints; my $k = 0; while ($delta > ((BASE - TMIN) * TMAX) / 2) { $delta /= BASE - TMIN; $k += BASE; } return $k + (((BASE - TMIN + 1) * $delta) / ($delta + SKEW)); } sub decode_punycode { my $code = shift; my $n = INITIAL_N; my $i = 0; my $bias = INITIAL_BIAS; my @output; if ($code =~ s/(.*)$Delimiter//o) { push @output, map ord, split //, $1; return _croak('non-basic code point') unless $1 =~ /^$BasicRE*$/o; } while ($code) { my $oldi = $i; my $w = 1; LOOP: for (my $k = BASE; 1; $k += BASE) { my $cp = substr($code, 0, 1, ''); my $digit = digit_value($cp); defined $digit or return _croak("invalid punycode input"); $i += $digit * $w; my $t = ($k <= $bias) ? TMIN : ($k >= $bias + TMAX) ? TMAX : $k - $bias; last LOOP if $digit < $t; $w *= (BASE - $t); } $bias = adapt($i - $oldi, @output + 1, $oldi == 0); warn "bias becomes $bias" if $DEBUG; $n += $i / (@output + 1); $i = $i % (@output + 1); splice(@output, $i, 0, $n); warn join " ", map sprintf('%04x', $_), @output if $DEBUG; $i++; } return join '', map chr, @output; } sub encode_punycode { my $input = shift; my @input = split //, $input; my $n = INITIAL_N; my $delta = 0; my $bias = INITIAL_BIAS; my @output; my @basic = grep /$BasicRE/, @input; my $h = my $b = @basic; push @output, @basic; push @output, $Delimiter if $b && $h < @input; warn "basic codepoints: (@output)" if $DEBUG; while ($h < @input) { my $m = min(grep { $_ >= $n } map ord, @input); warn sprintf "next code point to insert is %04x", $m if $DEBUG; $delta += ($m - $n) * ($h + 1); $n = $m; for my $i (@input) { my $c = ord($i); $delta++ if $c < $n; if ($c == $n) { my $q = $delta; LOOP: for (my $k = BASE; 1; $k += BASE) { my $t = ($k <= $bias) ? TMIN : ($k >= $bias + TMAX) ? TMAX : $k - $bias; last LOOP if $q < $t; my $cp = code_point($t + (($q - $t) % (BASE - $t))); push @output, chr($cp); $q = ($q - $t) / (BASE - $t); } push @output, chr(code_point($q)); $bias = adapt($delta, $h + 1, $h == $b); warn "bias becomes $bias" if $DEBUG; $delta = 0; $h++; } } $delta++; $n++; } return join '', @output; } sub min { my $min = shift; for (@_) { $min = $_ if $_ <= $min } return $min; } 1; __END__ =head1 NAME URI::_punycode - encodes Unicode string in Punycode =head1 SYNOPSIS use URI::_punycode; $punycode = encode_punycode($unicode); $unicode = decode_punycode($punycode); =head1 DESCRIPTION URI::_punycode is a module to encode / decode Unicode strings into Punycode, an efficient encoding of Unicode for use with IDNA. This module requires Perl 5.6.0 or over to handle UTF8 flagged Unicode strings. =head1 FUNCTIONS This module exports following functions by default. =over 4 =item encode_punycode $punycode = encode_punycode($unicode); takes Unicode string (UTF8-flagged variable) and returns Punycode encoding for it. =item decode_punycode $unicode = decode_punycode($punycode) takes Punycode encoding and returns original Unicode string. =back These functions throw exceptions on failure. You can catch 'em via C<eval>. =head1 AUTHOR Tatsuhiko Miyagawa E<lt>miyagawa@bulknews.netE<gt> is the author of IDNA::Punycode v0.02 which was the basis for this module. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<IDNA::Punycode>, RFC 3492 =cut
Save
cmd:
run