Locale:...:IBM423(3)
π Locale::RecodeData::IBM423 β bestie edition π
ok so real talk, you're looking at the Perl manual page for Locale::RecodeData::IBM423(3), filed under "User Contributed Perl Documentation". Yes the header really does say Locale:...:IBM423(3) twice because it's extra like that. Let's get into it β¨
πΈ NAME πΈ
Locale::RecodeData::IBM423 β literally just conversion routines for IBM423. That's the whole vibe. No cap. π
π¦ SYNOPSIS π¦
This module is internal to libintl. Do not use directly!
ok so this is the important part, bestie: do not use it directly. It's an internal module for libintl, it's not for you, it's not for me, it's for libintl and libintl only. Hands off π iykyk.
π DESCRIPTION π
So this module? It's generated. Like, nobody hand-wrote this bad boy β it gets built automatically, and what it contains is the conversion tables and the routines for IBM423. That's it, that's the whole job. She's a workhorse, not a main character π
π COMMENTS π
okok so these are the comments that got extracted from the original charmap, and honestly they're giving archival treasure π here they are, exactly as they came out:
version: 1.0
source: IBM NLS RM Vol2 SE09-8002-01, March 1990
alias CP423
alias EBCDIC-CP-GR
so we've got version: 1.0, source is IBM NLS RM Vol2 SE09-8002-01, March 1990 (yes that's a real citation, she's cited π
), and the aliases are CP423 and EBCDIC-CP-GR.
β οΈ but bestie, listen β please note that aliases listed above are not necessarily valid! Like, they're listed! That does not mean they work! Do not come for me if they don't! π This is a genuine warning from the page itself, fr fr.
β CHARACTER TABLE β
This is where it gets good. The following table is sorted in the same order as the original charmap β so the ordering is not a choice, it's inherited, it's ancestral, it's the order we were given π«Ά
And every single character code in there? hexadecimal. All of them. Every last one. π₯
Also a reading-comprehension moment, bestie, so pay attention: whenever you see 'ISO-10646' in this table, you should read it as 'ISO-10646-UCS4'. Same thing, different outfit. That's the whole note β¨
(more incoming β this was part 1 of 3, don't go anywhere πΈ)
okay so quick refresher on what you're looking at, because the columns go hard: the left column is the local byte in hex, the middle is the ISO-10646 code point, and the right is the character's government name. and bestie, the vibes in the first block are chaotic β like, the bytes are in order but the code points are absolutely not. 04 is 0000009C, 05 is 00000009, 07 is 0000007F. it's giving β¨shuffled playlistβ¨. do not question it, just read it. π
Local | ISO-10646 | Description
-------+-----------+-------------------------------------------------
00 | 00000000 | NULL (NUL)
01 | 00000001 | START OF HEADING (SOH)
02 | 00000002 | START OF TEXT (STX)
03 | 00000003 | END OF TEXT (ETX)
04 | 0000009C | STRING TERMINATOR (ST)
05 | 00000009 | CHARACTER TABULATION (HT)
06 | 00000086 | START OF SELECTED AREA (SSA)
07 | 0000007F | DELETE (DEL)
08 | 00000097 | END OF GUARDED AREA (EPA)
09 | 0000008D | REVERSE LINE FEED (RI)
0A | 0000008E | SINGLE-SHIFT TWO (SS2)
0B | 0000000B | LINE TABULATION (VT)
0C | 0000000C | FORM FEED (FF)
0D | 0000000D | CARRIAGE RETURN (CR)
0E | 0000000E | SHIFT OUT (SO)
0F | 0000000F | SHIFT IN (SI)
10 | 00000010 | DATALINK ESCAPE (DLE)
11 | 00000011 | DEVICE CONTROL ONE (DC1)
12 | 00000012 | DEVICE CONTROL TWO (DC2)
13 | 00000013 | DEVICE CONTROL THREE (DC3)
14 | 0000009D | OPERATING SYSTEM COMMAND (OSC)
15 | 00000085 | NEXT LINE (NEL)
16 | 00000008 | BACKSPACE (BS)
17 | 00000087 | END OF SELECTED AREA (ESA)
18 | 00000018 | CANCEL (CAN)
19 | 00000019 | END OF MEDIUM (EM)
1A | 00000092 | PRIVATE USE TWO (PU2)
1B | 0000008F | SINGLE-SHIFT THREE (SS3)
1C | 0000001C | FILE SEPARATOR (IS4)
1D | 0000001D | GROUP SEPARATOR (IS3)
1E | 0000001E | RECORD SEPARATOR (IS2)
1F | 0000001F | UNIT SEPARATOR (IS1)
highkey iconic that BACKSPACE lives at byte 16 and DELETE is all the way up at 07 β like ma'am, what are you doing there π but we respect the choices. also LINE FEED isn't at 0A, it's at 25, which is genuinely main character energy. it said "I'll show up where I want." πΈ
next block, 20β3F, where the control codes keep playing musical chairs:
20 | 00000080 | PADDING CHARACTER (PAD)
21 | 00000081 | HIGH OCTET PRESET (HOP)
22 | 00000082 | BREAK PERMITTED HERE (BPH)
23 | 00000083 | NO BREAK HERE (NBH)
24 | 00000084 | INDEX (IND)
25 | 0000000A | LINE FEED (LF)
26 | 00000017 | END OF TRANSMISSION BLOCK (ETB)
27 | 0000001B | ESCAPE (ESC)
28 | 00000088 | CHARACTER TABULATION SET (HTS)
29 | 00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
2A | 0000008A | LINE TABULATION SET (VTS)
2B | 0000008B | PARTIAL LINE FORWARD (PLD)
2C | 0000008C | PARTIAL LINE BACKWARD (PLU)
2D | 00000005 | ENQUIRY (ENQ)
2E | 00000006 | ACKNOWLEDGE (ACK)
2F | 00000007 | BELL (BEL)
30 | 00000090 | DEVICE CONTROL STRING (DCS)
31 | 00000091 | PRIVATE USE ONE (PU1)
32 | 00000016 | SYNCHRONOUS IDLE (SYN)
33 | 00000093 | SET TRANSMIT STATE (STS)
34 | 00000094 | CANCEL CHARACTER (CCH)
35 | 00000095 | MESSAGE WAITING (MW)
36 | 00000096 | START OF GUARDED AREA (SPA)
37 | 00000004 | END OF TRANSMISSION (EOT)
38 | 00000098 | START OF STRING (SOS)
39 | 00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
3A | 0000009A | SINGLE CHARACTER INTRODUCER (SCI)
3B | 0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
3C | 00000014 | DEVICE CONTROL FOUR (DC4)
3D | 00000015 | NEGATIVE ACKNOWLEDGE (NAK)
3E | 0000009E | PRIVACY MESSAGE (PM)
3F | 0000001A | SUBSTITUTE (SUB)
BELL (BEL) at 2F and ESCAPE (ESC) at 27 and END OF TRANSMISSION (EOT) chillin' at 37 β bestie this is a scavenger hunt π«Ά the EOT really said "I'm not done until I say I'm done."
then 40 opens with a whole SPACE and immediately after that it's Greek letters out of NOWHERE. we love a bilingual king π:
40 | 00000020 | SPACE
41 | 00000391 | GREEK CAPITAL LETTER ALPHA
42 | 00000392 | GREEK CAPITAL LETTER BETA
43 | 00000393 | GREEK CAPITAL LETTER GAMMA
44 | 00000394 | GREEK CAPITAL LETTER DELTA
45 | 00000395 | GREEK CAPITAL LETTER EPSILON
46 | 00000396 | GREEK CAPITAL LETTER ZETA
47 | 00000397 | GREEK CAPITAL LETTER ETA
48 | 00000398 | GREEK CAPITAL LETTER THETA
49 | 00000399 | GREEK CAPITAL LETTER IOTA
4A | 0000005B | LEFT SQUARE BRACKET
4B | 0000002E | FULL STOP
4C | 0000003C | LESS-THAN SIGN
4D | 00000028 | LEFT PARENTHESIS
4E | 0000002B | PLUS SIGN
4F | 00000021 | EXCLAMATION MARK
50 | 00000026 | AMPERSAND
51 | 0000039A | GREEK CAPITAL LETTER KAPPA
52 | 0000039B | GREEK CAPITAL LETTER LAMDA
53 | 0000039C | GREEK CAPITAL LETTER MU
54 | 0000039D | GREEK CAPITAL LETTER NU
55 | 0000039E | GREEK CAPITAL LETTER XI
56 | 0000039F | GREEK CAPITAL LETTER OMICRON
57 | 000003A0 | GREEK CAPITAL LETTER PI
58 | 000003A1 | GREEK CAPITAL LETTER RHO
59 | 000003A3 | GREEK CAPITAL LETTER SIGMA
5A | 0000005D | RIGHT SQUARE BRACKET
5B | 00000024 | DOLLAR SIGN
5C | 0000002A | ASTERISK
5D | 00000029 | RIGHT PARENTHESIS
5E | 0000003B | SEMICOLON
5F | 0000005E | CIRCUMFLEX ACCENT
60 | 0000002D | HYPHEN-MINUS
61 | 0000002F | SOLIDUS
62 | 000003A4 | GREEK CAPITAL LETTER TAU
63 | 000003A5 | GREEK CAPITAL LETTER UPSILON
64 | 000003A6 | GREEK CAPITAL LETTER PHI
65 | 000003A7 | GREEK CAPITAL LETTER CHI
66 | 000003A8 | GREEK CAPITAL LETTER PSI
67 | 000003A9 | GREEK CAPITAL LETTER OMEGA
okay so it's Greek capitals, then punctuation, then MORE Greek capitals, then punctuation again. it's giving a mixtape with two genres π and note the gap β 68, 69, 6A are justβ¦ not invited. no GREEK CAPITAL LETTER-with-tonos yet, they show up later. patience, bestie π§
carrying straight on:
6B | 0000002C | COMMA
6C | 00000025 | PERCENT SIGN
6D | 0000005F | LOW LINE
6E | 0000003E | GREATER-THAN SIGN
6F | 0000003F | QUESTION MARK
71 | 00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS
72 | 00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS
73 | 00000389 | GREEK CAPITAL LETTER ETA WITH TONOS
75 | 0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS
76 | 0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS
77 | 0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS
78 | 0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS
79 | 00000060 | GRAVE ACCENT
7A | 0000003A | COLON
7B | 000000A3 | POUND SIGN
7C | 000000A7 | SECTION SIGN
7D | 00000027 | APOSTROPHE
7E | 0000003D | EQUALS SIGN
7F | 00000022 | QUOTATION MARK
see, 70 and 74 ghosted us too π» (very "read at 10:42pm" of them). but we got GREEK CAPITAL LETTER ALPHA WITH TONOS through GREEK CAPITAL LETTER OMEGA WITH TONOS β the tonos girls finally arrived and they ate. β¨
now the top half, starting at 80. LATIN CAPITAL LETTER A WITH DIAERESIS opens the set and then it's lowercase Latin with Greek lowercase woven through, like a friendship bracelet π
80 | 000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
81 | 00000061 | LATIN SMALL LETTER A
82 | 00000062 | LATIN SMALL LETTER B
83 | 00000063 | LATIN SMALL LETTER C
84 | 00000064 | LATIN SMALL LETTER D
85 | 00000065 | LATIN SMALL LETTER E
86 | 00000066 | LATIN SMALL LETTER F
87 | 00000067 | LATIN SMALL LETTER G
88 | 00000068 | LATIN SMALL LETTER H
89 | 00000069 | LATIN SMALL LETTER I
8A | 000003B1 | GREEK SMALL LETTER ALPHA
8B | 000003B2 | GREEK SMALL LETTER BETA
8C | 000003B3 | GREEK SMALL LETTER GAMMA
8D | 000003B4 | GREEK SMALL LETTER DELTA
8E | 000003B5 | GREEK SMALL LETTER EPSILON
8F | 000003B6 | GREEK SMALL LETTER ZETA
90 | 000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
91 | 0000006A | LATIN SMALL LETTER J
92 | 0000006B | LATIN SMALL LETTER K
93 | 0000006C | LATIN SMALL LETTER L
94 | 0000006D | LATIN SMALL LETTER M
95 | 0000006E | LATIN SMALL LETTER N
96 | 0000006F | LATIN SMALL LETTER O
97 | 00000070 | LATIN SMALL LETTER P
98 | 00000071 | LATIN SMALL LETTER Q
99 | 00000072 | LATIN SMALL LETTER R
9A | 000003B7 | GREEK SMALL LETTER ETA
9B | 000003B8 | GREEK SMALL LETTER THETA
9C | 000003B9 | GREEK SMALL LETTER IOTA
9D | 000003BA | GREEK SMALL LETTER KAPPA
9E | 000003BB | GREEK SMALL LETTER LAMDA
9F | 000003BC | GREEK SMALL LETTER MU
A0 | 000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
A1 | 000000A8 | DIAERESIS
A2 | 00000073 | LATIN SMALL LETTER S
A3 | 00000074 | LATIN SMALL LETTER T
A4 | 00000075 | LATIN SMALL LETTER U
A5 | 00000076 | LATIN SMALL LETTER V
A6 | 00000077 | LATIN SMALL LETTER W
A7 | 00000078 | LATIN SMALL LETTER X
A8 | 00000079 | LATIN SMALL LETTER Y
A9 | 0000007A | LATIN SMALL LETTER Z
AA | 000003BD | GREEK SMALL LETTER NU
AB | 000003BE | GREEK SMALL LETTER XI
AC | 000003BF | GREEK SMALL LETTER OMICRON
AD | 000003C0 | GREEK SMALL LETTER PI
AE | 000003C1 | GREEK SMALL LETTER RHO
AF | 000003C2 | GREEK SMALL LETTER FINAL SIGMA
the way that lowercase aβi gets interrupted at 8A by the Greek lowercase squad and then picks back up at 91 with jβ¦ unhinged behaviour, but like, in a cute way π and yes, AF is GREEK SMALL LETTER FINAL SIGMA, the special one, the final girl of the sigma saga π
and B0 is a no-show π so we jump straight to B1. the tonos/dialytika girlies are all here and they are thriving:
B1 | 000003AC | GREEK SMALL LETTER ALPHA WITH TONOS
B2 | 000003AD | GREEK SMALL LETTER EPSILON WITH TONOS
B3 | 000003AE | GREEK SMALL LETTER ETA WITH TONOS
B4 | 000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA
B5 | 000003AF | GREEK SMALL LETTER IOTA WITH TONOS
B6 | 000003CC | GREEK SMALL LETTER OMICRON WITH TONOS
B7 | 000003CD | GREEK SMALL LETTER UPSILON WITH TONOS
B8 | 000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA
B9 | 000003CE | GREEK SMALL LETTER OMEGA WITH TONOS
BA | 000003C3 | GREEK SMALL LETTER SIGMA
BB | 000003C4 | GREEK SMALL LETTER TAU
BC | 000003C5 | GREEK SMALL LETTER UPSILON
BD | 000003C6 | GREEK SMALL LETTER PHI
BE | 000003C7 | GREEK SMALL LETTER CHI
BF | 000003C8 | GREEK SMALL LETTER PSI
then C0 starts with a lone <cyan>CEDILLA</cyan> and swings right back into Latin capitals:
C0 | 000000B8 | CEDILLA
C1 | 00000041 | LATIN CAPITAL LETTER A
C2 | 00000042 | LATIN CAPITAL LETTER B
C3 | 00000043 | LATIN CAPITAL LETTER C
C4 | 00000044 | LATIN CAPITAL LETTER D
C5 | 00000045 | LATIN CAPITAL LETTER E
C6 | 00000046 | LATIN CAPITAL LETTER F
C7 | 00000047 | LATIN CAPITAL LETTER G
C8 | 00000048 | LATIN CAPITAL LETTER H
C9 | 00000049 | LATIN CAPITAL LETTER I
CB | 000003C9 | GREEK SMALL LETTER OMEGA
CC | 000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
CD | 000000E0 | LATIN SMALL LETTER A WITH GRAVE
CE | 000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
CF | 000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
D0 | 000000B4 | ACUTE ACCENT
D1 | 0000004A | LATIN CAPITAL LETTER J
D2 | 0000004B | LATIN CAPITAL LETTER K
D3 | 0000004C | LATIN CAPITAL LETTER L
D4 | 0000004D | LATIN CAPITAL LETTER M
D5 | 0000004E | LATIN CAPITAL LETTER N
D6 | 0000004F | LATIN CAPITAL LETTER O
D7 | 00000050 | LATIN CAPITAL LETTER P
D8 | 00000051 | LATIN CAPITAL LETTER Q
D9 | 00000052 | LATIN CAPITAL LETTER R
DA | 000000B1 | PLUS-MINUS SIGN
DB | 000000E9 | LATIN SMALL LETTER E WITH ACUTE
DC | 000000E8 | LATIN SMALL LETTER E WITH GRAVE
DD | 000000EB | LATIN SMALL LETTER E WITH DIAERESIS
DE | 000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
DF | 000000EF | LATIN SMALL LETTER I WITH DIAERESIS
E0 | 000000B0 | DEGREE SIGN
CA is missing, so GREEK SMALL LETTER OMEGA at CB just floats there between I and A WITH CIRCUMFLEX like the main character she is π
also ACUTE ACCENT at D0 and DEGREE SIGN at E0 β accents and math signs really said "we belong with the letters now." no notes.
last stretch of this part, E2 onward β E1 did not make the cut π:
E2 | 00000053 | LATIN CAPITAL LETTER S
E3 | 00000054 | LATIN CAPITAL LETTER T
E4 | 00000055 | LATIN CAPITAL LETTER U
E5 | 00000056 | LATIN CAPITAL LETTER V
E6 | 00000057 | LATIN CAPITAL LETTER W
E7 | 00000058 | LATIN CAPITAL LETTER X
E8 | 00000059 | LATIN CAPITAL LETTER Y
E9 | 0000005A | LATIN CAPITAL LETTER Z
EA | 000000BD | VULGAR FRACTION ONE HALF
EB | 000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
EC | 000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
ED | 000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
VULGAR FRACTION ONE HALF at EA right after Z is so random and I'm obsessed with it β the alphabet said "and for my final trick, a fraction." π and the last three rows are the o-umlaut, o-circumflex, u-circumflex trio, just vibing at the bottom of the page. slay π
that's where this part ends, bestie β more table coming at you in the next part, so hydrate and stay seated β¨π¦
okay bestie, final stretch of the table and I did not drop a single row π every byte, codepoint, and character name is staying exactly where it belongs:
EE | 000000F9 | LATIN SMALL LETTER U WITH GRAVE
EF | 000000FC | LATIN SMALL LETTER U WITH DIAERESIS
F0 | 00000030 | DIGIT ZERO
F1 | 00000031 | DIGIT ONE
F2 | 00000032 | DIGIT TWO
F3 | 00000033 | DIGIT THREE
F4 | 00000034 | DIGIT FOUR
F5 | 00000035 | DIGIT FIVE
F6 | 00000036 | DIGIT SIX
F7 | 00000037 | DIGIT SEVEN
F8 | 00000038 | DIGIT EIGHT
F9 | 00000039 | DIGIT NINE
FA | 000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
FB | 000000E7 | LATIN SMALL LETTER C WITH CEDILLA
FC | 000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
FF | 0000009F | APPLICATION PROGRAM COMMAND (APC)
like, thatβs the whole vibe: clean rows, no mystery gaps, no βoops I skipped oneβ energy β¨
π AUTHOR π
this iconic little data module was brought to you by:
Copyright (C) 2002-2017 Guido Flohr <http://www.guido-flohr.net/>
(<mailto:guido.flohr@cantanea.com>), all rights reserved. See the
source code for details!code for details!
yes bestie, that duplicated details!code for details! is literally in the source text and I am not editing it β we keep the facts exactly as they are, always π«Ά
all rights reserved, periodt. π
π SEE ALSO π
go peek at these next, theyβre giving related-manpage main character energy:
and thatβs the whole page, bestie π this one came from perl v5.42.0, dated 2025-01-22 β iconic version, iconic date, no cap π«
π¦ where this page comes from
- opensuse-leap 16.0: perl-libintl-perl 1.350.0-160000.2.2 Β· GPL-3.0-or-later
- opensuse-leap 16.0: perl-libintl-perl 1.350.0-160000.2.2 Β· GPL-3.0-or-later
- opensuse-leap 16.0: perl-libintl-perl 1.350.0-160000.2.2 Β· GPL-3.0-or-later
- opensuse-leap 16.0: perl-libintl-perl 1.350.0-160000.2.2 Β· GPL-3.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms