GoGPT Best VPN GoSearch

OnWorksファビコン

perlebcdic-クラウドでのオンライン

Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、またはMACOSオンラインエミュレーターを介してOnWorks無料ホスティングプロバイダーでperlebcdicを実行します

これは、Ubuntu Online、Fedora Online、Windowsオンラインエミュレーター、MACOSオンラインエミュレーターなどの複数の無料オンラインワークステーションのXNUMXつを使用してOnWorks無料ホスティングプロバイダーで実行できるコマンドperlebcdicです。

プログラム:

NAME


perlebcdic-EBCDICプラットフォームでPerlを実行する際の考慮事項

DESCRIPTION


EBCDICベースのコンピューターでPerlプログラマーが直面している問題のいくつかの調査。

まだ不完全なこのドキュメントの部分は、XXXでマークされています。

初期のPerlバージョンは一部のEBCDICマシンで動作しましたが、実行された最後の既知のバージョン
EBCDICはv5.8.7でしたが、v5.22までは、Perlコアが再びz/OSで動作していました。 理論的には、
OS / 400またはSiemensのBS2000(またはそれらの後継)で動作する可能性がありますが、これはテストされていません。 の
v5.22、CPANにあるすべてのモジュールではありませんが、コアPerlに同梱されているモジュールはz/OSで動作します。

z / OS以外のEBCDICマシンでPerlを使用する場合は、メールでお知らせください。
〜へ [メール保護]

EBCDICプラットフォームでPerlを作成することは、「ASCII」プラットフォームで作成することとまったく同じです。
ただし、後で説明するように、基になる数値は異なります。 あなたは知る必要があります
ドキュメントに偏りがあり、
EBCDICに適用されない例番号を頻繁に使用します。 CPANも非常に少ないです
EBCDIC用に作成され、ASCIIでは機能しないモジュール。 代わりに広大な
CPANモジュールの大部分はASCII用に記述されており、一部はEBCDICで動作する可能性があります。
いくつかは、両方で移植可能に動作するように設計されています。

コードでAZとazの52文字に加えて、スペース、0〜9の数字、および
Perlが使用する句読文字と、エスケープで示されるいくつかのコントロール
「\n」や「\t」のようなシーケンスの場合、Perlとコードの使用について特別なことは何もありません。
変更なしでASCIIマシンで非常にうまく機能する可能性があります。

ただし、「\ 005」を使用してTABを意味するコード、または「\xC1」を使用して「A」または「\xDF」を意味するコードを記述した場合
「ye」(分音記号付きの小さな「y」)を意味する場合、コードはEBCDICでうまく機能する可能性があります
プラットフォームですが、ASCIIプラットフォームではありません。 誰もあなたを実行したくない場合は、それで問題ありません
ASCIIプラットフォーム上のコード。 しかし、このドキュメントのバイアスは、移植可能なコードを書くことにあります
EBCDICシステムとASCIIシステムの間。 繰り返しますが、気になるすべてのキャラクターが簡単に
キーボードから入力可能で、ASCIIについて何も知る必要はありませんが、多くの
キーボードでは、たとえば「\ xDF」という文字を直接入力するのは簡単ではないため、次のようになります。
「\xDF」エスケープシーケンスを使用するなど、間接的に指定します。 そのような場合
ASCII/Unicode文字セットについて何かを知るのが最も簡単です。 あなたがそれを知っているなら
小さい「ye」は「U+00FF」です。代わりに、「\ N {U + FF}」として指定して、
コンピューターは自動的にプラットフォーム上で「\xDF」に変換し、「\xFF」のままにします
ASCIIのもの。 または、「\ N {LATIN SMALL LETTERYWITHDIAERESIS」という名前で指定することもできます。
数字を知る必要はありません。 どちらの方法でも機能しますが、Unicodeに精通している必要があります。

COMMON キャラクター CODE セット


ASCII
情報交換のためのアメリカ標準コード(ASCIIまたはUS-ASCII)は、
0から127(XNUMX進数)までの整数で、
ASCIIを使用するコンピューター。 たとえば、65は文字「A」を意味します。 範囲0..127は次のようになります
7ビットのXNUMX進数でビットを設定することでカバーされるため、セットが参照されることがあります
「7ビットASCII」として。 ASCIIは、米国規格協会によって記述されました
文書ANSIX3.4-1986。 また、ISO 646:1991によって記述されています(
通貨記号)。 完全なASCIIセットは、最初の128として以下の表に示されています。
要素。 ASCIIの文字で適切に書くことができる言語は次のとおりです。
英語、ハワイ語、インドネシア語、スワヒリ語、およびいくつかのネイティブアメリカンの言語。

ほとんどの非EBCDIC文字セットは、ASCIIのスーパーセットです。 つまり、0〜127の整数は意味します
ASCIIが意味すること。 ただし、128以上の整数は文字セットに固有です。

これらの多くは、ASCIIを8-0として使用し、何を指定するかを指定しながら、完全に127ビットに収まります。
128-255は、255を超えるものを使用しないことを意味します。したがって、これらはシングルバイト(またはオクテットの場合)です。
あなたが好む)文字セット。 重要なもののXNUMXつ(Unicodeはそのスーパーセットであるため)は、
ISO8859-1文字セット。

ISO 8859
ISO 8859-$n インターナショナルからの文字コードセットのコレクションです
それぞれがASCIIセットに文字を追加する国際標準化機構(ISO)
これらは通常、さまざまな言語で見られ、その多くはローマ語に基づいています。
ラテン、アルファベット。 ほとんどがヨーロッパ言語用ですが、アラビア語用のものもあります。
ギリシャ語、ヘブライ語、タイ語。 これらすべてについて、Web上に優れたリファレンスがあります。

ローマ字 1 (ISO 8859-1)
重くて鋭いアクセントのラテン語を含むASCIIへの特定の8ビット拡張
文字。 ISO 8859-1を使用できる言語には、対象となるすべての言語が含まれます
ASCII、アフリカーンス語、アルバニア語、バスク語、カタロニア語、デンマーク語、フェロー語、フィンランド語、
ノルウェー語、ポルトガル語、スペイン語、スウェーデン語。 ijがなくてもオランダ語はカバーされています
結紮。 フランス語もカバーされていますが、oeの合字はありません。 ドイツ語はISO8859-1を使用できます
ただし、ドイツ語スタイルの引用符は使用しないでください。 このセットは西洋に基づいています
ASCIIのヨーロッパの拡張機能であり、ワールドワイドウェブの作業でよく見られます。 IBMでは
文字コードセット識別用語、ISO 8859-1は、CCSID 819(または
時々0819または00819)。

EBCDIC
拡張バイナリコード化XNUMX進交換コードは、単一の
ASCIIおよびISO8859-1とはまったく異なるマルチバイトコード化文字セット、
そして、すべて互いにわずかに異なります。 これらは通常、ホストコンピューターで実行されます。 The
EBCDICエンコーディングは、ホレリスパンチカードエンコーディングの8ビットバイト拡張から派生しています。
これはASCIIよりもずっと前からあります。 カードのレイアウトは、上位ビットが設定されるようなものでした
大文字と小文字の英字「[az]」と「[AZ]」ですが、ギャップがありました
下の表に表示されている、各ラテンアルファベットの範囲内。 これらのギャップは原因となる可能性があります
合併症。

一部のIBMEBCDIC文字セットは、文字コード・セット識別番号で認識される場合があります。
(CCSID番号)またはコードページ番号。

Perlは、一般的に使用されるXNUMXつのEBCDIC文字のいずれかを実行するプラットフォームでコンパイルできます。
以下にリストされているセット。

当学校区の 13 異形 文字

IBM EBCDIC文字コード・セットの中には、多くの場合にマップされる13文字があります。
異なる整数値。 これらの文字は、13の「バリアント」文字として知られています。
には次の値があります:

\ [] {} ^〜! #| $ @ `

Perlがプラットフォーム用にコンパイルされると、これらすべての文字を調べて、どれを推測しますか
プラットフォームが使用するEBCDIC文字セットは、そのプラットフォームに応じて適応します。
プラットフォームが、Perlが認識しているXNUMXつの文字セットのXNUMXつではない文字セットを使用している場合、Perl
コンパイルに失敗するか、誤ってサイレントにXNUMXつのうちのXNUMXつを選択します。

EBCDIC コード セット 認識 by パール

0037
文字コードセットID0037は、ASCIIとLatin-1文字(つまりISO)のマッピングです。
8859-1)EBCDICセットに。 0037は、北米英語のロケールで使用されます。
AS/400コンピューターで実行されるOS/400オペレーティングシステム。 CCSID0037はISOとは異なります
8859か所で1-236。 言い換えれば、彼らは20のコードポイント値のみに同意します。

1047
文字コードセットID1047は、ASCIIとLatin-1文字のマッピングでもあります。
(つまり、ISO 8859-1)をEBCDICセットに変換します。 1047は、Unixシステムサービスで使用されます。
OS/390またはz/OS、およびOpenEdition for VM/ESA。 CCSID 1047は、CCSID0037とは次の点で異なります。
8859つの場所、および1のISO236-XNUMXから。

POSIXBC
シーメンスのBS2000システムで使用されているEBCDICコードページは、1047および0037とは異なります。
以下では、POSIX-BCセットとして識別されます。 0037や1047と同様に、ISOと同じです
8859コードポイント値の1-20。

Unicode コード ポイント EBCDIC コード ポイント
Unicodeの用語では コード ポイント は文字に割り当てられた番号です:たとえば、
EBCDIC文字「A」には通常193という番号が割り当てられます。Unicodeでは、文字
「A」には番号65が割り当てられています。ASCIIおよびLatin-1(ISO 8859-1)のすべてのコードポイントには
Unicodeでも同じ意味です。 認識された256つのEBCDICコードセットすべてにXNUMX個のコードがあります
ポイント、および各コードセットで、256個のコードポイントすべてが同等のLatin1コードにマップされます
ポイント。 明らかに、「A」はすべての印刷可能なものについて、「A」、「B」=>「B」、「%」=>「%」などにマップされます。
Latin1およびこれらのコードページの文字。

また、EBCDICにはASCII /Latin1C0とほぼ正確に同等のものがあることがわかります。
コントロールとDELETEコントロール。 (C0コントロールは、ASCIIコードポイントが
0..0x1F; TAB、ACK、BELなど)これらのASCII/EBCDIC間にマッピングが設定されます
コントロール。 ASCIIプラットフォームのC1コントロール間にはそのような正確なマッピングはありません
残りのEBCDICコントロール。 行われたことは、主にこれらのコントロールをマップすることです
任意に、他の文字セット内の一致しない文字に。 たいていの
これらは、とにかくEBCDICで最近使用されることは非常にまれであり、それらの名前は
多くの苦情なしで、ドロップしました。 たとえば、EO(Eight Ones)EBCDICコントロール
(0つの1ビットで構成される= 0xFF)はC9 APCコントロール(XNUMXxXNUMXF)にマップされ、
「EO」という名前は使用できません。

EBCDICコントロールは、0つの可能なラインターミネータ文字、CR(0xXNUMXD)、LFを提供します。
(0x25)、およびNL(0x15)。 ASCIIプラットフォームでは、記号「NL」と「LF」は同じものを指します
文字ですが、厳密なEBCDIC用語では、それらは異なるものです。 EBCDICNLは
「NEL」(「次の行」)と呼ばれるC1コントロールにマップされます。これは、マッピングによって作成されるケースです。
かなりの意味があるので、恣意的ではありません)。 一部のEBCDICプラットフォームでは、このNL
またはNELは典型的なラインターミネータです。 これは、z/OSおよびBS2000にも当てはまります。 これらの中で
プラットフォームでは、CコンパイラはLFコードポイントとNELコードポイントを交換するため、「\ n」は0x15であり、
NLを指します。 Perlもそれを行います。 以下のコードチャートで確認できます。 これにより
物事は一般的に、スワップがあることを意識する必要さえなくても「うまくいく」。

Unicode   UTF
UTFは「UnicodeTransformationFormat」の略です。 UTF-8は、Unicodeをエンコードして
ASCIIおよびLatin-8に基づく1ビットバイトチャンクのシーケンス。 シーケンスの長さ
Unicodeコードポイントを表すために必要なのは、そのコードの序数によって異なります
ポイント。数値が大きいほど、より多くのバイトが必要になります。 UTF-EBCDICはUTF-8に似ていますが、
EBCDIC。 それらは十分に似ているので、多くの場合、カジュアルな使用法はXNUMXつの用語を混同し、
「UTF-8」を使用して、ASCIIプラットフォームで検出されたUTF-8とで検出されたUTF-EBCDICの両方を意味します
EBCDICのもの。

「不変」の文字またはコードポイントという用語が表示される場合があります。 これは単に、
UTF-8(またはUTF-)でエンコードされた場合、文字の数値と表現は同じです。
EBCDIC)そうでない場合と同様。 (これは「13のバリアント」とは非常に異なる概念であることに注意してください
上記の文字」。注意深い散文では、代わりに「UTF-8不変」という用語を使用します。
単に「不変」ですが、ほとんどの場合、「不変」だけが表示されます。)たとえば、序数
「A」の値は、ほとんどのEBCDICコードページで193であり、UTF-EBCDICでエンコードされている場合も193です。
すべてのUTF-8(またはUTF-EBCDIC)バリアントコードポイントは、エンコードされたときに少なくともXNUMXバイトを占有します
UTF-8(またはUTF-EBCDIC); 定義上、UTF-8(またはUTF-EBCDIC)不変コードポイントは次のとおりです。
UTF-8(またはUTF-EBCDIC)でエンコードされているかどうかに関係なく、正確にXNUMXバイト。 (今では理由がわかります
人々は通常、「UTF-EBCDIC」を意味するときに「UTF-8」とだけ言います。 これの残りのために
ドキュメント、私たちはそれについてもほとんどカジュアルになります。)ASCII UTF-8では、コードポイント
最下位の128の序数(0〜127:ASCII文字)に対応します
不変。 UTF-EBCDICには、160の不変文字があります。 (気になる場合は、EBCDIC
不変条件は、ASCIIに相当する文字に加えて、対応する文字です。
C1コントロール(ASCIIプラットフォームでは128〜159)。

UTF-EBCDICでエンコードされた文字列は、でエンコードされた文字列よりも長くなる場合があります(ただし、短くなることはありません)。
UTF-8。 PerlはUTF-8を拡張して、Unicodeの最大値を超えるコードポイントをエンコードできるようにします。
U+10FFFF。 UTF-EBCDICも拡張しますが、UTF-に固有の制限があるためです。
EBCDIC、表現可能な最大コードポイントは、ワードサイズが大きい場合でもU+7FFF_FFFFです。
32ビットより。

UTF-EBCDICは、Unicodeテクニカルレポート#16で定義されています。
<http://www.unicode.org/reports/tr16>。 CCSID 1047に基づいて定義されており、許可されていません。
他のコードページの違いについて。 これにより、テキストを簡単に交換できます
異なるコードページを実行しているコンピュータ間では、適応せずに使用できなくなります。
それらの他のコードページのPerlの場合。

この使用不能の理由は、Perlの基本的な仮定は
構文解析と字句解析で気になる文字は、
テキストはUTF-8です。 たとえば、Perlは文字「[」が同じであると想定しています
表現、それを含む文字列(またはプログラムテキスト)がUTF-8でエンコードされているかどうかに関係なく
か否か。 これを確実にするために、PerlはUTF-EBCDICを特定のコードページに適合させ、
UTF-8不変であると予想される文字は、実際にはUTF-8不変です。 この意味は
PerlのUTF-EBCDICのXNUMXつのバージョンを実行しているコンピューターで生成されたテキストを翻訳する必要があります
別のコンピュータを実行しているコンピュータに理解できるようにする。

使い方 エンコード
Perl 5.8以降では、標準モジュールEncodeを使用してEBCDICから次のように変換できます。
ラテン語-1コードポイント。 Encodeは、Perlよりも多くのEBCDIC文字セットを認識しています。
現在、実行するためにコンパイルされています。

Encode'from_to'を使用します;

私の%ebcdic =(176 =>'cp37'、95 =>'cp1047'、106 =>'posix-bc');

#$aはEBCDICコードポイントにあります
from_to($ a、$ ebcdic {ord'^'}、'latin1');
#$aはISO8859-1コードポイントです

ラテン語-1コードポイントからEBCDICコードポイントへ

Encode'from_to'を使用します;

私の%ebcdic =(176 =>'cp37'、95 =>'cp1047'、106 =>'posix-bc');

#$aはISO8859-1コードポイントです
from_to($ a、'latin1'、$ ebcdic {ord'^'});
#$aはEBCDICコードポイントにあります

I / Oを実行するには、PerlIOの自動翻訳機能を使用することをお勧めします。を参照してください。
perluniintro。

バージョン5.8以降、PerlはPerlIO I/Oライブラリを使用します。 これにより、異なるものを使用できます
IOチャネルごとのエンコーディング。 たとえば、

Encodeを使用します。
open($ f、 ">:encoding(ascii)"、 "test.ascii");
print $ f "Hello World!\ n";
open($ f、 ">:encoding(cp37)"、 "test.ebcdic");
print $ f "Hello World!\ n";
open($ f、 ">:encoding(latin1)"、 "test.latin1");
print $ f "Hello World!\ n";
open($ f、 ">:encoding(utf8)"、 "test.utf8");
print $ f "Hello World!\ n";

ASCII、CP 0037 EBCDIC、ISO8859-1で「HelloWorld!\n」を含むXNUMXつのファイルを取得するには
(Latin-1)(この例では、ASCII文字のみが印刷されているため、ASCIIと同じです)、
およびUTF-EBCDIC(この例では、通常のEBCDICと同じです。
EBCDICとUTFの違いはありません-EBCDICが印刷されました)。 のドキュメントを参照してください
詳細については、Encode::PerlIOを参照してください。

PerlIOレイヤーは内部でrawIO(バイト)を使用するため、これはすべて次のようなものを完全に無視します。
ファイルシステムのタイプ(ASCIIまたはEBCDIC)。

SINGLE オクテット TABLES


次の表に、サブセットを含むASCIIおよびLatin1の順序集合を示します。C0
コントロール(0..31)、ASCIIグラフィック(32..7e)、削除(7f)、C1コントロール(80..9f)、およびLatin-1
(別名ISO 8859-1)(a0..ff)。 ASCIIへのラテン語1拡張のテーブル名には
ほぼ対応する文字名でラベル付けされています 当学校区の Unicode 標準、
6.1 すべての場合に「s/LATIN//」や「s/VULGAR//」などの置換がありますが、
"s / CAPITALLETTER//"場合によっては; および「s/SMALLLETTER([AZ])/ \ l $1/」
ケース。 コントロールは、Unicode6.2の略語を使用してリストされています。 違い
0037セットと1047セットの間には、「**」のフラグが付けられます。 1047の違い
およびPOSIX-BCセットには「##」のフラグが付けられます。 リストされているすべての「ord()」番号はXNUMX進数です。 もし、あんたが
むしろ、このテーブルにXNUMX進数の値がリストされていることを確認してから、テーブル(つまり、ポッド)を実行します。
このレシピはpod2_other_formatで機能しない可能性があるため、このドキュメントのソーステキスト
翻訳)から:

レシピ0

perl -ne'if(/(。{29})(\ d +)\ s +(\ d +)\ s +(\ d +)\ s +(\ d +)/)' \
-e '{printf("%s%-5.03o%-5.03o%-5.03o%.03o\n",$1,$2,$3,$4,$5)}' \
perlebcdic.pod

UTF-xコードポイントを保持したい場合は、スクリプト形式で次のように記述します。

レシピ1

open(FH、 "
その間 ( ){
if(/(.{29})(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\.?(\d*)
\ s +(\ d +)\。?(\ d *)/ x)
{
if($ 7 ne'' && $ 9 ne''){
printf(
"%s%-5.03o%-5.03o%-5.03o%-5.03o%-3o.%-5o%-3o.%.03o\n",
$1,$2,$3,$4,$5,$6,$7,$8,$9);
}
elsif($ 7 ne''){
printf("%s%-5.03o%-5.03o%-5.03o%-5.03o%-3o.%-5o%.03o\n",
$1,$2,$3,$4,$5,$6,$7,$8);
}
他{
printf("%s%-5.03o%-5.03o%-5.03o%-5.03o%-5.03o%.03o\n",
$1,$2,$3,$4,$5,$6,$8);
}
}
}

このテーブルにXNUMX進値がリストされていることを確認したい場合は、次のテーブルを実行してください。

レシピ2

perl -ne'if(/(。{29})(\ d +)\ s +(\ d +)\ s +(\ d +)\ s +(\ d +)/)' \
-e '{printf("%s%-5.02X%-5.02X%-5.02X%.02X\n",$1,$2,$3,$4,$5)}' \
perlebcdic.pod

または、UTF-xコードポイントをXNUMX進数で保持するには、次のようにします。

レシピ3

open(FH、 "
その間 ( ){
if(/(.{29})(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\.?(\d*)
\ s +(\ d +)\。?(\ d *)/ x)
{
if($ 7 ne'' && $ 9 ne''){
printf(
"%s%-5.02X%-5.02X%-5.02X%-5.02X%-2X.%-6.02X%02X.%02X\n",
$1,$2,$3,$4,$5,$6,$7,$8,$9);
}
elsif($ 7 ne''){
printf("%s%-5.02X%-5.02X%-5.02X%-5.02X%-2X.%-6.02X%02X\n",
$1,$2,$3,$4,$5,$6,$7,$8);
}
他{
printf("%s%-5.02X%-5.02X%-5.02X%-5.02X%-5.02X%02X\n",
$1,$2,$3,$4,$5,$6,$8);
}
}
}

ISO
8859-1 POS-CCSID
CCSID CCSID CCSIDIX-1047
chr 0819 0037 1047 BC UTF-8 UTF-EBCDIC
-------------------------------------------------- -------------------
0 0 0 0 0 0
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 55 55 55 4 55
5 45 45 45 5 45
6 46 46 46 6 46
7 47 47 47 7 47
8 22 22 22 8 22
9 5 5 5 9 5
10 37 21 21 10 21 **
11 11 11 11 11 11
12 12 12 12 12 12
13 13 13 13 13 13
14 14 14 14 14 14
15 15 15 15 15 15
16 16 16 16 16 16
1 17 17 17 17 17
2 18 18 18 18 18
3 19 19 19 19 19
4 20 60 60 60 20
21 61 61 61 21 61
22 50 50 50 22 50
23 38 38 38 23 38
24 24 24 24 24 24
25 25 25 25 25 25
26 63 63 63 26 63
27 39 39 39 27 39
28 28 28 28 28 28
29 29 29 29 29 29
30 30 30 30 30 30
31 31 31 31 31 31
32 64 64 64 32 64
! 33 90 90 90 33 90
"34 127
#35 123 123 123 35 123
$ 36 91 91 91 36 91
%37 108
&38 80 80 80 38 80
'39 125
(40 77 77 77 40 77
)41 93 93 93 41 93
※ 42 92 92 92 42 92
+ 43 78 78 78 43 78
、44 107 107 107 44 107
-45 96 96 96 45 96
。 46 75 75 75 46 75
/ 47 97 97 97 47 97
0 48 240 240 240 48 240
1 49 241 241 241 49 241
2 50 242 242 242 50 242
3 51 243 243 243 51 243
4 52 244 244 244 52 244
5 53 245 245 245 53 245
6 54 246 246 246 54 246
7 55 247 247 247 55 247
8 56 248 248 248 56 248
9 57 249 249 249 57 249
:58 122 122 122 58 122
; 59 94 94 94 59 94
<60 76 76 76 60 76
= 61 126
> 62 110
? 63 111
@ 64 124
A 65 193
B 66 194
C 67 195
D 68 196
E 69 197
F 70 198
ガ 71 199 199 199 71 199
H 72 200
I 73 201
J 74 209
K 75 210
中 76 211 211 211 76 211
M 77
N 78 213 213 213 78 213
O 79 214
P 80 215
問 81 216 216 216 81 216
R 82 217
S 83 226
T 84 227
U 85 228
V 86 229 229 229
W 87 230
X 88 231
有 89 232 232 232 89 232
Z 90 233
[91 186 ** ##
\ 92 224 ##
] 93 187 189 189 93 189 **
^ 94 176 95 106 ** ##
_ 95 109
`96 121 121 ##
97 129 129 129 97 129
b 98 130
c 99 131
d 100
e 101
f 102
g 103
時 104 136 136 136 104 136
i 105
j 106
k 107
l 108
m 109
n 110
o 111
p 112
q 113
r 114
s 115
t 116
u 117
v 118
w 119
x 120 167 167
y 121
z 122
{123 192 192 251 123 192 ##
| | 124 79 79 79 124 79
} 125 ##
〜126 161 161 255 126 161 ##
127 7 7 7 127 7
128 32 32 32 194.128 32
129 33 33 33 194.129 33
130 34 34 34 194.130 34
131 35 35 35 194.131 35
132 36 36 36 194.132 36
133 21 37 37 194.133 37 **
134 6 6 6 194.134 6
135 23 23 23 194.135 23
136 40 40 40 194.136 40
137 41 41 41 194.137 41
138 42 42 42 194.138 42
139 43 43 43 194.139 43
140 44 44 44 194.140 44
141 9 9 9 194.141 9
2 142 10 10 10 194.142
3 143 27 27 27 194.143
144 48 48 48 194.144 48
1 145 49 49 49 194.145
2 146 26 26 26 194.146
147 51 51 51 194.147 51
148 52 52 52 194.148 52
149 53 53 53 194.149 53
150 54 54 54 194.150 54
151 8 8 8 194.151 8
152 56 56 56 194.152 56
153 57 57 57 194.153 57
154 58 58 58 194.154 58
155 59 59 59 194.155 59
156 4 4 4 194.156 4
157 20 20 20 194.157 20
158 62 62 62 194.158 62
159 255 255 95 194.159 255 ##
160 65 65 65 194.160 128.65
161 170 170
162 74 74 176 194.162 128.67 ##
163 177 177 177 194.163 128.68
164 159 159 159 194.164 128.69
165 178 178 178 194.165 128.70
166 106 106 ##
167 181 181 181 194.167 128.72
168 189 187 ** ##
169 180 180
170 154
171 138 138 138 194.171 128.82
172 95 176 186 194.172 128.83 ** ##
173 202 202 202 194.173 128.84
174 175 175 175 194.174 128.85
175 188 ##
176 144 144 144 194.176 128.87
177 143
178 234 234 234 194.178 128.89
179 250 250
180 190
181 160 160
182 182 182 182 194.182 128.101
183 179 179
184 157 157 157 194.184 128.103
185 218 218 218 194.185 128.104
186 155 155 155 194.186 128.105
187 139
188 183 183 183 194.188 128.112
189 184
190 185 185 185 194.190 128.114
191 171 171 171 194.191 128.115
192 100 100
193 101 101
194 98 98 98 195.130 138.67
195 102 102
196 99 99 99 195.132 138.69
197 103 103
198 158
199 104 104
200 116
201 113 113
202 114
203 115
204 120 120
205 117 117
206 118
207 119 119 119 195.143 138.86
208 172 172 172 195.144 138.87
209 105 105
210 237 237 237 195.146 138.89
211 238 238 238 195.147 138.98
212 235 235 235 195.148 138.99
213 239 239 239 195.149 138.100
214 236 236 236 195.150 138.101
215 191 191 191 195.151 138.102
216 128 128
217 253 253 224 195.153 138.104 ##
218 254 254 254 195.154 138.105
219 251 251 221 195.155 138.106 ##
220 252 252 252 195.156 138.112
221 173 186 173 195.157 138.113 ** ##
222 174 174 174 195.158 138.114
223 89 89 89 195.159 138.115
224 68 68 68 195.160 139.65
225 69 69 69 195.161 139.66
226 66 66 66 195.162 139.67
227 70 70 70 195.163 139.68
228 67 67 67 195.164 139.69
229 71 71 71 195.165 139.70
230 156
231 72 72 72 195.167 139.72
232 84 84 84 195.168 139.73
233 81 81 81 195.169 139.74
234 82 82 82 195.170 139.81
235 83 83 83 195.171 139.82
236 88 88 88 195.172 139.83
237 85 85 85 195.173 139.84
238 86 86 86 195.174 139.85
239 87 87 87 195.175 139.86
240 140 140
241 73 73 73 195.177 139.88
242​​205​​ 205 205
243 206 206
244 203
245 207 207 207 195.181 139.100
246 204 204
247 225 225 225 195.183 139.102
248 112 112
249 221 221 192 195.185 139.104 ##
250 222 222
251 219 219 219 195.187 139.106
252 220 220
253 141 141 141 195.189 139.113
254 142 142
255 223 223 223 195.191 139.115

上記の表をASCII+Latin-0037ではなく、CCSID1の順序で表示したい場合
次に、テーブルを実行します。

レシピ4

パール\
-ne'if(/.{29}\d{1,3}\s{2,4}\d{1,3}\s{2,4}\d{1,3}\s{2,4}\d{1,3}/)'\
-e'{push(@ l、$ _)}' \
-e'END {print map {$ _-> [0]}' \
-e'sort {$ a-> [1] <=> $ b-> [1]}' \
-e'map {[$ _、substr($ _、34,3)]} @ l;}' perlebcdic.pod

CCSID 1047の順序で表示したい場合は、最後の行の番号34を変更してください。
このように39に:

レシピ5

パール\
-ne'if(/.{29}\d{1,3}\s{2,4}\d{1,3}\s{2,4}\d{1,3}\s{2,4}\d{1,3}/)'\
-e'{push(@ l、$ _)}' \
-e'END {print map {$ _-> [0]}' \
-e'sort {$ a-> [1] <=> $ b-> [1]}' \
-e'map {[$ _、substr($ _、39,3)]} @ l;}' perlebcdic.pod

POSIX-BCの順序で表示したい場合は、最後の行の番号34を次のように変更します。
44、このように:

レシピ6

パール\
-ne'if(/.{29}\d{1,3}\s{2,4}\d{1,3}\s{2,4}\d{1,3}\s{2,4}\d{1,3}/)'\
-e'{push(@ l、$ _)}' \
-e'END {print map {$ _-> [0]}' \
-e'sort {$ a-> [1] <=> $ b-> [1]}' \
-e'map {[$ _、substr($ _、44,3)]} @ l;}' perlebcdic.pod

in XNUMX進数、 ソート in 1047 注文
このドキュメントが最初に書かれて以来、コンベンションはますます使用されるようになりました
コードポイントのXNUMX進表記。 レシピでこれを行うこととまたソートすることは
マルチステッププロセスなので、ここでは、便宜上、上からのテーブルを次のように再ソートします。
コードページ1047の順序、およびXNUMX進表記を使用します。

ISO
8859-1 POS-CCSID
CCSID CCSID CCSIDIX-1047
chr 0819 0037 1047 BC UTF-8 UTF-EBCDIC
-------------------------------------------------- -------------------
00 00 00 00 00 00
01 01 01 01 01 01
02 02 02 02 02 02
03 03 03 03 03 03
9C 04 04 04 C2.9C 04
09 05 05 05 09 05
86 06 06 06 C2.86 06
7F 07 07 07 7F 07
97 08 08 08 C2.97 08
8D 09 09 09 C2.8D 09
2E 8A 0A 0A C0E 2.8A
0B 0B 0B 0B 0B 0B
0C 0C 0C 0C 0C 0C
0D 0D 0D 0D 0D 0D
0E 0E 0E 0E 0E 0E
0F 0F 0F 0F 0F 0F
10 10 10 10 10 10
1 11 11 11 11 11
2 12 12 12 12 12
3 13 13 13 13 13
9D 14 14 14 C2.9D 14
0A 25 15 15 0A 15 **
08 16 16 16 08 16
87 17 17 17 C2.87 17
18 18 18 18 18 18
19 19 19 19 19 19
2 92A 1A 1A C1 2.92A
3F 8B 1B 1B C1F 2.8B
1C 1C 1C 1C 1C 1C
1D 1D 1D 1D 1D 1D
1E 1E 1E 1E 1E 1E
1F 1F 1F 1F 1F 1F
80 20 20 20 C2.80 20
81 21 21 21 C2.81 21
82 22 22 22 C2.82 22
83 23 23 23 C2.83 23
84 24 24 24 C2.84 24
85 15 25 25 C2.85 25 **
17 26 26 26 17 26
1B 27 27 27 1B 27
88 28 28 28 C2.88 28
89 29 29 29 C2.89 29
8A 2A 2A 2A C2.8A 2A
8B 2B 2B 2B C2.8B 2B
8C 2C 2C 2C C2.8C 2C
05 2D 2D 2D 05 2D
06 2E 2E 2E 06 2E
07 2F 2F 2F 07 2F
90 30 30 30 C2.90 30
1 91 31 31 C31 2.91
16 32 32 32 16 32
93 33 33 33 C2.93 33
94 34 34 34 C2.94 34
95 35 35 35 C2.95 35
96 36 36 36 C2.96 36
04 37 37 37 04 37
98 38 38 38 C2.98 38
99 39 39 39 C2.99 39
9A 3A 3A 3A C2.9A 3A
9B 3B 3B 3B C2.9B 3B
4 14C 3C 3C 3 14C
15 3D 3D 3D 15 3D
9E 3E 3E 3E C2.9E 3E
1A 3F 3F 3F 1A 3F
20 40 40 40 20 40
A0 41 41 41 C2.A0 80.41
E2 42 42 42 C3.A2 8B.43
E4 43 43 43 C3.A4 8B.45
E0 44 44 44 C3.A0 8B.41
E1 45 45 45 C3.A1 8B.42
E3 46 46 46 C3.A3 8B.44
E5 47 47 47 C3.A5 8B.46
E7 48 48 48 C3.A7 8B.48
F1 49 49 49 C3.B1 8B.58
A2 4A 4A B0 C2.A2 80.43 ##
。 2E 4B 4B 4B 2E 4B
<3C 4C 4C 4C 3C 4C
(28 4D 4D 4D 28 4D
+ 2B 4E 4E 4E 2B 4E
| | 7C 4F 4F 4F 7C 4F
&26 50 50 50 26 50
E9 51 51 51 C3.A9 8B.4A
EA 52 52 52 C3.AA 8B.51
EB 53 53 53 C3.AB 8B.52
E8 54 54 54 C3.A8 8B.49
ED 55 55 55 C3.AD 8B.54
EE 56 56 56 C3.AE 8B.55
EF 57 57 57 C3.AF 8B.56
EC 58 58 58 C3.AC 8B.53
DF 59 59 59 C3.9F 8A.73
! 21 5A 5A 5A 21 5A
$ 24 5B 5B 5B 24 5B
* 2A 5C 5C 5C 2A 5C
)29 5D 5D 5D 29 5D
; 3B 5E 5E 5E 3B 5E
^ 5E B0 5F 6A 5E 5F ** ##
--2D 60 60 60 2D 60
/ 2F 61 61 61 2F 61
C2 62 62 62 C3.82 8A.43
C4 63 63 63 C3.84 8A.45
C0 64 64 64 C3.80 8A.41
C1 65 65 65 C3.81 8A.42
C3 66 66 66 C3.83 8A.44
C5 67 67 67 C3.85 8A.46
C7 68 68 68 C3.87 8A.48
D1 69 69 69 C3.91 8A.58
A6 6A 6A D0 C2.A6 80.47 ##
、2C 6B 6B 6B 2C 6B
%25 6C 6C 6C 25 6C
_ 5F 6D 6D 6D 5F 6D
> 3E 6E 6E 6E 3E 6E
? 3F 6F 6F 6F 3F 6F
F8 70 70 70 C3.B8 8B.67
C9 71 71 71 C3.89 8A.4A
CA 72 72 72 C3.8A 8A.51
CB 73 73 73 C3.8B 8A.52
C8 74 74 74 C3.88 8A.49
CD 75 75 75 C3.8D 8A.54
CE 76 76 76 C3.8E 8A.55
CF 77 77 77 C3.8F 8A.56
CC 78 78 78 C3.8C 8A.53
`60 79 79 4A 60 79 ##
:3A 7A 7A 7A 3A 7A
#23 7B 7B 7B 23 7B
@ 40 7C 7C 7C 40 7C
'27 7D 7D 7D 27 7D
= 3D 7E 7E 7E 3D 7E
"22 7F 7F 7F 22 7F
D8 80 80 80 C3.98 8A.67
61 81 81 81 61 81
b 62 82
c 63 83
d 64
e 65
f 66
g 67
時 68 88 88 88 68 88
i 69
AB 8A 8A 8A C2.AB 80.52
BB 8B 8B 8B C2.BB 80.6A
F0 8C 8C 8C C3.B0 8B.57
FD 8D 8D 8D C3.BD 8B.71
FE 8E 8E 8E C3.BE 8B.72
B1 8F 8F 8F C2.B1 80.58
B0 90 90 90 C2.B0 80.57
j 6A 91 91 91 6A 91
k 6B 92 92 92 6B 92
l 6C 93 93 93 6C 93
m 6D 94 94 94 6D 94
n 6E 95 95 95 6E 95
o 6F 96 96 96 6F 96
p 70
q 71
r 72
AA 9A 9A 9A C2.AA 80.51
BA 9B 9B 9B C2.BA 80.69
E6 9C 9C 9C C3.A6 8B.47
B8 9D 9D 9D C2.B8 80.67
C6 9E 9E 9E C3.86 8A.47
A4 9F 9F 9F C2.A4 80.45
B5 A0 A0 A0 C2.B5 80.64
〜7E A1 A1 FF 7E A1 ##
73 A2 A2 A2 73 A2
t 74 A3 A3 A3 74 A3
u 75 A4 A4 A4 75 A4
v 76 A5 A5 A5 76 A5
w 77 A6 A6 A6 77 A6
× 78 A7 A7 A7 78 A7
y 79 A8 A8 A8 79 A8
7A A9 A9 A9 7A A9
A1 AA AA AA C2.A1 80.42
BF AB AB AB C2.BF 80.73
D0 AC AC AC C3.90 8A.57
[5B BA AD BB 5B AD ** ##
DE AE AE AE C3.9E 8A.72
AE AF AF AF C2.AE 80.55
AC 5F B0 BA C2.AC 80.53 ** ##
A3 B1 B1 B1 C2.A3 80.44
A5 B2 B2 B2 C2.A5 80.46
B7 B3 B3 B3 C2.B7 80.66
A9 B4 B4 B4 C2.A9 80.4A
A7 B5 B5 B5 C2.A7 80.48
B6 B6 B6 B6 C2.B6 80.65
BC B7 B7 B7 C2.BC 80.70
BD B8 B8 B8 C2.BD 80.71
BE B9 B9 B9 C2.BE 80.72
DD AD BA AD C3.9D 8A.71 ** ##
A8 BD BB 79 C2.A8 80.49 ** ##
AF BC BC A1 C2.AF 80.56 ##
] 5D BB BD BD 5D BD **
B4 BE BE BE BE C2.B4 80.63
D7 BF BF BF C3.97 8A.66
{7B C0 C0 FB 7B C0 ##
あ 41 C1 C1 C1 41 C1
B 42 C2 C2 C2 42 C2
C 43 C3 C3 C3 43 C3
D 44 C4 C4 C4 44 C4
E 45 C5 C5 C5 45 C5
F 46 C6 C6 C6 46 C6
G 47 C7 C7 C7 47 C7
H 48 C8 C8 C8 48 C8
私は 49 C9 C9 C9 49 C9
AD CA CA CA C2.AD 80.54
F4 CB CB CB C3.B4 8B.63
F6 CC CC CC C3.B6 8B.65
F2 CD CD CD C3.B2 8B.59
F3 CE CE CE C3.B3 8B.62
F5 CF CF CF C3.B5 8B.64
7D D0 D0 FD 7D D0 ##
J 4A D1 D1 D1 4A D1
K 4B D2 D2 D2 4B D2
L 4C D3 D3 D3 4C D3
中 4D D4 D4 D4 4D D4
N 4E D5 D5 D5 4E D5
○ 4F D6 D6 D6 4F D6
P 50 D7 D7 D7 50 D7
Q 51 D8 D8 D8 51 D8
R 52 D9 D9 D9 52 D9
B9 DA DA DA C2.B9 80.68
FB DB DB DB C3.BB 8B.6A
FC DC DC DC C3.BC 8B.70
F9 DD DD C0 C3.B9 8B.68 ##
FA DE DE DE C3.BA 8B.69
FF DF DF DF C3.BF 8B.73
\ 5C E0 E0 BC 5C E0 ##
F7 E1 E1 E1 C3.B7 8B.66
S 53 E2 E2 E2 53 E2
と 54 E3 E3 E3 54 E3
U 55 E4 E4 E4 55 E4
V 56 E5 E5 E5 56 E5
W 57 E6 E6 E6 57 E6
X 58 E7 E7 E7 58 E7
Y 59 E8 E8 E8 59 E8
Z 5A E9 E9 E9 5A E9
B2 EA EA EA C2.B2 80.59
D4 EB EB EB C3.94 8A.63
D6 EC EC EC C3.96 8A.65
D2 ED ED ED C3.92 8A.59
D3 EE EE EE C3.93 8A.62
D5 EF EF EF C3.95 8A.64
0 30 F0 F0 F0 30 F0
1 31 F1 F1 F1 31 F1
2 32 F2 F2 F2 32 F2
3 33 F3 F3 F3 33 F3
4 34 F4 F4 F4 34 F4
5 35 F5 F5 F5 35 F5
6 36 F6 F6 F6 36 F6
7 37 F7 F7 F7 37 F7
8 38 F8 F8 F8 38 F8
9 39 F9 F9 F9 39 F9
B3 FA FA FA C2.B3 80.62
DB FB FB DD C3.9B 8A.6A ##
DC FC FC FC C3.9C 8A.70
D9 FD FD E0 C3.99 8A.68 ##
DA FE FE FE C3.9A 8A.69
9F FF FF 5F C2.9F FF ##

識別 キャラクター CODE セット


操作している文字セットを判別することができます。 しかし、最初にあなたは
あなたがこれをする必要があることを本当に本当に確信する必要があります。 あなたのコードはより単純になり、おそらく
文字セットをテストしてさまざまなことを行う必要がない場合は、同じように移植可能です。
依存します。 実際、書くのが簡単ではない状況はごくわずかです。
すべての文字セットに移植可能な直線コード。 の「UnicodeとEBCDIC」を参照してください。
文字を移植可能に指定する方法については、perluniintroを参照してください。

ただし、実行している文字セットを知りたい場合があります。
下。 考えられる例のXNUMXつは、パフォーマンスが
重要です。

ASCIIまたはEBCDICのどちらで実行しているかを判別するには、次の戻り値を使用できます。
「ord()」または「chr()」を使用して、XNUMXつ以上の文字値をテストします。 例えば:

$ is_ascii = "A" eq CHR(65);
$ is_ebcdic = "A" eq CHR(193);
$ is_ascii = ord( "A")== 65;
$ is_ebcdic = ord( "A")== 193;

EBCDICコードページを区別する必要はさらに少なくなりますが、区別するには、探してみてください
それらの間で異なるXNUMXつ以上の文字で。

$ is_ascii = ord('[')== 91;
$ is_ebcdic_37 = ord('[')== 186;
$ is_ebcdic_1047 = ord('[')== 173;
$ is_ebcdic_POSIX_BC = ord('[')== 187;

ただし、次のようなテストを作成することは賢明ではありません。

$ is_ascii = "\ r" ne CHR(13); # 違う
$ is_ascii = "\ n" ne CHR(10); #お勧めできません

明らかに、これらの最初のものは、ほとんどのASCIIプラットフォームを次のいずれかから区別できません。
CCSID 0037、1047、またはPOSIX-BC EBCDICプラットフォーム( "" \ r "eq以降) CHR(13)」
それらのコード化された文字セット。 ただし、「\n」は「CHR(13)」と「\r」は
"CHR(10) "古いMacintosh(ASCIIプラットフォーム)では、XNUMX番目の$is_asciiテストは
そこでトラブルにつながります。

perlがEBCDICコードページの下に構築されているかどうかを判断するには、
次のような構成モジュール:

Configを使用します。
$ is_ebcdic = $ Config {'ebcdic'} eq'define';

変換


"utf8 :: unicode_to_native()"   "utf8 :: native_to_unicode()"
これらの関数は、XNUMXつのエンコーディングで入力数値コードポイントを受け取り、その
同等の値は他にあります。

utf8を参照してください。

tr ///
文字列をある文字セットから別の文字セットに変換するには、単純なリストを使用します。
上記の表の右側の列などの数値と、Perlの「tr///」
必要なのは演算子だけです。 表のデータはASCII/Latin1の順序であるため、
EBCDIC列は、使いやすいASCII/Latin1からEBCDICへの操作を提供します。
簡単に元に戻すことができます。

たとえば、ASCII / Latin1をコードページ037に変換するには、XNUMX番目の出力を取得します
レシピ2の出力からの数字の列(「\」文字を追加するように変更)、およびそれを使用する
「tr///」のように:

$ cp_037 =
'\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';

私の$ebcdic_string= $ ascii_string;
eval'$ ebcdic_string =〜tr / \ 000- \377/'。 $cp_037。 '/';

EBCDIC 037からASCIIに変換するには、次のようにtr///引数の順序を逆にします。

私の$ascii_string= $ ebcdic_string;
eval'$ ascii_string =〜tr/'。 $cp_037。 '/ \ 000- \ 377 /';

同様に、レシピ2のXNUMX番目の数値列の出力を取得して、
$cp_1047テーブル。 レシピ2からの出力のXNUMX番目の数字の列は、
トランスコーディングにも適した$cp_posix_bcテーブル。

逆テーブルを見たい場合は、最初に目的のテーブルで並べ替える必要があります
レシピ4、5、または6のように数字の列を作成し、最初の数字の列の出力を取得します。

iconv
XPGの操作性は、多くの場合、 iconv シェルから利用可能なユーティリティまたは
Cライブラリから。 iconvについては、システムのドキュメントを参照してください。

OS/390またはz/OSでは、 iconv(1)マンページ。 「iconv」シェルユーティリティを呼び出すXNUMXつの方法
Perl内から次のようになります。

#OS/390またはz/OSの例
$ ascii_data = `echo'$ ebcdic_data' | iconv -f IBM-1047 -t ISO8859-1`

または逆マップ:

#OS/390またはz/OSの例
$ ebcdic_data = `echo'$ ascii_data' | iconv -f ISO8859-1 -t IBM-1047`

その他のPerlベースの変換オプションについては、CPANの「Convert::*」モジュールを参照してください。

C RTL
OS/390およびz/OS Cランタイム・ライブラリーは、「_ atoe()」および「_etoa()」関数を提供します。

オペレーター 違い


「..」範囲演算子は、EBCDICプラットフォームで特定の文字範囲を慎重に扱います。
たとえば、次の配列には、いずれかのEBCDICプラットフォーム上にXNUMX個の要素があります。
またはASCIIプラットフォーム:

@alphabet =('A' ..'Z'); #$#alphabet == 25

&^|などのビット演算子文字列を操作すると、異なる結果が返される場合があります
または、EBCDICプラットフォームで実行されているPerlプログラムの文字データは、
ASCIIプラットフォーム。 これはperlopのものから適応された例です:

#EBCDICベースの例
印刷"jp\ n" ^ "ah"; #「JAPH\n」を出力
印刷「JA」| "ph \ n"; #「japh\n」を出力します
印刷"JAPH\ nジャンク"& "\ 277 \ 277 \ 277 \ 277 \ 277"; #「japh\n」を出力します;
印刷'pN $'^ "E

ASCIIテーブルの32個のC0制御文字の興味深い特性は、それらが
Perlでは「文字通り」制御文字として構築できます。例:「(CHR(0) "eq" \ c @ ")>
"(CHR(1) "eq" \ cA ")>など。EBCDICプラットフォーム上のPerlは、" \c@"を取るように移植されています。
〜へ CHR(0)および"\cA"から CHR(1)なども同様ですが、結果として得られる文字は
使用しているコードページ。 次の表では、の標準的な頭字語を使用しています。
コントロール。 POSIX-BCおよび1047セットは、この範囲全体で同一であり、
0037は21つのスポット(小数点以下XNUMX桁)にのみ設定されています。 ラインターミネータ文字は
ASCIIプラットフォームでは「\cJ」によって生成されますが、1047またはPOSIX-BCプラットフォームでは「\cU」によって生成されます。
「\c.letter」として生成することはできません。 0037プラットフォームの制御文字。 また、
「\c\」は、ターミネータを吸収するため、文字列または正規表現の最後の要素にすることはできません。
しかし、「\ c \X" と連結された「ファイルセパレータ」です X すべての X。 外れ値「\c?」 の上
非C0コントロール「DEL」を生成するASCIIは、EBCDICで外れ値コントロール「APC」を生成します。
隣接するコントロールのブロックにないもの。 これの微妙な点に注意してください
その「\c?」 ASCIIプラットフォームではASCII文字ですが、
EBCDICプラットフォームのASCII文字。

chr ord 8859-1 0037 1047 && POSIX-BC
-------------------------------------------------- ---------------------
\ c @ 0
\ cA 1
\ cB 2
\ cC 3
\ cD 4
\ cE 5
\ cF 6
\ cG 7
\ cH 8
\ cI 9
\ cJ 10
\ cK 11
\ cL 12
\ cM 13
\ cN 14
\ cO 15
\ cP 16
\ cQ 17
\ cR 18
\ cS 19
\ cT 20
\ cU 21 ****
\ cV 22
\ cW 23
\ cX 24
\ cY 25
\ cZ 26
\ c [27
\ c \ X 28 バツバツバツ
\ c] 29
\ c ^ 30
\ c_ 31
\ c? *

"*"注: "\ c?" ASCIIプラットフォームでは序数127( "DEL")にマップされますが、序数127は
EBCDICマシンの制御文字ではありません。「\c?」 代わりに、それらを「APC」にマップします。
255および0037では1047、POSIX-BCでは95。

FUNCTION 違い


「chr()」「chr()」には、目的の文字を生成するためにEBCDICコード番号引数を指定する必要があります
EBCDICプラットフォームでの戻り値。 例えば:

$ CAPITAL_LETTER_A = CHR(193);

UTF-EBCDICで表現できる最大のコードポイントはU+7FFF_FFFFです。 もし、あんたが
より大きな値で「chr()」を実行すると、実行時エラー(0による除算と同様)が発生します
起こる。

"ord()" "ord()"は、EBCDICプラットフォームでEBCDICコード番号の値を返します。 例えば:

$ the_number_193 = ord( "A");

"パック()"
「pack()」の「c」および「C」テンプレートは、文字セットのエンコーディングに依存しています。
EBCDICでの使用例は次のとおりです。

$ foo = pack( "CCCC"、193,194,195,196);
#$ foo eq "ABCD"
$ foo = pack( "C4"、193,194,195,196);
# 同じこと

$ foo = pack( "ccxxcc"、193,194,195,196);
#$ foo eq "AB \ 0 \ 0CD"

「U」テンプレートは、すべてのプラットフォームで「Unicode」を意味するように移植されているため、

pack( "U"、65)eq'A'

すべてのプラットフォームに当てはまります。 低256のネイティブコードポイントが必要な場合は、
「W」テンプレート。 これは、同等性が

pack( "W"、ord($ character))eq $ character
unpack( "W"、$ character)== ord $ character

開催します。

UTF-EBCDICで表現できる最大のコードポイントはU+7FFF_FFFFです。 もし、あんたが
より大きな値を文字にパックしようとすると、実行時エラー(除算と同様)
0までに)発生します。

「print()」
印刷に渡されるスカラーと文字列に注意する必要があります。
ASCIIエンコーディング。 これが発生する一般的な場所のXNUMXつは、MIMEの出力です。
CGIスクリプト書き込み用のタイプヘッダー。 たとえば、多くのPerlプログラミングガイド
次のようなものをお勧めします:

print "Content-type:\ ttext / html \ 015 \ 012 \ 015 \ 012";
#これはEBCDICでは間違っている可能性があります

代わりに書くことができます

print "Content-type:\ ttext / html \ r \ n \ r \ n"; #DGW他はOK

そしてそれを移植可能に動作させます。

これは、EBCDICからASCIIへの変換がWebサーバーによって行われるためです。
この場合。 詳細については、Webサーバーのドキュメントを参照してください。

「printf()」
文字を数字に、またはその逆に変換できる形式は次のようになります。
EBCDICプラットフォームで実行した場合のASCII対応とは異なります。
例としては以下の通りです:

printf( "%c%c%c"、193,194,195); #ABCを印刷します

"選別()"
EBCDICソート結果は、特に大文字小文字が混在する場合、ASCIIソート結果とは異なる場合があります。
文字列。 これについては、以下で詳しく説明します。

「sprintf()」
上記の「printf()」の説明を参照してください。 sprintfの使用例は
次のとおりです。

$ CAPITAL_LETTER_A = sprintf( "%c"、193);

「unpack()」
上記の「pack()」の説明を参照してください。

Unicodeで指定することにより、これらの移植可能なコードを記述できることに注意してください。
数値、および変換関数の使用:

printf( "%c"、utf8 ::unicode_to_native(65)); #すべてにAを印刷
#プラットフォーム
print utf8 :: native_to_unicode(ord( "A")); #同様に、65を出力します

その他のオプションについては、perluniintroの「UnicodeとEBCDIC」および「CONVERSIONS」を参照してください。

REGULAR 表現 違い


ASCIIプラットフォームの誰かが行うのと同じように、正規表現を書くことができます。
ただし、特定のコードポイントを指定するためにXNUMX進数またはXNUMX進数の表記を使用すると、
EBCDICコードページがネイティブにマップする文字を提供します。 (これも当てはまります
すべての二重引用符で囲まれた文字列。)移植可能に記述したい場合は、「\ N {U+...}」を使用してください。
「\x{...}」を使用するすべての場所で表記法を使用し、でXNUMX進表記法を使用しないでください。
すべて。

Perl v5.22以降、これは括弧で囲まれた文字クラスの範囲に適用されます。 もし、あんたが
たとえば、「qr / [\ N {U + 20}-\ N {U + 7F}] /」の場合、「\ N {U+20}」という文字を意味します。
"\ N {U + 21}"、...、 "\ N {U+7F}"。 この範囲は、ASCIIが印刷可能なすべての文字です。
文字セットに含まれています。

v5.22より前では、(Perl v5.5.3以降)を除いて、移植可能な範囲を指定することはできませんでした。
「[AZ]」および「[az]」範囲のすべてのサブセットは、ギャップを拾わないように特別にコーディングされています
文字。 たとえば、「o」(「o WITH CIRCUMFLEX」)などの文字は、
「I」と「J」は、正規表現の範囲「/[HK]/」と一致しません。 しかし、どちらか
範囲の終点のは明示的に数値です(どちらも「\ N {U + ...}」で指定されていません)、
ギャップ文字が一致します:

/ [\ x89- \ x91] /

「\x8」は「i」、「\ x89」は「j」、「\ x91e」はギャップですが、「\x8e」と一致します。
文字、アルファベットの観点から。

注意すべきもうXNUMXつの構成は、XNUMX進数の不適切な使用です(使用しない限り)
"\ N {U + ...}")または正規表現のXNUMX進定数。 次のセットを検討してください
潜水艦:

サブ is_c0 {
私の$char= substr(shift、0,1);
$ char =〜/ [\ 000- \ 037] /;
}

サブ is_print_ascii {
私の$char= substr(shift、0,1);
$ char =〜/ [\ 040- \ 176] /;
}

サブ is_delete {
私の$char= substr(shift、0,1);
$ char eq "\ 177";
}

サブ is_c1 {
私の$char= substr(shift、0,1);
$ char =〜/ [\ 200- \ 237] /;
}

sub is_latin_1 {#ただしASCIIではありません; C1ではありません
私の$char= substr(shift、0,1);
$ char =〜/ [\ 240- \ 377] /;
}

これらはASCIIプラットフォームでのみ有効です。 Perl v5.22以降、変更するだけで
同等の「\N{U + ...}」値に対するXNUMX進定数により、移植性が高まります。

サブ is_c0 {
私の$char= substr(shift、0,1);
$ char =〜/ [\ N {U + 00}-\ N {U + 1F}] /;
}

サブ is_print_ascii {
私の$char= substr(shift、0,1);
$ char =〜/ [\ N {U + 20}-\ N {U + 7E}] /;
}

サブ is_delete {
私の$char= substr(shift、0,1);
$ char eq "\ N {U + 7F}";
}

サブ is_c1 {
私の$char= substr(shift、0,1);
$ char =〜/ [\ N {U + 80}-\ N {U + 9F}] /;
}

sub is_latin_1 {#ただしASCIIではありません; C1ではありません
私の$char= substr(shift、0,1);
$ char =〜/ [\ N {U + A0}-\ N {U + FF}] /;
}

そして、ここにそれらを書くためのいくつかの代替のポータブルな方法があります:

サブ Is_c0 {
私の$char= substr(shift、0,1);
$ char =〜/ [[:cntrl:]] / a &&!を返します。 Is_delete($ char);

#あるいは:
#return $ char =〜/ [[:cntrl:]] /
#&& $ char =〜/ [[:ascii:]] /
#&&! Is_delete($ char);
}

サブ Is_print_ascii {
私の$char= substr(shift、0,1);

$ char =〜/ [[:print:]]/a;を返します。

#あるいは:
#return $ char =〜/ [[:print:]] / && $ char =〜/ [[:ascii:]] /;

# または
#$charを返す
#=〜/ [! "\#\ $%&'()* +、\-。\ / 0-9:; <=>?\ @ AZ [\\\] ^ _` az {|}〜] /;
}

サブ Is_delete {
私の$char= substr(shift、0,1);
utf8 :: native_to_unicode(ord $ char)==0x7Fを返します。
}

サブ Is_c1 {
機能'unicode_strings'を使用します;
私の$char= substr(shift、0,1);
$ char =〜/ [[:cntrl:]] / && $ char!〜/ [[:ascii:]]/;を返します。
}

sub Is_latin_1 {#ただしASCIIではありません; C1ではありません
機能'unicode_strings'を使用します;
私の$char= substr(shift、0,1);
ord($ char)<256を返す
&& $ char!〜/ [[:ascii:]] /
&& $ char!〜/ [[:cntrl:]] /;
}

「Is_latin_1()」を記述する別の方法は、範囲内の文字を使用することです。
明示的に:

サブ Is_latin_1 {
私の$char= substr(shift、0,1);
$ char =〜/ [XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAAAA〜AeAaAECEEEEeIIIIe]
[‐N〜OOOO〜OeXOUUUUeYPssaaaa〜aeaaaeceeeeeiiiie`n〜oooo〜oeXouuuueypye] / x;
}

そのフォームはネットワークトランジットで問題が発生する可能性がありますが(8ビットが存在するため)
文字)または非ISOラテン文字セット。 ただし、「Is_c1」を書き換えることはできます
したがって、「unicode_strings」(v5.14より前)を持たないPerlで機能します。

sub Is_latin_1 {#ただしASCIIではありません; C1ではありません
私の$char= substr(shift、0,1);
ord($ char)<256を返す
&& $ char!〜/ [[:ascii:]] /
&&! Is_latin1($ char);
}

ソケット


ほとんどのソケットプログラミングは、ネットワークバイトオーダーのASCII文字エンコーディングを想定しています。
例外には、サーバーがホストWebサーバーで作成するCGIスクリプトが含まれる場合があります。
あなたのために翻訳の世話をします。 ほとんどのホストWebサーバーは、EBCDICデータをISO-8859-1に変換します
または出力のUnicode。

並べ替え


ASCIIベースの文字セットとEBCDIC文字セットの大きな違いのXNUMXつは、相対的なものです。
ネイティブの順序でソートされたときの文字の位置。 最も懸念されるのは上部です
小文字、数字、およびアンダースコア( "_")。 ASCIIプラットフォームでは、
ネイティブのソート順では、数字は大文字の前にあり、大文字は大文字の前にあります。
小文字の前にあるアンダースコア。 EBCDICでは、アンダースコアが表示されます
最初に小文字、次に大文字、そして数字が最後になります。 もしも
ASCIIベースのプラットフォームでソートすると、医師のXNUMX文字の略語が表示されます
ドライブのXNUMX文字の略語の前。 あれは:

@sorted = sort(qw(Dr。dr。)); #@ sortedはASCIIで('Dr。'、'dr。')を保持し、
#but('dr。'、' Dr.')on EBCDIC

EBCDICの大文字の前の小文字のプロパティは、ラテン語にも適用されます
1 0037や1047などのEBCDICページ。例として、「Ee」(「E WITH DIAERESIS」、
203)ASCIIプラットフォームでは "ee"( "e WITH DIAERESIS"、235)の前にありますが、後者(83)
EBCDICプラットフォームでは前者(115)の前にあります。 (賢明な読者は、
「ss」「SMALLLETTERSHARPS」の大文字バージョンは単に「SS」であり、大文字は
「ye」(小さい「y WITH DIAERESIS」)および「X」(「MICROSIGN」)のバージョンは、0..255に含まれていません。
範囲ですが、Unicodeであり、Unicode対応のPerlです)。

ソート順により、ASCIIプラットフォームで得られた結果と
EBCDICプラットフォーム。 以下は、これらに対処する方法に関するいくつかの提案です
違い。

無視する ASCII EBCDIC sort 違い。
これは、計算コストが最も低い戦略です。 ある程度のユーザー教育が必要になる場合があります。

  a sort ヘルパー function
これは完全に一般的ですが、最も計算コストの高い戦略です。 いずれかを選択してください
または他の文字セットを使用して、すべての種類の比較でそれに変換します。 これが
ASCIIソート順に変換する完全な例:

sub native_to_uni($){
私の$string=シフト;

#ASCIIプラットフォームで時間を節約
ord'A'==65の場合は$stringを返します。

私の$output= "";
私の$i(0 .. length($ string)-1){
$ output
。=chr(utf8 :: native_to_unicode(ord(substr($ string、$ i、1))));
}

#必要がなかったとしても、出力への入力のutf8nessを保持します
#utf8になる
utf8 :: upgrade($ output)if utf8 :: is_utf8($ string);

$ outputを返します。
}

sub ascii_order {#ソートヘルパー
native_to_uni($ a)cmp native_to_uni($ b);を返します。
}

ソートascii_order@list;

モノ型 HOUSES その後 sort データ (ために 非数字、 非アンダースコア)
数字とアンダースコアがどこにソートされるかを気にしない場合は、次のようにすることができます
この

sub case_insensitive_order {#ヘルパーを並べ替える
lc($ a)cmp lc($ b)を返します
}

並べ替えcase_insensitive_order@list;

パフォーマンスが問題であり、出力が同じケースであるかどうかを気にしない場合
入力、「tr ///」を使用して、データ内で最も使用されるケースに変換します。 データの場合
主に大文字の非Latin1であり、次に「tr / [az] / [AZ] /」を適用し、次に「sort()」を適用します。 もしも
データは主にLatin1以外の小文字であり、ソートする前に「tr / [AZ] /[az]/」を適用します。
データが主に大文字で、Latin-1文字が含まれている場合は、以下を適用します。

tr / [az] / [AZ] /;
tr / [aaaa〜aeaaaeceeeeeiiiie`n〜oooo〜oeouuuueyp] / [AAAA〜AeAaAECEEEEeIIIIe‐N〜OOOO〜OeOUUUUeYP /;
s / ss / SS / g;

次に「sort()」。 選択肢がある場合は、小文字を使用して、
大文字がLatin-1の外側にある1つのLatin-XNUMX文字の問題: "ye"(small "y
WITH DIAERESIS ")および" X "(" MICRO SIGN ")。大文字にする必要がある場合は、次のことができます。
Unicode対応のPerl、実行:

tr / ye / \ x {178} /;
tr / X / \ x {39C} /;

実行する 並べ替え on XNUMXつ type of プラットフォーム のみ。
この戦略では、ネットワーク接続を使用できます。 そのようなものとして、それは計算上
高価な。

TRANSFORMATION 書式


文字セット内マッピングを使用してデータを変換するには、さまざまな方法があります。
さまざまな目的に役立ちます。 並べ替えについては、前のセクションといくつかのセクションで説明しました。
次に、他のより一般的なマッピング手法について説明します。

URL デコード   エンコーディング
一部のURLには、克服するためにXNUMX進数のASCIIコードポイントが含まれていることに注意してください
文字またはプロトコルの制限の問題。 たとえば、チルダ文字はすべてにあるわけではありません
したがって、キーボードは次の形式のURLです。

http://www.pvhp.com/~pvhp/

次のいずれかとして表現することもできます。

http://www.pvhp.com/%7Epvhp /

http://www.pvhp.com/%7epvhp /

ここで、7Eは「〜」のXNUMX進ASCIIコードポイントです。 これがそのようなデコードの例です
EBCDICコードページのURL:

$ url = 'http://www.pvhp.com/%7Epvhp /';
$ url =〜s /%([0-9a-fA-F] {2})/
pack( "c"、utf8 :: unicode_to_native(hex($ 1)))/ xge;

逆に、EBCDICでそのようなURLをエンコードするタスクの部分的な解決策は次のとおりです。
コードページ:

$ url = 'http://www.pvhp.com/~pvhp/';
#次の正規表現は、
#マッピング:('。'=>'%2E'、'/' =>'%2F'、':' =>'%3A')
$ url =〜s /([\ t "#%&\(\)、; <=> \?\ @ \ [\\\] ^` {|}〜])/
sprintf( "%%% 02X"、utf8 :: native_to_unicode(ord($ 1)))/ xge;

より完全なソリューションでは、URLをコンポーネントに分割し、完全なs///を適用します。
適切な部品のみに置き換えます。

uu エンコーディング   デコード
「pack()」または「unpack()」への「u」テンプレートは、EBCDICデータをEBCDIC文字でレンダリングします
それらのASCII対応物と同等です。 たとえば、次のように「はい」と表示されます。
確かに\n"ASCIIまたはEBCDICコンピュータのいずれかで:

$ all_byte_chrs ='';
for(0..255){$all_byte_chrs。=chr($ _); }
$ uuencode_byte_chrs = pack('u'、$ all_byte_chrs);
($ uu = <<'ENDOFHEREDOC')=〜s / ^ \ s * // gm;
M``$"`P0%!@<("0H+#`T.#Q`1$A,4%187&!D:&QP='A\@(2(C)"4F)R@I*BLL
M+2XO,#$R,S0U-C<X.3H[/#T^/T!!0D-$149'2$E*2TQ-3D]045)35%565UA9
M6EM<75Y?8&%B8V1E9F=H:6IK;&UN;W!Q<G-T=79W>'EZ>WQ]?G^`@8*#A(6&
MAXB)BHN,C8Z/D)&2DY25EI>8F9J;G)V>GZ"AHJ.DI::GJ*FJJZRMKJ^PL;*S
MM+6VM[BYNKN\O;Z_P,'"P\3%QL?(R<K+S,W.S]#1TM/4U=;7V-G:V]S=WM_@
?X> + CY.7FY ^ CIZNOL [> [O \ /'R \ _3U] O?X ^?K [_ / W ^ _P``
エンドフェレドック
if($ uuencode_byte_chrs eq $ uu){
印刷"はい";
}
$ uudecode_byte_chrs = unpack('u'、$ uuencode_byte_chrs);
if($ uudecode_byte_chrs eq $ all_byte_chrs){
印刷"確かに\n";
}

これは、EBCDICで動作する非常に質素なuudecoderです。

#!/ usr / local / bin / perl
$ _ = <>まで($ mode、$ file)= / ^ begin \ s *(\ d *)\ s *(\ S *)/;
open(OUT、 "> $ file")if $ file ne "";
while(<>){
/ ^end/の場合は最後;
次の場合/[az]/;
次に、int((((utf8 :: native_to_unicode(ord())-32)&077)でない限り
+ 2)/ 3)
== int(length()/ 4);
print OUT unpack( "u"、$ _);
}
close(OUT);
chmod oct($ mode)、$ file;

引用された-印刷可能 エンコーディング   デコード
ASCIIでエンコードされたプラットフォームでは、印刷可能なセットの外の文字を取り除くことができます
を使用して:

#このQPエンコーダはASCIIでのみ機能します
$ qp_string =〜s /([= \ x00- \ x1F \ x80- \ xFF])/
sprintf( "=%02X"、ord($ 1))/ xge;

Perl v5.22以降、これはASCIIと
EBCDICプラットフォーム。

#このQPエンコーダはASCIIとEBCDICの両方で動作します
$ qp_string =〜s /([= \ N {U + 00}-\ N {U + 1F} \ N {U + 80}-\ N {U + FF}])/
sprintf( "=%02X"、ord($ 1))/ xge;

以前のPerlの場合、ASCIIプラットフォームとEBCDICプラットフォームの両方で動作するQPエンコーダーは次のようになります。
次のようなものです。

$ delete = utf8 :: unicode_to_native(ord( "\ x7F"));
$ qp_string =〜
s /([^ [:print:] $ delete])/
sprintf( "=%02X"、utf8 :: native_to_unicode(ord($ 1)))/ xage;

(ただし、本番コードでは、EBCDICブランチで置換が行われる場合があります。
恒等写像を犠牲にすることなく、ASCIIブランチで関数呼び出しと個別に。
Perl v5.22では、IDマップが最適化されているため、費用はかかりませんが、
上記の代替手段はより単純であり、v5.22でも利用可能です。

このようなQP文字列は、次の方法でデコードできます。

#このQPデコーダーはASCIIのみに制限されています
$ string =〜s / =([[:xdigit:] [[:xdigit:])/ chr hex $ 1 / ge;
$ string =〜s / = [\ n \ r] + $ //;

一方、ASCIIプラットフォームとEBCDICプラットフォームの両方で動作するQPデコーダーは多少見えます
次のように:

$ string =〜s / =([[:xdigit:] [:xdigit:]])/
chr utf8 :: native_to_unicode(hex $ 1)/ xge;
$ string =〜s / = [\ n \ r] + $ //;

帝王切開 暗号
暗号化のためにアルファベットをXNUMX文字以上シフトする方法はさかのぼります
数千年、ガイウスユリウスシーザーによって彼の中で明確に詳述されました ガリック 戦争
文章。 単一のアルファベットシフトは、ローテーションおよびシフト量と呼ばれることもあります
文字列「rot」または「rot$n」の後に数値$nとして指定されます。 Rot0とrot26は
ラテンアルファベットの26文字の英語版の恒等写像。 Rot13には
後続の呼び出しを交互に行う興味深いプロパティは、アイデンティティマップです(したがって、rot13
26のアルファベット回転のグループにおけるそれ自身の自明でない逆です)。 従って
以下は、ASCIIおよびEBCDICプラットフォームで動作するrot13エンコーダーおよびデコーダーです。

#!/ usr / local / bin / perl

while(<>){
tr / n-za-mN-ZA-M / a-zA-Z /;
印刷;
}

ワンライナー形式:

perl -ne'tr / n-za-mN-ZA-M / a-zA-Z /; print'

ハッシング 注文   チェックサム


Perlは、ASCIIとEBCDICの両方で、セキュリティの目的で意図的にハッシュ順序をランダム化します。
プラットフォーム。

EBCDICチェックサムは、ASCIIに変換された同じファイルとその逆で異なります。

I18N そして L10N


国際化(I18N)とローカリゼーション(L10N)は、少なくとも原則としてサポートされています
EBCDICプラットフォームでも。 詳細はシステムに依存し、「OS
以下の「問題」セクション。

マルチオクテット キャラクター セット


Perlは、マルチバイトエンコーディングであるUTF-EBCDICで動作します。 v5.22より前のPerlでは、
この点でさまざまなバグがあります。

レガシーマルチバイトEBCDICコードページXXX。

OS 問題


EBCDICPerlプログラマーにとって懸念されるシステム依存の問題がいくつかあるかもしれません。

OS / 400
PASE PASE環境は、実行可能ファイルを実行できるOS/400のランタイム環境です。
OS/400のPowerPCAIX用に構築されています。 perlos400を参照してください。 PASEはASCIIベースであり、EBCDICではありません-
ILEに基づいています。

IFSアクセス
XXX

OS / 390、 z / OS
PerlはUnixSystemsServicesまたはUSSで動作します。

「シグアクション」
「SA_SIGINFO」にはセグメンテーション違反が発生する可能性があります。

「chcp」 chcp コードページを表示および変更するためのシェルユーティリティとしてサポートされています。
参照 chcpとします。

データセットアクセス
シーケンシャルデータセットアクセスの場合は、次を試してください。

my @ds_records = `cat // DSNAME`;

または:

my @ds_records = `cat //'HLQ.DSNAME'`;

CPANのOS390::Stdioモジュールも参照してください。

「iconv」 iconv シェルユーティリティとCRTLルーチンの両方としてサポートされています。 も参照してください
iconv(1)と iconv(3)マニュアルページ。

ロケールロケールがサポートされています。 ロケールが別のEBCDICコードである場合、グリッチが発生する可能性があります
他の位置にいくつかのコードページバリアント文字があるページ。

一部のロケール名はありますが、現在、実際のUTF-8ロケールはありません。
文字列「UTF-8」が含まれます。

ロケールについては、perllocaleを参照してください。 L10Nファイルは / usr / nls / locale.
$ Config {d_setlocale}は、OS/390またはz/OSでは「define」です。

POSIX-BC?
XXX

onworks.netサービスを使用してperlebcdicをオンラインで使用する


無料のサーバーとワークステーション

Windows と Linux のアプリをダウンロード

Linuxコマンド

Ad




×
Advertisement
❤️ここでショッピング、予約、購入してください。料金はかかりません。これにより、サービスが無料で維持されます。