This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Module::CoreList for 5.15.3
[perl5.git] / pod / perlebcdic.pod
index f178912..ecd0676 100644 (file)
@@ -1,3 +1,5 @@
+=encoding utf8
+
 =head1 NAME
 
 perlebcdic - Considerations for running Perl on EBCDIC platforms
@@ -6,7 +8,7 @@ perlebcdic - Considerations for running Perl on EBCDIC platforms
 
 An exploration of some of the issues facing Perl programmers
 on EBCDIC based computers.  We do not cover localization, 
-internationalization, or multi byte character set issues other
+internationalization, or multi-byte character set issues other
 than some discussion of UTF-8 and UTF-EBCDIC.
 
 Portions that are still incomplete are marked with XXX.
@@ -24,7 +26,7 @@ set of
 integers running from 0 to 127 (decimal) that imply character 
 interpretation by the display and other systems of computers.  
 The range 0..127 can be covered by setting the bits in a 7-bit binary 
-digit, hence the set is sometimes referred to as "7-bit ASCII".  
+digit, hence the set is sometimes referred to as "7-bit ASCII".  
 ASCII was described by the American National Standards Institute 
 document ANSI X3.4-1986.  It was also described by ISO 646:1991 
 (with localization for currency symbols).  The full ASCII set is 
@@ -61,10 +63,10 @@ also known as CCSID 819 (or sometimes 0819 or even 00819).
 =head2 EBCDIC
 
 The Extended Binary Coded Decimal Interchange Code refers to a 
-large collection of single and multi byte coded character sets that are
+large collection of single- and multi-byte coded character sets that are
 different from ASCII or ISO 8859-1 and are all slightly different from each
 other; they typically run on host computers.  The EBCDIC encodings derive from
-8 bit byte extensions of Hollerith punched card encodings.  The layout on the
+8-bit byte extensions of Hollerith punched card encodings.  The layout on the
 cards was such that high bits were set for the upper and lower case alphabet
 characters [a-z] and [A-Z], but there were gaps within each Latin alphabet
 range.
@@ -122,8 +124,8 @@ The problem is: which code points to use for code points less than 256?
 In EBCDIC, for the low 256 the EBCDIC code points are used.  This
 means that the equivalences
 
-       pack("U", ord($character)) eq $character
-       unpack("U", $character) == ord $character
+    pack("U", ord($character)) eq $character
+    unpack("U", $character) == ord $character
 
 will hold.  (If Unicode code points were applied consistently over
 all the possible code points, pack("U",ord("A")) would in EBCDIC
@@ -180,23 +182,23 @@ to translate from EBCDIC to Latin-1 code points.
 Encode knows about more EBCDIC character sets than Perl can currently
 be compiled to run on.
 
-       use Encode 'from_to';
+   use Encode 'from_to';
 
-       my %ebcdic = ( 176 => 'cp37', 95 => 'cp1047', 106 => 'posix-bc' );
+   my %ebcdic = ( 176 => 'cp37', 95 => 'cp1047', 106 => 'posix-bc' );
 
-       # $a is in EBCDIC code points
-       from_to($a, $ebcdic{ord '^'}, 'latin1');
-       # $a is ISO 8859-1 code points
+   # $a is in EBCDIC code points
+   from_to($a, $ebcdic{ord '^'}, 'latin1');
+   # $a is ISO 8859-1 code points
 
 and from Latin-1 code points to EBCDIC code points
 
-       use Encode 'from_to';
+   use Encode 'from_to';
 
-       my %ebcdic = ( 176 => 'cp37', 95 => 'cp1047', 106 => 'posix-bc' );
+   my %ebcdic = ( 176 => 'cp37', 95 => 'cp1047', 106 => 'posix-bc' );
 
-       # $a is ISO 8859-1 code points
-       from_to($a, 'latin1', $ebcdic{ord '^'});
-       # $a is in EBCDIC code points
+   # $a is ISO 8859-1 code points
+   from_to($a, 'latin1', $ebcdic{ord '^'});
+   # $a is in EBCDIC code points
 
 For doing I/O it is suggested that you use the autotranslating features
 of PerlIO, see L<perluniintro>.
@@ -237,7 +239,7 @@ s/CAPITAL LETTER// in some cases, and s/SMALL LETTER ([A-Z])/\l$1/
 in some other cases.  The "names" of the controls listed here are 
 the Unicode Version 1 names, except for the few that don't have names, in which
 case the names in the Wikipedia article were used
-(L<http://en.wikipedia.org/wiki/C0_and_C1_control_codes>.
+(L<http://en.wikipedia.org/wiki/C0_and_C1_control_codes>).
 The differences between the 0037 and 1047 sets are 
 flagged with ***.  The differences between the 1047 and POSIX-BC sets 
 are flagged with ###.  All ord() numbers listed are decimal.  If you 
@@ -252,7 +254,8 @@ work with a pod2_other_format translation) through:
 =back
 
     perl -ne 'if(/(.{43})(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/)' \
-     -e '{printf("%s%-9o%-9o%-9o%o\n",$1,$2,$3,$4,$5)}' perlebcdic.pod
+     -e '{printf("%s%-9.03o%-9.03o%-9.03o%.03o\n",$1,$2,$3,$4,$5)}' \
+     perlebcdic.pod
 
 If you want to retain the UTF-x code points then in script form you
 might want to write:
@@ -263,20 +266,25 @@ might want to write:
 
 =back
 
-    open(FH,"<perlebcdic.pod") or die "Could not open perlebcdic.pod: $!";
-    while (<FH>) {
-        if (/(.{43})(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\.?(\d*)\s+(\d+)\.?(\d*)/)  {
-            if ($7 ne '' && $9 ne '') {
-                printf("%s%-9o%-9o%-9o%-9o%-3o.%-5o%-3o.%o\n",$1,$2,$3,$4,$5,$6,$7,$8,$9);
-            }
-            elsif ($7 ne '') {
-                printf("%s%-9o%-9o%-9o%-9o%-3o.%-5o%o\n",$1,$2,$3,$4,$5,$6,$7,$8);
-            }
-            else {
-                printf("%s%-9o%-9o%-9o%-9o%-9o%o\n",$1,$2,$3,$4,$5,$6,$8);
-            }
-        }
-    }
+ open(FH,"<perlebcdic.pod") or die "Could not open perlebcdic.pod: $!";
+ while (<FH>) {
+     if (/(.{43})(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\.?(\d*)\s+(\d+)\.?(\d*)/)
+     {
+         if ($7 ne '' && $9 ne '') {
+             printf(
+                "%s%-9.03o%-9.03o%-9.03o%-9.03o%-3o.%-5o%-3o.%.03o\n",
+                                            $1,$2,$3,$4,$5,$6,$7,$8,$9);
+         }
+         elsif ($7 ne '') {
+             printf("%s%-9.03o%-9.03o%-9.03o%-9.03o%-3o.%-5o%.03o\n",
+                                           $1,$2,$3,$4,$5,$6,$7,$8);
+         }
+         else {
+             printf("%s%-9.03o%-9.03o%-9.03o%-9.03o%-9.03o%.03o\n",
+                                                $1,$2,$3,$4,$5,$6,$8);
+         }
+     }
+ }
 
 If you would rather see this table listing hexadecimal values then
 run the table through:
@@ -288,7 +296,8 @@ run the table through:
 =back
 
     perl -ne 'if(/(.{43})(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/)' \
-     -e '{printf("%s%-9X%-9X%-9X%X\n",$1,$2,$3,$4,$5)}' perlebcdic.pod
+     -e '{printf("%s%-9.02X%-9.02X%-9.02X%.02X\n",$1,$2,$3,$4,$5)}' \
+     perlebcdic.pod
 
 Or, in order to retain the UTF-x code points in hexadecimal:
 
@@ -298,20 +307,25 @@ Or, in order to retain the UTF-x code points in hexadecimal:
 
 =back
 
-    open(FH,"<perlebcdic.pod") or die "Could not open perlebcdic.pod: $!";
-    while (<FH>) {
-        if (/(.{43})(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\.?(\d*)\s+(\d+)\.?(\d*)/)  {
-            if ($7 ne '' && $9 ne '') {
-                printf("%s%-9X%-9X%-9X%-9X%-2X.%-6X%-2X.%X\n",$1,$2,$3,$4,$5,$6,$7,$8,$9);
-            }
-            elsif ($7 ne '') {
-                printf("%s%-9X%-9X%-9X%-9X%-2X.%-6X%X\n",$1,$2,$3,$4,$5,$6,$7,$8);
-            }
-            else {
-                printf("%s%-9X%-9X%-9X%-9X%-9X%X\n",$1,$2,$3,$4,$5,$6,$8);
-            }
-        }
-    }
+ open(FH,"<perlebcdic.pod") or die "Could not open perlebcdic.pod: $!";
+ while (<FH>) {
+     if (/(.{43})(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\.?(\d*)\s+(\d+)\.?(\d*)/)
+     {
+         if ($7 ne '' && $9 ne '') {
+             printf(
+                "%s%-9.02X%-9.02X%-9.02X%-9.02X%-2X.%-6.02X%02X.%02X\n",
+                                           $1,$2,$3,$4,$5,$6,$7,$8,$9);
+         }
+         elsif ($7 ne '') {
+             printf("%s%-9.02X%-9.02X%-9.02X%-9.02X%-2X.%-6.02X%02X\n",
+                                              $1,$2,$3,$4,$5,$6,$7,$8);
+         }
+         else {
+             printf("%s%-9.02X%-9.02X%-9.02X%-9.02X%-9.02X%02X\n",
+                                                  $1,$2,$3,$4,$5,$6,$8);
+         }
+     }
+ }
 
 
                                       ISO 8859-1  CCSID    CCSID                    CCSID 1047
@@ -583,7 +597,8 @@ ASCII + Latin-1 order then run the table through:
 
 =back
 
-    perl -ne 'if(/.{43}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}/)'\
+ perl \
+    -ne 'if(/.{43}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}/)'\
      -e '{push(@l,$_)}' \
      -e 'END{print map{$_->[0]}' \
      -e '          sort{$a->[1] <=> $b->[1]}' \
@@ -598,11 +613,12 @@ If you would rather see it in CCSID 1047 order then change the number
 
 =back
 
-    perl -ne 'if(/.{43}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}/)'\
-     -e '{push(@l,$_)}' \
-     -e 'END{print map{$_->[0]}' \
-     -e '          sort{$a->[1] <=> $b->[1]}' \
-     -e '          map{[$_,substr($_,61,3)]}@l;}' perlebcdic.pod
+ perl \
+    -ne 'if(/.{43}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}/)'\
+    -e '{push(@l,$_)}' \
+    -e 'END{print map{$_->[0]}' \
+    -e '          sort{$a->[1] <=> $b->[1]}' \
+    -e '          map{[$_,substr($_,61,3)]}@l;}' perlebcdic.pod
 
 If you would rather see it in POSIX-BC order then change the number
 61 in the last line to 70, like this:
@@ -613,7 +629,8 @@ If you would rather see it in POSIX-BC order then change the number
 
 =back
 
-    perl -ne 'if(/.{43}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}/)'\
+ perl \
+    -ne 'if(/.{43}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}\s{6,8}\d{1,3}/)'\
      -e '{push(@l,$_)}' \
      -e 'END{print map{$_->[0]}' \
      -e '          sort{$a->[1] <=> $b->[1]}' \
@@ -656,7 +673,7 @@ However, it would be unwise to write tests such as:
 Obviously the first of these will fail to distinguish most ASCII platforms
 from either a CCSID 0037, a 1047, or a POSIX-BC EBCDIC platform since "\r" eq 
 chr(13) under all of those coded character sets.  But note too that 
-because "\n" is chr(13) and "\r" is chr(10) on the MacIntosh (which is an 
+because "\n" is chr(13) and "\r" is chr(10) on the Macintosh (which is an 
 ASCII platform) the second C<$is_ascii> test will lead to trouble there.
 
 To determine whether or not perl was built under an EBCDIC 
@@ -672,44 +689,49 @@ code page you can use the Config module like so:
 In order to convert a string of characters from one character set to 
 another a simple list of numbers, such as in the right columns in the
 above table, along with perl's tr/// operator is all that is needed.  
-The data in the table are in ASCII order hence the EBCDIC columns 
-provide easy to use ASCII to EBCDIC operations that are also easily 
+The data in the table are in ASCII/Latin1 order, hence the EBCDIC columns
+provide easy-to-use ASCII/Latin1 to EBCDIC operations that are also easily 
 reversed.
 
-For example, to convert ASCII to code page 037 take the output of the second 
-column from the output of recipe 0 (modified to add \\ characters) and use 
-it in tr/// like so:
+For example, to convert ASCII/Latin1 to code page 037 take the output of the
+second numbers column from the output of recipe 2 (modified to add '\'
+characters) and use it in tr/// like so:
 
     $cp_037 = 
-    '\000\001\002\003\234\011\206\177\227\215\216\013\014\015\016\017' .
-    '\020\021\022\023\235\205\010\207\030\031\222\217\034\035\036\037' .
-    '\200\201\202\203\204\012\027\033\210\211\212\213\214\005\006\007' .
-    '\220\221\026\223\224\225\226\004\230\231\232\233\024\025\236\032' .
-    '\040\240\342\344\340\341\343\345\347\361\242\056\074\050\053\174' .
-    '\046\351\352\353\350\355\356\357\354\337\041\044\052\051\073\254' .
-    '\055\057\302\304\300\301\303\305\307\321\246\054\045\137\076\077' .
-    '\370\311\312\313\310\315\316\317\314\140\072\043\100\047\075\042' .
-    '\330\141\142\143\144\145\146\147\150\151\253\273\360\375\376\261' .
-    '\260\152\153\154\155\156\157\160\161\162\252\272\346\270\306\244' .
-    '\265\176\163\164\165\166\167\170\171\172\241\277\320\335\336\256' .
-    '\136\243\245\267\251\247\266\274\275\276\133\135\257\250\264\327' .
-    '\173\101\102\103\104\105\106\107\110\111\255\364\366\362\363\365' .
-    '\175\112\113\114\115\116\117\120\121\122\271\373\374\371\372\377' .
-    '\134\367\123\124\125\126\127\130\131\132\262\324\326\322\323\325' .
-    '\060\061\062\063\064\065\066\067\070\071\263\333\334\331\332\237' ;
+    '\x00\x01\x02\x03\x37\x2D\x2E\x2F\x16\x05\x25\x0B\x0C\x0D\x0E\x0F' .
+    '\x10\x11\x12\x13\x3C\x3D\x32\x26\x18\x19\x3F\x27\x1C\x1D\x1E\x1F' .
+    '\x40\x5A\x7F\x7B\x5B\x6C\x50\x7D\x4D\x5D\x5C\x4E\x6B\x60\x4B\x61' .
+    '\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\x7A\x5E\x4C\x7E\x6E\x6F' .
+    '\x7C\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xD1\xD2\xD3\xD4\xD5\xD6' .
+    '\xD7\xD8\xD9\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xBA\xE0\xBB\xB0\x6D' .
+    '\x79\x81\x82\x83\x84\x85\x86\x87\x88\x89\x91\x92\x93\x94\x95\x96' .
+    '\x97\x98\x99\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xC0\x4F\xD0\xA1\x07' .
+    '\x20\x21\x22\x23\x24\x15\x06\x17\x28\x29\x2A\x2B\x2C\x09\x0A\x1B' .
+    '\x30\x31\x1A\x33\x34\x35\x36\x08\x38\x39\x3A\x3B\x04\x14\x3E\xFF' .
+    '\x41\xAA\x4A\xB1\x9F\xB2\x6A\xB5\xBD\xB4\x9A\x8A\x5F\xCA\xAF\xBC' .
+    '\x90\x8F\xEA\xFA\xBE\xA0\xB6\xB3\x9D\xDA\x9B\x8B\xB7\xB8\xB9\xAB' .
+    '\x64\x65\x62\x66\x63\x67\x9E\x68\x74\x71\x72\x73\x78\x75\x76\x77' .
+    '\xAC\x69\xED\xEE\xEB\xEF\xEC\xBF\x80\xFD\xFE\xFB\xFC\xAD\xAE\x59' .
+    '\x44\x45\x42\x46\x43\x47\x9C\x48\x54\x51\x52\x53\x58\x55\x56\x57' .
+    '\x8C\x49\xCD\xCE\xCB\xCF\xCC\xE1\x70\xDD\xDE\xDB\xDC\x8D\x8E\xDF';
 
     my $ebcdic_string = $ascii_string;
-    eval '$ebcdic_string =~ tr/' . $cp_037 . '/\000-\377/';
+    eval '$ebcdic_string =~ tr/\000-\377/' . $cp_037 . '/';
 
 To convert from EBCDIC 037 to ASCII just reverse the order of the tr///
 arguments like so:
 
     my $ascii_string = $ebcdic_string;
-    eval '$ascii_string =~ tr/\000-\377/' . $cp_037 . '/';
+    eval '$ascii_string =~ tr/' . $cp_037 . '/\000-\377/';
+
+Similarly one could take the output of the third numbers column from recipe 2
+to obtain a C<$cp_1047> table.  The fourth numbers column of the output from
+recipe 2 could provide a C<$cp_posix_bc> table suitable for transcoding as
+well.
 
-Similarly one could take the output of the third column from recipe 0 to
-obtain a C<$cp_1047> table.  The fourth column of the output from recipe
-0 could provide a C<$cp_posix_bc> table suitable for transcoding as well.
+If you wanted to see the inverse tables, you would first have to sort on the
+desired numbers column as in recipes 4, 5 or 6, then take the output of the
+first numbers column.
 
 =head2 iconv
 
@@ -728,11 +750,11 @@ or the inverse map:
     # OS/390 or z/OS example
     $ebcdic_data = `echo '$ascii_data'| iconv -f ISO8859-1 -t IBM-1047`
 
-For other perl based conversion options see the Convert::* modules on CPAN.
+For other perl-based conversion options see the Convert::* modules on CPAN.
 
 =head2 C RTL
 
-The OS/390 and z/OS C run time libraries provide _atoe() and _etoa() functions.
+The OS/390 and z/OS C run-time libraries provide _atoe() and _etoa() functions.
 
 =head1 OPERATOR DIFFERENCES
 
@@ -756,8 +778,8 @@ an example adapted from the one in L<perlop>:
 
 An interesting property of the 32 C0 control characters
 in the ASCII table is that they can "literally" be constructed
-as control characters in perl, e.g. C<(chr(0) eq C<\c@>)> 
-C<(chr(1) eq C<\cA>)>, and so on.  Perl on EBCDIC platforms has been 
+as control characters in perl, e.g. C<(chr(0)> eq C<\c@>)>
+C<(chr(1)> eq C<\cA>)>, and so on.  Perl on EBCDIC platforms has been
 ported to take C<\c@> to chr(0) and C<\cA> to chr(1), etc. as well, but the
 thirty three characters that result depend on which code page you are
 using.  The table below uses the standard acronyms for the controls.
@@ -771,7 +793,7 @@ or regex, as it will absorb the terminator.   But C<\c\I<X>> is a C<FILE
 SEPARATOR> concatenated with I<X> for all I<X>.
 
  chr   ord   8859-1    0037    1047 && POSIX-BC     
- ------------------------------------------------------------------------
+ -----------------------------------------------------------------------
  \c?   127   <DEL>       "            "    
  \c@     0   <NUL>     <NUL>        <NUL>
  \cA     1   <SOH>     <SOH>        <SOH> 
@@ -851,7 +873,7 @@ recommend something similar to:
 Under the IBM OS/390 USS Web Server or WebSphere on z/OS for example 
 you should instead write that as:
 
-    print "Content-type:\ttext/html\r\n\r\n"; # OK for DGW et alia
+    print "Content-type:\ttext/html\r\n\r\n"; # OK for DGW et al
 
 That is because the translation from EBCDIC to ASCII is done
 by the web server in this case (such code will not be appropriate for
@@ -886,7 +908,7 @@ See the discussion of pack() above.
 
 =head1 REGULAR EXPRESSION DIFFERENCES
 
-As of perl 5.005_03 the letter range regular expression such as 
+As of perl 5.005_03 the letter range regular expressions such as 
 [A-Z] and [a-z] have been especially coded to not pick up gap 
 characters.  For example, characters such as E<ocirc> C<o WITH CIRCUMFLEX> 
 that lie between I and J would not be matched by the 
@@ -1024,21 +1046,21 @@ output.
 
 =head1 SORTING
 
-One big difference between ASCII based character sets and EBCDIC ones
+One big difference between ASCII-based character sets and EBCDIC ones
 are the relative positions of upper and lower case letters and the
-letters compared to the digits.  If sorted on an ASCII based platform the
-two letter abbreviation for a physician comes before the two letter
-for drive, that is:
+letters compared to the digits.  If sorted on an ASCII-based platform the
+two-letter abbreviation for a physician comes before the two letter
+abbreviation for drive; that is:
 
   @sorted = sort(qw(Dr. dr.));  # @sorted holds ('Dr.','dr.') on ASCII,
+ @sorted = sort(qw(Dr. dr.));  # @sorted holds ('Dr.','dr.') on ASCII,
                                   # but ('dr.','Dr.') on EBCDIC
 
-The property of lower case before uppercase letters in EBCDIC is
+The property of lowercase before uppercase letters in EBCDIC is
 even carried to the Latin 1 EBCDIC pages such as 0037 and 1047.
 An example would be that E<Euml> C<E WITH DIAERESIS> (203) comes 
 before E<euml> C<e WITH DIAERESIS> (235) on an ASCII platform, but 
 the latter (83) comes before the former (115) on an EBCDIC platform.  
-(Astute readers will note that the upper case version of E<szlig> 
+(Astute readers will note that the uppercase version of E<szlig> 
 C<SMALL LETTER SHARP S> is simply "SS" and that the upper case version of 
 E<yuml> C<y WITH DIAERESIS> is not in the 0..255 range but it is 
 at U+x0178 in Unicode, or C<"\x{178}"> in a Unicode enabled Perl).
@@ -1054,7 +1076,7 @@ some user education.
 
 =head2 MONO CASE then sort data.
 
-In order to minimize the expense of mono casing mixed test try to
+In order to minimize the expense of mono casing mixed-case text, try to
 C<tr///> towards the character set case most employed within the data.
 If the data are primarily UPPERCASE non Latin 1 then apply tr/[a-z]/[A-Z]/
 then sort().  If the data are primarily lowercase non Latin 1 then
@@ -1069,7 +1091,7 @@ then sort().  Do note however that such Latin-1 manipulation does not
 address the E<yuml> C<y WITH DIAERESIS> character that will remain at 
 code point 255 on ASCII platforms, but 223 on most EBCDIC platforms 
 where it will sort to a place less than the EBCDIC numerals.  With a 
-Unicode enabled Perl you might try:
+Unicode-enabled Perl you might try:
 
     tr/^?/\x{178}/;
 
@@ -1212,7 +1234,7 @@ that the @e2a array is filled in appropriately:
 
 =head2 Quoted-Printable encoding and decoding
 
-On ASCII encoded platforms it is possible to strip characters outside of
+On ASCII-encoded platforms it is possible to strip characters outside of
 the printable set using:
 
     # This QP encoder works on ASCII only
@@ -1250,14 +1272,14 @@ omitted for brevity):
     $string =~ s/=([0-9A-Fa-f][0-9A-Fa-f])/chr $a2e[hex $1]/ge;
     $string =~ s/=[\n\r]+$//;
 
-=head2 Caesarian ciphers
+=head2 Caesarean ciphers
 
 The practice of shifting an alphabet one or more characters for encipherment
 dates back thousands of years and was explicitly detailed by Gaius Julius
 Caesar in his B<Gallic Wars> text.  A single alphabet shift is sometimes 
 referred to as a rotation and the shift amount is given as a number $n after
 the string 'rot' or "rot$n".  Rot0 and rot26 would designate identity maps 
-on the 26 letter English version of the Latin alphabet.  Rot13 has the 
+on the 26-letter English version of the Latin alphabet.  Rot13 has the 
 interesting property that alternate subsequent invocations are identity maps 
 (thus rot13 is its own non-trivial inverse in the group of 26 alphabet 
 rotations).  Hence the following is a rot13 encoder and decoder that will 
@@ -1279,16 +1301,16 @@ In one-liner form:
 
 To the extent that it is possible to write code that depends on 
 hashing order there may be differences between hashes as stored
-on an ASCII based platform and hashes stored on an EBCDIC based platform.
+on an ASCII-based platform and hashes stored on an EBCDIC-based platform.
 XXX
 
 =head1 I18N AND L10N
 
-Internationalization(I18N) and localization(L10N) are supported at least 
-in principle even on EBCDIC platforms.  The details are system dependent 
+Internationalization (I18N) and localization (L10N) are supported at least 
+in principle even on EBCDIC platforms.  The details are system-dependent 
 and discussed under the L<perlebcdic/OS ISSUES> section below.
 
-=head1 MULTI OCTET CHARACTER SETS
+=head1 MULTI-OCTET CHARACTER SETS
 
 Perl may work with an internal UTF-EBCDIC encoding form for wide characters 
 on EBCDIC platforms in a manner analogous to the way that it works with 
@@ -1298,7 +1320,7 @@ Legacy multi byte EBCDIC code pages XXX.
 
 =head1 OS ISSUES
 
-There may be a few system dependent issues 
+There may be a few system-dependent issues 
 of concern to EBCDIC Perl programmers.
 
 =head2 OS/400
@@ -1307,8 +1329,8 @@ of concern to EBCDIC Perl programmers.
 
 =item PASE
 
-The PASE environment is runtime environment for OS/400 that can run
-executables built for PowerPC AIX in OS/400, see L<perlos400>.  PASE
+The PASE environment is runtime environment for OS/400 that can run
+executables built for PowerPC AIX in OS/400; see L<perlos400>.  PASE
 is ASCII-based, not EBCDIC-based as the ILE.
 
 =item IFS access
@@ -1326,7 +1348,7 @@ Perl runs under Unix Systems Services or USS.
 =item chcp
 
 B<chcp> is supported as a shell utility for displaying and changing 
-one's code page.  See also L<chcp>.
+one's code page.  See also L<chcp(1)>.
 
 =item dataset access