perl5 porters,
There is a response in approval from Sastry to my proposed patch.
I'll forward it and now submit the proposal (on my prev mail) to p5p.
Regards,
SADAHIRO Tomoyuki
Forwarded by SADAHIRO Tomoyuki <[EMAIL PROTECTED]>
----------------------- Original Message -----------------------
From: Sastry <[EMAIL PROTECTED]>
To: SADAHIRO Tomoyuki <[EMAIL PROTECTED]>
Date: Tue, 16 Aug 2005 15:27:45 +0530
Subject: Re: [PATCH] Re: Transliteration operator(tr//)on EBCDIC platform
----
Hi
The patch works now as expected.
Thanks
-Sastry
On 8/11/05, SADAHIRO Tomoyuki <[EMAIL PROTECTED]> wrote:
>
> On Wed, 10 Aug 2005 23:56:31 -0700 (PDT), rajarshi das <[EMAIL PROTECTED]>
> wrote
>
> > Hi,
> > This is Rajarshi expressing Sastry's viewpoints since he's on vacation.
> >
> > SADAHIRO Tomoyuki <[EMAIL PROTECTED]> wrote:
> >
> >> According to the above statement in perlebcdic.pod,
> >> s/[\x89-\x91]/X/g must substitute \x8e with X.
> >> But it doesn't concern whether tr/\x89-\x91/X/ would substitute \x8e
> >> with X or not, since tr/// does not use brackets, [ ].
> >
> >> Though I think ranges in [ ] and ranges in tr/// should coincide
> >> and agree that tr/\x89-\x91/X/ should substitute \x8e with X,
> >> that is just my opinion.
> >> I don't know whether it is true and correct.
> > Is there some way we can confirm if this is correct (and expected behaviour)
> > since there isnt any explicit documentation for the tr operator ?
>
> Since t/op/tr.t already has a test case (cf. Change 9038)
> which Sastry previously pointed out its failing on EBCDIC Platform,
> I assume that at least the then pumpking thought it to be correct.
>
> >> By the way, when you say "If I specify [\x89-\x91]", does it
> >> mean s/[\x89-\x91]/X/g or tr/\x89-\x91/X/ ? I'm confused.
> > We mean tr/\x89-\x91/X/.
> >
> >
> >> We are first informed by you that gapped characters are not
> >> substituted with X by tr/\x89-\x91/X/.
> >> And you said s/[\x89-\x91]/X/g substituted all the characters
> >> including gapped characters with X, hadn't you?
> >
> > Yes.
> >> If so, I assume your [\x89-\x91] which doesn't matching any of
> >> the gapped characters to be tr/\x89-\x91/X/.
> > That's correct. We mean tr/\x89-\x91/X/.
> >
> >
> >> The following is a part of the current core tests from op/pat.t.
> >> I believe they should be passed.
> > Yes all the following tests pass. I think the following tests are in the
> > context of the
> > s/[]/X/ operator and hence pass.
> >
> > Thanks,
> >
> > Rajarshi.
>
> OK. To me, it is confirmed that s/[]/X/ is fine and tr/// has a problem.
> Since I don't have any EBCDIC machine, I can't ensure the following
> patch will really makes sense.
>
> Regards,
> SADAHIRO Tomoyuki
>
> ! t/op/tr.t, toke.t
>
> diff -ur perl~/t/op/tr.t perl/t/op/tr.t
> --- perl~/t/op/tr.t Mon Aug 01 17:17:24 2005
> +++ perl/t/op/tr.t Thu Aug 11 23:41:22 2005
> @@ -295,18 +295,15 @@
> # (i-j, r-s, I-J, R-S), [\x89-\x91] [\xc9-\xd1] has to match them,
> # from Karsten Sperling.
>
> -# Not working in EBCDIC as of 12674.
> $c = ($a = "\x89\x8a\x8b\x8c\x8d\x8f\x90\x91") =~ tr/\x89-\x91/X/;
> is($c, 8);
> is($a, "XXXXXXXX");
> -
> -# Not working in EBCDIC as of 12674.
> +
> $c = ($a = "\xc9\xca\xcb\xcc\xcd\xcf\xd0\xd1") =~ tr/\xc9-\xd1/X/;
> is($c, 8);
> is($a, "XXXXXXXX");
>
> -
> -SKIP: {
> +SKIP: {
> skip "not EBCDIC", 4 unless $Is_EBCDIC;
>
> $c = ($a = "\x89\x8a\x8b\x8c\x8d\x8f\x90\x91") =~ tr/i-j/X/;
> diff -ur perl~/toke.c perl/toke.c
> --- perl~/toke.c Mon Jul 18 04:31:02 2005
> +++ perl/toke.c Thu Aug 11 22:55:18 2005
> @@ -1368,6 +1368,9 @@
> I32 has_utf8 = FALSE; /* Output constant is UTF8 */
> I32 this_utf8 = UTF; /* The source string is
> assumed to be UTF8 */
> UV uv;
> +#ifdef EBCDIC
> + UV literal_endpoint = 0;
> +#endif
>
> const char *leaveit = /* set of acceptably-backslashed characters */
> PL_lex_inpat
> @@ -1417,8 +1420,9 @@
> }
>
> #ifdef EBCDIC
> - if ((isLOWER(min) && isLOWER(max)) ||
> - (isUPPER(min) && isUPPER(max))) {
> + if (literal_endpoint == 2 &&
> + ((isLOWER(min) && isLOWER(max)) ||
> + (isUPPER(min) && isUPPER(max)))) {
> if (isLOWER(min)) {
> for (i = min; i <= max; i++)
> if (isLOWER(i))
> @@ -1437,6 +1441,9 @@
> /* mark the range as done, and continue */
> dorange = FALSE;
> didrange = TRUE;
> +#ifdef EBCDIC
> + literal_endpoint = 0;
> +#endif
> continue;
> }
>
> @@ -1455,6 +1462,9 @@
> }
> else {
> didrange = FALSE;
> +#ifdef EBCDIC
> + literal_endpoint = 0;
> +#endif
> }
> }
>
> @@ -1788,6 +1798,10 @@
> s++;
> continue;
> } /* end if (backslash) */
> +#ifdef EBCDIC
> + else
> + literal_endpoint++;
> +#endif
>
> default_action:
> /* If we started with encoded form, or already know we want it
> ###END OF PATCH
>
>
>
--------------------- Original Message Ends --------------------