Skip Menu |
 

Preferred bug tracker

Please visit the preferred bug tracker to report your issue.

This queue is for tickets about the CGI CPAN distribution.

Report information
The Basics
Id: 58000
Status: resolved
Priority: 0/
Queue: CGI

People
Owner: MARKSTOS [...] cpan.org
Requestors: Tim.Bunce [...] pobox.com
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



CC: Tim.Bunce [...] pobox.com
Subject: [PATCH] Make EBCDIC a compile-time constant so there's zero overhead (and less compiled code) in subroutines that test for it.
Date: Mon, 31 May 2010 22:12:24 +0100
To: bug-CGI [...] rt.cpan.org
From: Tim <Tim.Bunce [...] pobox.com>
Download (untitled) / with headers
text/plain 2.4k
From: Tim Bunce <Tim.Bunce@pobox.com> --- lib/CGI/Util.pm | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/CGI/Util.pm b/lib/CGI/Util.pm index eb639e4..9c3809d 100644 --- a/lib/CGI/Util.pm +++ b/lib/CGI/Util.pm @@ -1,7 +1,7 @@ package CGI::Util; use strict; -use vars qw($VERSION @EXPORT_OK @ISA $EBCDIC @A2E @E2A); +use vars qw($VERSION @EXPORT_OK @ISA @A2E @E2A); require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(rearrange rearrange_header make_attributes unescape escape @@ -9,7 +9,8 @@ require Exporter; $VERSION = '3.48'; -$EBCDIC = "\t" ne "\011"; +use constant EBCDIC => "\t" ne "\011"; + # (ord('^') == 95) for codepage 1047 as on os390, vmesa @A2E = ( 0, 1, 2, 3, 55, 45, 46, 47, 22, 5, 21, 11, 12, 13, 14, 15, @@ -48,7 +49,7 @@ $EBCDIC = "\t" ne "\011"; 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,179,219,220,217,218,159 ); -if ($EBCDIC && ord('^') == 106) { # as in the BS2000 posix-bc coded character set +if (EBCDIC && ord('^') == 106) { # as in the BS2000 posix-bc coded character set $A2E[91] = 187; $A2E[92] = 188; $A2E[94] = 106; $A2E[96] = 74; $A2E[123] = 251; $A2E[125] = 253; $A2E[126] = 255; $A2E[159] = 95; $A2E[162] = 176; $A2E[166] = 208; $A2E[168] = 121; $A2E[172] = 186; @@ -61,7 +62,7 @@ if ($EBCDIC && ord('^') == 106) { # as in the BS2000 posix-bc coded character se $E2A[221] = 219; $E2A[224] = 217; $E2A[251] = 123; $E2A[253] = 125; $E2A[255] = 126; } -elsif ($EBCDIC && ord('^') == 176) { # as in codepage 037 on os400 +elsif (EBCDIC && ord('^') == 176) { # as in codepage 037 on os400 $A2E[10] = 37; $A2E[91] = 186; $A2E[93] = 187; $A2E[94] = 176; $A2E[133] = 21; $A2E[168] = 189; $A2E[172] = 95; $A2E[221] = 173; @@ -210,7 +211,7 @@ sub unescape { my $todecode = shift; return undef unless defined($todecode); $todecode =~ tr/+/ /; # pluses become spaces - if ($EBCDIC) { + if (EBCDIC) { $todecode =~ s/%([0-9a-fA-F]{2})/chr $A2E[hex($1)]/ge; } else { # handle surrogate pairs first -- dankogai @@ -276,7 +277,7 @@ sub escape { my $toencode = shift; return undef unless defined($toencode); utf8::encode($toencode) if ($] >= 5.008 && utf8::is_utf8($toencode)); - if ($EBCDIC) { + if (EBCDIC) { $toencode=~s/([^a-zA-Z0-9_.~-])/uc sprintf("%%%02x",$E2A[ord($1)])/eg; } else { $toencode=~s/([^a-zA-Z0-9_.~-])/uc sprintf("%%%02x",ord($1))/eg; -- 1.7.0.4
Subject: Re: [rt.cpan.org #58000] [PATCH] Make EBCDIC a compile-time constant so there's zero overhead (and less compiled code) in subroutines that test for it.
Date: Thu, 04 Nov 2010 08:14:08 -0400
To: bug-CGI [...] rt.cpan.org
From: Mark Stosberg <mark [...] summersault.com>
Download (untitled) / with headers
text/plain 3.1k
Tim, Sorry for the delay in response. This patch looks good to me. Thanks for the contribution! Mark On 05/31/2010 05:12 PM, Tim Bunce via RT wrote: Show quoted text
> Mon May 31 17:12:40 2010: Request 58000 was acted upon. > Transaction: Ticket created by Tim.Bunce@pobox.com > Queue: CGI > Subject: [PATCH] Make EBCDIC a compile-time constant so there's zero overhead (and less compiled code) in subroutines that test for it. > Broken in: (no value) > Severity: (no value) > Owner: Nobody > Requestors: Tim.Bunce@pobox.com > Status: new > Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=58000 > > > > From: Tim Bunce <Tim.Bunce@pobox.com> > > --- > lib/CGI/Util.pm | 13 +++++++------ > 1 files changed, 7 insertions(+), 6 deletions(-) > > diff --git a/lib/CGI/Util.pm b/lib/CGI/Util.pm > index eb639e4..9c3809d 100644 > --- a/lib/CGI/Util.pm > +++ b/lib/CGI/Util.pm > @@ -1,7 +1,7 @@ > package CGI::Util; > > use strict; > -use vars qw($VERSION @EXPORT_OK @ISA $EBCDIC @A2E @E2A); > +use vars qw($VERSION @EXPORT_OK @ISA @A2E @E2A); > require Exporter; > @ISA = qw(Exporter); > @EXPORT_OK = qw(rearrange rearrange_header make_attributes unescape escape > @@ -9,7 +9,8 @@ require Exporter; > > $VERSION = '3.48'; > > -$EBCDIC = "\t" ne "\011"; > +use constant EBCDIC => "\t" ne "\011"; > + > # (ord('^') == 95) for codepage 1047 as on os390, vmesa > @A2E = ( > 0, 1, 2, 3, 55, 45, 46, 47, 22, 5, 21, 11, 12, 13, 14, 15, > @@ -48,7 +49,7 @@ $EBCDIC = "\t" ne "\011"; > 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,179,219,220,217,218,159 > ); > > -if ($EBCDIC && ord('^') == 106) { # as in the BS2000 posix-bc coded character set > +if (EBCDIC && ord('^') == 106) { # as in the BS2000 posix-bc coded character set > $A2E[91] = 187; $A2E[92] = 188; $A2E[94] = 106; $A2E[96] = 74; > $A2E[123] = 251; $A2E[125] = 253; $A2E[126] = 255; $A2E[159] = 95; > $A2E[162] = 176; $A2E[166] = 208; $A2E[168] = 121; $A2E[172] = 186; > @@ -61,7 +62,7 @@ if ($EBCDIC && ord('^') == 106) { # as in the BS2000 posix-bc coded character se > $E2A[221] = 219; $E2A[224] = 217; $E2A[251] = 123; $E2A[253] = 125; > $E2A[255] = 126; > } > -elsif ($EBCDIC && ord('^') == 176) { # as in codepage 037 on os400 > +elsif (EBCDIC && ord('^') == 176) { # as in codepage 037 on os400 > $A2E[10] = 37; $A2E[91] = 186; $A2E[93] = 187; $A2E[94] = 176; > $A2E[133] = 21; $A2E[168] = 189; $A2E[172] = 95; $A2E[221] = 173; > > @@ -210,7 +211,7 @@ sub unescape { > my $todecode = shift; > return undef unless defined($todecode); > $todecode =~ tr/+/ /; # pluses become spaces > - if ($EBCDIC) { > + if (EBCDIC) { > $todecode =~ s/%([0-9a-fA-F]{2})/chr $A2E[hex($1)]/ge; > } else { > # handle surrogate pairs first -- dankogai > @@ -276,7 +277,7 @@ sub escape { > my $toencode = shift; > return undef unless defined($toencode); > utf8::encode($toencode) if ($] >= 5.008 && utf8::is_utf8($toencode)); > - if ($EBCDIC) { > + if (EBCDIC) { > $toencode=~s/([^a-zA-Z0-9_.~-])/uc sprintf("%%%02x",$E2A[ord($1)])/eg; > } else { > $toencode=~s/([^a-zA-Z0-9_.~-])/uc sprintf("%%%02x",ord($1))/eg;
Tim, Your patch has now been applied in our github repo. Mark


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.