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>
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>
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