İngilizceFransızcaİspanyolca

OnWorks favicon'u

perlebcdic - Bulutta Çevrimiçi

Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü üzerinden OnWorks ücretsiz barındırma sağlayıcısında perlebcdic'i çalıştırın

Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen perlebcdic komutudur.

Program:

ADI


perlebcdic - Perl'ün EBCDIC platformlarında çalıştırılmasıyla ilgili hususlar

TANIM


EBCDIC tabanlı bilgisayarlarda Perl programcılarının karşılaştığı bazı sorunların incelenmesi.

Bu belgenin halen tamamlanmamış kısımları XXX ile işaretlenmiştir.

İlk Perl sürümleri bazı EBCDIC makinelerinde çalışıyordu ancak bilinen son sürüm EBCDIC makinelerinde çalışıyordu.
EBCDIC, Perl çekirdeğinin yeniden z/OS üzerinde çalıştığı v5.8.7'ye kadar v5.22 idi. Teorik olarak
OS/400 veya Siemens'in BS2000'i (veya onların halefleri) üzerinde çalışabilir, ancak bu test edilmemiştir. İçinde
v5.22, CPAN'da bulunmayan ancak çekirdek Perl ile birlikte gönderilen tüm modüller z/OS üzerinde çalışır.

Perl'ü z/OS olmayan EBCDIC makinede kullanmak istiyorsanız lütfen posta göndererek bize bildirin.
için [e-posta korumalı]

Perl'ü EBCDIC platformunda yazmak aslında "ASCII" platformunda yazmaktan farklı değil,
ama birazdan göreceğimiz gibi temel sayıları farklı. Bilmen gerekecek
Bu "ASCII" platformlarıyla ilgili bir şeyler var çünkü belgeler taraflı ve
EBCDIC için geçerli olmayan örnek numaraları sıklıkla kullanın. Ayrıca çok az sayıda CPAN var
EBCDIC için yazılmış ve ASCII'de çalışmayan modüller; bunun yerine geniş
CPAN modüllerinin çoğunluğu ASCII için yazılmıştır ve bazıları EBCDIC üzerinde çalışabilir,
birkaçı ise her ikisinde de taşınabilir şekilde çalışacak şekilde tasarlanmıştır.

Kodunuz yalnızca 52 AZ ve az harfinin yanı sıra BOŞLUK, 0-9 arasındaki rakamları ve
Perl'ün kullandığı noktalama işaretleri ve kaçış ile gösterilen birkaç kontrol
"\n" ve "\t" gibi diziler varsa Perl'ü ve kodunuzu kullanmanın özel bir yanı yoktur
bir ASCII makinesinde değişiklik yapmadan çok iyi çalışabilir.

Ancak, TAB anlamında "\005" veya "A" veya "\xDF" anlamında "\xC1" kullanan bir kod yazarsanız
"evet" anlamına geliyorsa (iki noktalı küçük "y"), o zaman kodunuz EBCDIC'nizde iyi çalışabilir
platformda, ancak ASCII'de değil. Eğer hiç kimse senin işini yürütmek istemeyecekse, bunu yapmak sorun değil.
ASCII platformunda kod; ancak bu belgedeki önyargı, taşınabilir kod yazmada olacaktır
EBCDIC ve ASCII sistemleri arasında. Yine önemsediğiniz her karakter kolayca
klavyenizden girilebildiğinden, ASCII hakkında hiçbir şey bilmenize gerek yoktur, ancak çoğu
klavyeler örneğin "\xDF" karakterini doğrudan girmenize kolayca izin vermez, bu nedenle
"\xDF" kaçış sırasını kullanarak bunu dolaylı olarak belirtmek için. Bu durumlarda
ASCII/Unicode karakter kümeleri hakkında bir şeyler bilmek en kolay yoldur. Eğer bunu biliyorsan
küçük "ye", "U+00FF" ise, bunun yerine bunu "\N{U+FF}" olarak belirtebilir ve
bilgisayar bunu platformunuzda otomatik olarak "\xDF" biçimine çevirir ve platformda "\xFF" olarak bırakır.
ASCII olanlar. Veya bunu adıyla belirtebilirsiniz, "\N{DİAEREZLİ LATİN KÜÇÜK Y HARFİ" ve
sayıları bilmenize gerek yok. Her iki durumda da işe yarar ancak Unicode'a aşina olmanız gerekir.

ORTAK KARAKTER KOD SETLER


ASCII
Bilgi Değişimi için Amerikan Standart Kodu (ASCII veya US-ASCII), bir dizi
tarafından standartlaştırılmış yorumlara sahip, 0'dan 127'ye (ondalık) kadar uzanan tam sayılar
ASCII kullanan bilgisayarlar. Örneğin 65 "A" harfi anlamına gelir. 0..127 aralığı şu şekilde olabilir:
bitlerin 7 bitlik ikili basamakta ayarlanmasıyla kapsanır, bu nedenle kümeye bazen atıfta bulunulur
"7-bit ASCII" olarak değiştirin. ASCII, Amerikan Ulusal Standartlar Enstitüsü tarafından tanımlanmıştır.
ANSI X3.4-1986 belgesi. Aynı zamanda ISO 646:1991 (yerelleştirme ile) tarafından da tanımlanmıştır.
para birimi simgeleri). Tam ASCII seti aşağıdaki tabloda ilk 128 olarak verilmiştir.
elementler. ASCII'deki karakterlerle yeterince yazılabilen diller şunları içerir:
İngilizce, Hawaii dili, Endonezce, Swahili dili ve bazı Kızılderili dilleri.

EBCDIC olmayan karakter kümelerinin çoğu ASCII'nin üst kümeleridir. 0-127 arası tamsayıların anlamı budur
ASCII'nin ne anlama geldiğini söylüyor. Ancak 128 ve üzeri tamsayılar karakter setine özeldir.

Bunların çoğu, ASCII'yi 8-0 olarak kullanarak tamamen 127 bit'e sığar.
128-255 ortalamadır ve 255'in üzerinde hiçbir şey kullanılmaz. Dolayısıyla bunlar tek bayttır (veya sekizli ise
tercih edersiniz) karakter kümeleri. Önemli olanlardan biri (Unicode'un bir üst kümesi olduğundan)
ISO 8859-1 karakter seti.

ISO 8859
ISO 8859-$n Uluslararası karakter kodu kümelerinin bir koleksiyonudur
Her biri ASCII setine karakterler ekleyen Standardizasyon Örgütü (ISO)
Tipik olarak çeşitli dillerde bulunan ve çoğu Roma kökenli olan veya
Latin alfabesi. Çoğu Avrupa dilleri içindir ama Arapça için de olanlar vardır.
Yunanca, İbranice ve Tayca. Tüm bunlarla ilgili internette güzel referanslar var.

Latince 1 (ISO -8859 1)
Ciddi ve akut vurgulu Latince içeren ASCII'ye özel 8 bitlik bir uzantı
karakterler. ISO 8859-1'i kullanabilen diller, bu standardın kapsadığı tüm dilleri içerir.
ASCII'nin yanı sıra Afrikaans, Arnavutça, Baskça, Katalanca, Danca, Faroe dili, Fince,
Norveççe, Portekizce, İspanyolca ve İsveççe. Hollandaca ij olmadan da kapsanmaktadır
bağ. Fransızca da kapsanmaktadır ancak oe bağı olmadan. Almanca ISO 8859-1'i kullanabilir
ancak bunu Alman tarzı tırnak işaretleri olmadan yapmalısınız. Bu set Batı'ya dayanmaktadır
ASCII'nin Avrupa uzantıları ve dünya çapındaki web çalışmalarında yaygın olarak karşılaşılmaktadır. IBM'de
karakter kodu seti tanımlama terminolojisi, ISO 8859-1 aynı zamanda CCSID 819 olarak da bilinir (veya
bazen 0819, hatta 00819).

EBCDIC
Genişletilmiş İkili Kodlu Ondalık Değişim Kodu, tekli kodların geniş bir koleksiyonunu ifade eder.
ve ASCII ve ISO 8859-1'den oldukça farklı olan çok baytlı kodlanmış karakter kümeleri,
ve hepsi birbirinden biraz farklıdır; genellikle ana bilgisayarlarda çalışırlar.
EBCDIC kodlamaları, Hollerith delikli kart kodlamalarının 8 bitlik bayt uzantılarından türetilir,
ASCII'den çok önce olan. Kartların düzeni yüksek bitlerin ayarlanacağı şekildeydi.
büyük ve küçük alfabetik karakterler "[az]" ve "[AZ]", ancak boşluklar vardı
her Latin alfabesi aralığında, aşağıdaki tabloda görülebilir. Bu boşluklar neden olabilir
komplikasyonları.

Bazı IBM EBCDIC karakter kümeleri, karakter kodu kümesi kimlik numaralarıyla biliniyor olabilir
(CCSID numaraları) veya kod sayfası numaraları.

Perl, yaygın olarak kullanılan üç EBCDIC karakterinden herhangi birini çalıştıran platformlarda derlenebilir
Aşağıda listelenen setler.

The 13 varyant karakterler

IBM EBCDIC karakter kodu kümeleri arasında sıklıkla eşlenen 13 karakter vardır.
farklı tamsayı değerleri. Bu karakterler 13 "varyant" karakter olarak bilinir ve
şunlardır:

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

Perl bir platform için derlendiğinde hangi karakterin hangisi olduğunu tahmin etmek için bu karakterlerin tümüne bakar.
Platformun kullandığı EBCDIC karakter kümesi, kendisini bu platforma göre uyarlar.
Platform Perl'ün bildiği üç karakter kümesinden biri olmayan bir karakter seti kullanıyorsa, Perl
ya derlemeyi başaramayacak ya da yanlışlıkla ve sessizce üçünden birini seçecektir.

EBCDIC kod setleri tanınan by Perl

0037
Karakter kodu seti ID 0037, ASCII artı Latin-1 karakterlerinin (örn. ISO) eşlemesidir.
8859-1) bir EBCDIC setine. 0037, Kuzey Amerika İngilizcesi yerel ayarlarında kullanılmaktadır.
AS/400 bilgisayarlarda çalışan OS/400 işletim sistemi. CCSID 0037, ISO'dan farklıdır
8859 yerde 1-236; yani sadece 20 kod noktası değeri üzerinde anlaşıyorlar.

1047
Karakter kodu seti ID 1047 aynı zamanda ASCII artı Latin-1 karakterlerinin bir eşlemesidir
(yani ISO 8859-1) bir EBCDIC setine. 1047, Unix Sistem Hizmetleri kapsamında aşağıdaki amaçlar için kullanılır:
OS/390 veya z/OS ve VM/ESA için OpenEdition. CCSID 1047, CCSID 0037'den farklıdır
sekiz sırada ve ISO 8859-1'den 236'da.

POSIX-BC
Siemens'in BS2000 sisteminde kullanılan EBCDIC kod sayfası, 1047 ve 0037'den farklıdır.
Aşağıda POSIX-BC seti olarak tanımlanmıştır. 0037 ve 1047 gibi ISO ile aynıdır
8859 kod noktası değerinde 1-20.

Unicode kod noktaları karşı EBCDIC kod noktaları
Unicode terminolojisinde bir kod nokta bir karaktere atanan sayıdır: örneğin
EBCDIC'de "A" karakterine genellikle 193 numarası atanır. Unicode'da karakter,
"A"ya 65 numarası atanmıştır. ASCII ve Latin-1'deki (ISO 8859-1) tüm kod noktaları
Unicode'da aynı anlama gelir. Tanınan EBCDIC kod setlerinin üçü de 256 koda sahiptir
noktaları vardır ve her kod kümesinde 256 kod noktasının tümü eşdeğer Latin1 koduyla eşlenir
puan. Açıkçası, "A", tüm yazdırılabilir öğeler için "A", "B" => "B", "%" => "%" vb. ile eşleşecektir.
Latin1'deki karakterler ve bu kod sayfaları.

Ayrıca EBCDIC'in ASCII/Latin1 C0 için neredeyse kesin eşdeğerlere sahip olduğu ortaya çıktı.
kontroller ve DELETE kontrolü. (C0 kontrolleri ASCII kod noktaları olan kontrollerdir.
0..0x1F; TAB, ACK, BEL vb.) Bu ASCII/EBCDIC arasında bir eşleme kurulur
kontroller. ASCII platformlarında C1 kontrolleri arasında bu kadar kesin bir eşleme yok
ve geri kalan EBCDIC kontrolleri. Yapılan şey çoğunlukla bu kontrollerin haritasını çıkarmaktır.
keyfi olarak, diğer karakter kümesindeki eşleşmeyen bazı karakterlere. Çoğu
bunlar zaten günümüzde EBCDIC'de çok çok nadiren kullanılıyor ve isimleri
fazla şikayet etmeden düştü. Örneğin EO (Sekiz Bir) EBCDIC kontrolü
(sekiz bir bitten oluşan = 0xFF) C1 APC kontrolüne (0x9F) eşlenir ve siz
"EO" adını kullanamazsınız.

EBCDIC kontrolleri üç olası satır sonlandırıcı karakteri sağlar: CR (0x0D), LF
(0x25) ve NL (0x15). ASCII platformlarında "NL" ve "LF" simgeleri aynı anlama gelir
karakterdir, ancak katı EBCDIC terminolojisine göre bunlar farklıdır. EBCDIC NL
"NEL" ("Sonraki Satır"; burada eşlemenin
oldukça mantıklı ve dolayısıyla sadece keyfi değil). Bazı EBCDIC platformlarında bu NL
veya NEL tipik hat sonlandırıcıdır. Bu z/OS ve BS2000 için geçerlidir. Bunların içinden
platformlarda, C derleyicileri LF ve NEL kod noktalarını değiştirecek, böylece "\n" 0x15 olacak ve
NL'yi ifade eder. Perl de bunu yapıyor; aşağıdaki kod grafiğinde görebilirsiniz. Bu yapar
işler genellikle "sadece çalışır", hatta bir takas olduğunun farkında olmanıza bile gerek kalmaz.

Unicode ve UTF
UTF, "Unicode Dönüşüm Formatı" anlamına gelir. UTF-8, Unicode'un bir kodlamasıdır
ASCII ve Latin-8'e dayalı 1 bitlik bayt parçaları dizisi. Bir dizinin uzunluğu
Bir Unicode kod noktasını temsil etmek için gerekli olan kod, o kodun sıra numarasına bağlıdır
Daha büyük sayılar daha fazla bayt gerektirir. UTF-EBCDIC, UTF-8'e benzer, ancak
EBCDIC. Sık sık birbirine benzemeleri yeterli, gündelik kullanım iki terimi birleştirecek ve
"UTF-8"i hem ASCII platformlarında bulunan UTF-8'i, hem de ASCII platformlarında bulunan UTF-EBCDIC'yi kastetmek için kullanın.
EBCDIC olanlar.

"Değişmez" karakter veya kod noktası terimini görebilirsiniz. Bu basitçe şu anlama gelir:
karakter UTF-8'de (veya UTF-XNUMX'de) kodlandığında aynı sayısal değere ve temsile sahiptir.
EBCDIC) olmadığı gibi. (Bunun "13 varyantı" konseptinden çok farklı bir konsept olduğunu unutmayın.
Yukarıda bahsedilen "karakterler". Dikkatli bir düzyazıda "UTF-8 değişmez" terimi yerine "UTF-XNUMX değişmez" terimi kullanılacaktır.
yalnızca "değişmez", ancak çoğu zaman yalnızca "değişmez" ifadesini görürsünüz.) Örneğin, sıra sayısı
Çoğu EBCDIC kod sayfasında "A" değeri 193'tür ve UTF-EBCDIC'de kodlandığında da 193'tür.
Tüm UTF-8 (veya UTF-EBCDIC) değişken kod noktaları, kodlandığında en az iki bayt kaplar
UTF-8 (veya UTF-EBCDIC); tanım gereği UTF-8 (veya UTF-EBCDIC) değişmez kod noktaları
UTF-8 (veya UTF-EBCDIC) olarak kodlanmış olsun veya olmasın tam olarak bir bayt. (Şimdiye kadar nedenini görüyorsunuz
insanlar genellikle "UTF-EBCDIC" anlamına da gelirken yalnızca "UTF-8" derler. Bunun geri kalanı için
belgede bu konuda da çoğunlukla sıradan davranacağız.) ASCII UTF-8'de kod noktaları
en düşük 128 sıra numarasına karşılık gelen (0 - 127: ASCII karakterleri)
değişmez. UTF-EBCDIC'de 160 adet değişmez karakter vardır. (Eğer umursuyorsanız, EBCDIC
değişmezler, ASCII eşdeğerlerine sahip olan karakterlerin yanı sıra bunlara karşılık gelen karakterlerdir.
C1 kontrollerine (ASCII platformlarında 128 - 159).

UTF-EBCDIC'de kodlanmış bir dize, UTF-EBCDIC'de kodlanmış bir dizeden daha uzun olabilir (ancak asla daha kısa olamaz)
UTF-8. Perl, UTF-8'i Unicode maksimum değerinin üzerindeki kod noktalarını kodlayabilecek şekilde genişletir
U+10FFFF. UTF-EBCDIC'yi de genişletir, ancak UTF-'deki doğal sınırlamalar nedeniyle
EBCDIC, ifade edilebilen maksimum kod noktası U+7FFF_FFFF'dir, kelime boyutu daha büyük olsa bile
32 bitten fazla.

UTF-EBCDIC, Unicode Teknik Raporu #16 ile tanımlanır
<http://www.unicode.org/reports/tr16>. CCSID 1047'ye göre tanımlanır, izin verilmez
diğer kod sayfalarındaki farklılıklar için. Bu, metin alışverişinin kolay olmasını sağlar
farklı kod sayfalarını çalıştıran ancak uyarlama yapılmadan kullanılamaz hale getiren bilgisayarlar arasında,
Perl için diğer kod sayfalarında.

Bu kullanılamazlığın nedeni, Perl'ün temel varsayımlarından birinin,
ayrıştırma ve sözcüksel analiz için önemsediği karakterler, aynı olsa da olmasa da aynıdır.
metin UTF-8'dir. Örneğin Perl, "[" karakterinin aynı karaktere sahip olmasını bekler.
gösterimi, onu içeren dizenin (veya program metninin) UTF-8 kodlu olup olmadığı önemli değildir
ya da değil. Bunu sağlamak için Perl, UTF-EBCDIC'yi belirli kod sayfasına uyarlar, böylece tüm
UTF-8'e göre değişmez olmasını beklediği karakterler aslında UTF-8'e göre değişmezdir. Bu şu demek
Perl'ün UTF-EBCDIC sürümünü çalıştıran bir bilgisayarda oluşturulan metnin çevrilmesi gerekir
başka bir bilgisayarı çalıştıran bilgisayar tarafından anlaşılır olması.

kullanma Kodlamak
Perl 5.8'den itibaren EBCDIC'den çeviri yapmak için standart Encode modülünü kullanabilirsiniz.
Latin-1 kod noktaları. Encode, Perl'ün bildiğinden daha fazla EBCDIC karakter kümesini biliyor
şu anda çalışmak üzere derlenmiş durumda.

'from_to' kodlamasını kullanın;

benim %ebcdic = ( 176 => 'cp37', 95 => 'cp1047', 106 => 'posix-bc' );

# $a EBCDIC kod noktalarındadır
from_to($a, $ebcdic{ord '^'}, 'latin1');
# $a, ISO 8859-1 kod noktalarıdır

ve Latin-1 kod noktalarından EBCDIC kod noktalarına

'from_to' kodlamasını kullanın;

benim %ebcdic = ( 176 => 'cp37', 95 => 'cp1047', 106 => 'posix-bc' );

# $a, ISO 8859-1 kod noktalarıdır
from_to($a, 'latin1', $ebcdic{ord '^'});
# $a EBCDIC kod noktalarındadır

G/Ç yapmak için PerlIO'nun otomatik çeviri özelliklerini kullanmanız önerilir, bkz.
perluniintro.

Sürüm 5.8'den beri Perl, PerlIO I/O kütüphanesini kullanıyor. Bu, farklı kullanım olanağı sağlar
IO kanalı başına kodlamalar. Örneğin, kullanabilirsiniz

Encode'u kullanın;
open($f, ">:encoding(ascii)", "test.ascii");
print $f "Merhaba Dünya!\n";
open($f, ">:kodlama(cp37)", "test.ebcdic");
print $f "Merhaba Dünya!\n";
open($f, ">:encoding(latin1)", "test.latin1");
print $f "Merhaba Dünya!\n";
open($f, ">:encoding(utf8)", "test.utf8");
print $f "Merhaba Dünya!\n";

ASCII, CP 0037 EBCDIC, ISO 8859-1'de "Merhaba Dünya!\n" içeren dört dosya almak için
(Latin-1) (bu örnekte yalnızca ASCII karakterler basıldığından ASCII ile aynıdır),
ve UTF-EBCDIC (bu örnekte normal EBCDIC ile aynıdır çünkü yalnızca karakterler
EBCDIC ve UTF-EBCDIC basılmış olanlar arasında fark yoktur). belgelerine bakın
Ayrıntılar için Encode::PerlIO'yu kullanın.

PerlIO katmanı dahili olarak ham IO (bayt) kullandığından, tüm bunlar aşağıdaki gibi şeyleri tamamen göz ardı eder:
dosya sisteminizin türü (ASCII veya EBCDIC).

TEK OCTET TABLOLAR


Aşağıdaki tablolarda alt kümeler de dahil olmak üzere ASCII ve Latin 1 sıralı kümeler listelenmektedir: C0
kontroller (0..31), ASCII grafikleri (32..7e), silme (7f), C1 kontrolleri (80..9f) ve Latin-1
(aka ISO 8859-1) (a0..ff). ASCII'nin Latin 1 uzantılarının tablo adlarında
kabaca karşılık gelen karakter adlarıyla etiketlenmiştir The Unicode Standart, Sürümü
6.1 her durumda "s/LATIN//" ve "s/VULGAR//" gibi ikamelerle de olsa;
"s/BÜYÜK HARF//" bazı durumlarda; ve başka bir dilde "s/KÜÇÜK HARF ([AZ])/\l$1/"
vakalar. Kontroller Unicode 6.2 kısaltmaları kullanılarak listelenir. Farklılıklar
0037 ile 1047 arasındaki kümeler "**" ile işaretlenmiştir. 1047 arasındaki farklar
ve POSIX-BC kümeleri "##" ile işaretlenir. Listelenen tüm "ord()" sayıları ondalıktır. Eğer sen
bu tablonun sekizlik değerleri listelediğini görmeyi ve ardından tabloyu (yani bölmeyi) çalıştırmayı tercih ederim
Bu tarif pod2_other_format ile çalışmayabileceğinden bu belgenin kaynak metni
çeviri) aracılığıyla:

tarif 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 kod noktalarını korumak istiyorsanız komut dosyası biçiminde şunu yazmak isteyebilirsiniz:

tarif 1

açık(FH,"
sırasında ( ) {
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);
}
else {
printf("%s%-5.03o%-5.03o%-5.03o%-5.03o%-5.03o%.03o\n",
$1,$2,$3,$4,$5,$6,$8);
}
}
}

Bu tablonun onaltılık değerleri listelemesini tercih ederseniz, tabloyu şu şekilde çalıştırın:

tarif 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

Veya UTF-x kod noktalarını onaltılık sistemde tutmak için:

tarif 3

açık(FH,"
sırasında ( ) {
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);
}
else {
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 CCSID IX-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 127 127 34 127
# 35 123 123 123 35 123
$36 91 91 91 36 91
% 37 108 108 108 37 108
& 38 80 80 80 38 80
' 39 125 125 125 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 126 126 61 126
> 62 110 110 110 62 110
? 63 111 111 111 63 111
@ 64 124 124 124 64 124
bir 65 193 193 193 65 193
B 66 194 194 194 66 194
Ç 67 195 195 195 67 195
D 68 196 196 196 68 196
E 69 197 197 197 69 197
F70 198 198 198 70 198
71 199 199 199 71 199
H 72 200 200 200 72 200
ben 73 201 201 201 73 201
J 74 209 209 209 74 209
K 75 210 210 210 75 210
76 211 211 211 76 211
E 77 212 212 212 77 212
N 78 213 213 213 78 213
Ç 79 214 214 214 79 214
P 80 215 215 215 80 215
Soru 81 216 216 216 81 216
82 217 217 217 82 217
S 83 226 226 226 83 226
T 84 227 227 227 84 227
U 85 228 228 228 85 228
86 229 229 229 86 229
G 87 230 230 230 87 230
X 88 231 231 231 88 231
E 89 232 232 232 89 232
Z 90 233 233 233 90 233
[ 91 186 173 187 91 173 ** ##
\ 92 224 224 188 92 224 ##
] 93 187 189 189 93 189 **
^ 94 176 95 106 94 95 ** ##
_ 95 109 109 109 95 109
` 96 121 121 74 96 121 ##
97 129 129 129 97 129
98 130 130 130 98 130
99 131 131 131 99 131
d 100 132 132 132 100 132
101 133 133 133 101 133
f 102 134 134 134 102 134
103 135 135 135 103 135
saat 104 136 136 136 104 136
ben 105 137 137 137 105 137
106 145 145 145 106 145
k 107 146 146 146 107 146
l 108 147 147 147 108 147
m 109 148 148 148 109 148
sayı 110 149 149 149 110 149
111 150 150 150 111 150
sayfa 112 151 151 151 112 151
q 113 152 152 152 113 152
114 153 153 153 114 153
115 162 162 162 115 162
116 163 163 163 116 163
sen 117 164 164 164 117 164
v 118 165 165 165 118 165
w 119 166 166 166 119 166
120 167 167 167 120 167
121 168 168 168 121 168
122 169 169 169 122 169
{ 123 192 192 251 123 192 ##
| 124 79 79 79 124 79
} 125 208 208 253 125 208 ##
~ 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 170 194.161 128.66
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 208 194.166 128.71 ##
167 181 181 181 194.167 128.72
168 189 187 121 194.168 128.73 ** ##
169 180 180 180 194.169 128.74
170 154 154 154 194.170 128.81
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 188 161 194.175 128.86 ##
176 144 144 144 194.176 128.87
177 143 143 143 194.177 128.88
178 234 234 234 194.178 128.89
179 250 250 250 194.179 128.98
180 190 190 190 194.180 128.99
181 160 160 160 194.181 128.100
182 182 182 182 194.182 128.101
183 179 179 179 194.183 128.102
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 139 139 194.187 128.106
188 183 183 183 194.188 128.112
189 184 184 184 194.189 128.113
190 185 185 185 194.190 128.114
191 171 171 171 194.191 128.115
192 100 100 100 195.128 138.65
193 101 101 101 195.129 138.66
194 98 98 98 195.130 138.67
195 102 102 102 195.131 138.68
196 99 99 99 195.132 138.69
197 103 103 103 195.133 138.70
198 158 158 158 195.134 138.71
199 104 104 104 195.135 138.72
200 116 116 116 195.136 138.73
201 113 113 113 195.137 138.74
202 114 114 114 195.138 138.81
203 115 115 115 195.139 138.82
204 120 120 120 195.140 138.83
205 117 117 117 195.141 138.84
206 118 118 118 195.142 138.85
207 119 119 119 195.143 138.86
208 172 172 172 195.144 138.87
209 105 105 105 195.145 138.88
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 128 195.152 138.103
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 156 156 195.166 139.71
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 140 195.176 139.87
241 73 73 73 195.177 139.88
242 205 205 205 195.178 139.89
243 206 206 206 195.179 139.98
244 203 203 203 195.180 139.99
245 207 207 207 195.181 139.100
246 204 204 204 195.182 139.101
247 225 225 225 195.183 139.102
248 112 112 112 195.184 139.103
249 221 221 192 195.185 139.104 ##
250 222 222 222 195.186 139.105
251 219 219 219 195.187 139.106
252 220 220 220 195.188 139.112
253 141 141 141 195.189 139.113
254 142 142 142 195.190 139.114
255 223 223 223 195.191 139.115

Yukarıdaki tabloyu ASCII + Latin-0037 yerine CCSID 1 sırasıyla görmeyi tercih ederseniz
sipariş verin ve ardından tabloyu çalıştırın:

tarif 4

Perl \
-ne 'eğer(/.{29}\d{1,3}\s{2,4}\d{1,3}\s{2,4}\d{1,3}\s{2,4}\d{1,3}/)'\
-e '{it(@l,$_)}' \
-e 'END{haritayı yazdır{$_->[0]}' \
-e ' sırala{$a->[1] <=> $b->[1]}' \
-e ' harita{[$_,substr($_,34,3)]}@l;}' perlebcdic.pod

CCSID 1047 sıralamasıyla görmek istiyorsanız son satırdaki 34 sayısını değiştirin.
39'a kadar, şöyle:

tarif 5

Perl \
-ne 'eğer(/.{29}\d{1,3}\s{2,4}\d{1,3}\s{2,4}\d{1,3}\s{2,4}\d{1,3}/)'\
-e '{it(@l,$_)}' \
-e 'END{haritayı yazdır{$_->[0]}' \
-e ' sırala{$a->[1] <=> $b->[1]}' \
-e ' harita{[$_,substr($_,39,3)]}@l;}' perlebcdic.pod

POSIX-BC sıralamasında görmek istiyorsanız son satırdaki 34 sayısını şu şekilde değiştirin:
44, şöyle:

tarif 6

Perl \
-ne 'eğer(/.{29}\d{1,3}\s{2,4}\d{1,3}\s{2,4}\d{1,3}\s{2,4}\d{1,3}/)'\
-e '{it(@l,$_)}' \
-e 'END{haritayı yazdır{$_->[0]}' \
-e ' sırala{$a->[1] <=> $b->[1]}' \
-e ' harita{[$_,substr($_,44,3)]}@l;}' perlebcdic.pod

tablo in altıgen, kriteri in 1047 sipariş
Bu belgenin ilk yazılmasından bu yana, sözleşme giderek daha fazla kullanılır hale geldi
Kod noktaları için onaltılık gösterim. Bunu tariflerle yapmak ve sıralamak da bir
çok adımlı bir süreç, bu yüzden kolaylık olması açısından, yukarıdan tablo şu şekilde yeniden sıralanıyor:
Kod Sayfası 1047 sırası ve onaltılı gösterim kullanımı.

ISO
8859-1 POS-CCSID
CCSID CCSID CCSID IX-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 2B 2B 2B 05 2B
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 3B 3B 3B 15 3B
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 ** ##
- 2B 60 60 60 2B 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
= 3B 7E 7E 7E 3B 7E
" 22 7F 7F 7F 22 7F
D8 80 80 80 C3.98 8A.67
61 81 81 81 61 81
62 82 82 82 62 82
63 83 83 83 63 83
d 64 84 84 84 64 84
65 85 85 85 65 85
f 66 86 86 86 66 86
67 87 87 87 67 87
saat 68 88 88 88 68 88
ben 69 89 89 89 69 89
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
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
sayfa 70 97 97 97 70 97
q 71 98 98 98 71 98
72 99 99 99 72 99
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 ##
s 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
x 78 A7 A7 A7 78 A7
y 79 A8 A8 A8 79 A8
z 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 OL OL C2.B4 80.63
D7 BF BF BF C3.97 8A.66
{ 7B C0 C0 FB 7B C0 ##
A 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
ben 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
M 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
S 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
T 54 E3 E3 E3 54 E3
U 55 E4 E4 E4 55 E4
V 56 E5 E5 E5 56 E5
G 57 E6 E6 E6 57 E6
X 58 E7 E7 E7 58 E7
E 59 E8 E8 E8 59 E8
Z 5A E9 E9 E9 5A E9
B2 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 ##

TANIMLAMA KARAKTER KOD SETLER


Hangi karakter seti altında işlem yaptığınızı tespit etmeniz mümkündür. Ama önce sen
bunu yapmanız gerektiğinden gerçekten emin olmanız gerekir. Kodunuz daha basit olacak ve muhtemelen
karakter setini test etmeniz ve farklı şeyler yapmanız gerekmiyorsa aynı derecede taşınabilir,
bağlı olarak. Aslında yazmanın kolay olmadığı çok az durum vardır
tüm karakter kümelerine taşınabilir düz çizgi kodu. Bkz. "Unicode ve EBCDIC"
karakterlerin taşınabilir şekilde nasıl belirleneceği hakkında perluniintro.

Ancak hangi karakter setini çalıştırdığınızı bilmek isteyebileceğiniz bazı durumlar vardır.
altında. Olası bir örnek, performansın önemli olduğu iç döngülerde sıralama yapmaktır.
Kritik.

ASCII veya EBCDIC altında mı çalıştığınızı belirlemek için dönüş değerini kullanabilirsiniz.
Bir veya daha fazla karakter değerini test etmek için "ord()" veya "chr()". Örneğin:

$is_ascii = "A" eşdeğeri chr(65);
$is_ebcdic = "A" eşdeğeri chr(193);
$is_ascii = ord("A") == 65;
$is_ebcdic = ord("A") == 193;

EBCDIC kod sayfaları arasında ayrım yapmaya daha da az ihtiyaç vardır, ancak bunu yapmak için sayfalara bakmayı deneyin.
aralarında farklılık gösteren bir veya daha fazla karakterde.

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

Ancak aşağıdaki gibi testler yazmak akıllıca olmaz:

$is_ascii = "\r" ne chr(13); # YANLIŞ
$is_ascii = "\n" ne chr(10); # TAVSİYE EDİLMEYECEK

Açıkçası bunlardan ilki çoğu ASCII platformunu ikisinden de ayırt etmekte başarısız olacaktır.
""\r" eq'den beri CCSID 0037, 1047 veya POSIX-BC EBCDIC platformu chr(13)" hepsinin altında
bu kodlanmış karakter kümeleri. Ancak şunu da unutmayın, çünkü "\n" "chr(13)" ve "\r"
"chr(10)" eski Macintosh'ta (ASCII platformudur) ikinci $is_ascii testi
orada sıkıntıya neden olur.

Perl'in EBCDIC kod sayfası altında oluşturulup oluşturulmadığını belirlemek için
Yapılandırma modülü şöyle:

Config'i kullanın;
$is_ebcdic = $Config{'ebcdic'} eq 'tanımla';

DÖNÜŞÜMLER


"utf8::unicode_to_native()" ve "utf8::native_to_unicode()"
Bu işlevler, bir kodlamada bir giriş sayısal kod noktası alır ve değerini döndürür.
eşdeğer değer diğerindedir.

Utf8'e bakın.

tr///
Bir karakter dizisini bir karakter kümesinden diğerine dönüştürmek için basit bir liste
Perl'ün "tr///" karakteriyle birlikte yukarıdaki tablonun sağ sütunlarında olduğu gibi sayıların sayısı
gereken tek şey operatördür. Tablodaki veriler ASCII/Latin1 sırasına göredir, dolayısıyla
EBCDIC sütunları, aynı zamanda kullanımı kolay ASCII/Latin1'den EBCDIC'ye işlemler sağlar.
kolayca tersine çevrilir.

Örneğin, ASCII/Latin1'i kod sayfası 037'ye dönüştürmek için ikincinin çıktısını alın.
tarif 2'nin çıktısındaki sayılar sütunu ("\" karakterleri eklenecek şekilde değiştirildi) ve onu
"tr///" şu şekilde:

$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';

benim $ebcdic_string = $ascii_string;
eval '$ebcdic_string =~ tr/\000-\377/' . $cp_037 . '/';

EBCDIC 037'den ASCII'ye dönüştürmek için tr/// argümanlarının sırasını şu şekilde tersine çevirmeniz yeterlidir:

benim $ascii_string = $ebcdic_string;
eval '$ascii_string =~ tr/' . $cp_037 . '/\000-\377/';

Benzer şekilde tarif 2'den üçüncü sayılar sütununun çıktısı alınarak bir sonuç elde edilebilir.
$cp_1047 tablosu. Tarif 2'den elde edilen çıktının dördüncü sayı sütunu,
$cp_posix_bc tablosu kod dönüştürmeye de uygundur.

Ters tabloları görmek istiyorsanız öncelikle istediğiniz tabloya göre sıralama yapmanız gerekir.
sayılar sütununu tarif 4, 5 veya 6'daki gibi seçin, ardından ilk sayılar sütununun çıktısını alın.

iconv
XPG'nin çalıştırılabilirliği genellikle bir iconv kabuktan kullanılabilen yardımcı program veya
C kütüphanesinden. iconv hakkında bilgi için sisteminizin belgelerine bakın.

OS/390 veya z/OS'ta bkz. iconv(1) kılavuz sayfası. "iconv" kabuk yardımcı programını çağırmanın bir yolu
perl içinden şöyle olacaktır:

# OS/390 veya z/OS örneği
$ascii_data = `echo '$ebcdic_data'| iconv -f IBM-1047 -t ISO8859-1`

veya ters harita:

# OS/390 veya z/OS örneği
$ebcdic_data = `echo '$ascii_data'| iconv -f ISO8859-1 -t IBM-1047`

Diğer Perl tabanlı dönüştürme seçenekleri için CPAN'daki "Convert::*" modüllerine bakın.

C RTL
OS/390 ve z/OS C çalışma zamanı kitaplıkları "_atoe()" ve "_etoa()" işlevlerini sağlar.

OPERATÖR FARKLILIKLARI


".." aralığı operatörü, EBCDIC platformlarında belirli karakter aralıklarına özenle davranır.
Örneğin aşağıdaki dizi bir EBCDIC platformunda yirmi altı öğeye sahip olacaktır.
veya bir ASCII platformu:

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

& ^ | gibi bitsel operatörler dize üzerinde çalışırken farklı sonuçlar verebilir
veya EBCDIC platformunda çalışan bir Perl programındaki karakter verileri, bir EBCDIC platformunda çalıştırıldığında olduğundan daha fazladır.
ASCII platformu. İşte perlop'takinden uyarlanmış bir örnek:

# EBCDIC tabanlı örnekler
"jp \n" ^ " ah" yazdır; # "JAPH\n" yazdırır
"JA" yazdır | " ph\n"; # "japh\n" yazdırır
print "JAPH\nÖnemsiz" & "\277\277\277\277\277"; # "japh\n" yazdırır;
'p N$' yazdır ^ " E

ASCII tablosundaki 32 C0 kontrol karakterinin ilginç bir özelliği,
"kelimenin tam anlamıyla" Perl'de kontrol karakterleri olarak oluşturulabilir, örneğin "(chr(0)" eq "\c@")>
"(chr(1)" eq "\cA")>, vb. EBCDIC platformlarındaki Perl, "\c@" alacak şekilde taşınmıştır.
için chr(0) ve "\cA" chr(1), vb. de kullanılabilir, ancak sonuçta ortaya çıkan karakterler şunlara bağlıdır:
hangi kod sayfasını kullandığınız. Aşağıdaki tabloda standart kısaltmalar kullanılmaktadır.
kontroller. POSIX-BC ve 1047 setleri bu aralıkta aynıdır ve
0037 yalnızca bir noktaya (21 ondalık) ayarlanır. Satır sonlandırıcı karakterinin
ASCII platformlarında "\cJ" tarafından, 1047 veya POSIX-BC platformlarında ise "\cU" tarafından oluşturulabilir ve
"\c.letter" olarak oluşturulamaz. 0037 platformlarında kontrol karakteri. Şunu da unutmayın
"\c\", sonlandırıcıyı emeceği için bir dize veya normal ifadedeki son öğe olamaz.
Ama "\c\X" ile birleştirilmiş bir "DOSYA AYIRICI"dır X tümü için X. Aykırı değer "\c?" Açık
C0 olmayan bir kontrol "DEL" veren ASCII, EBCDIC üzerinde aykırı kontrol "APC"yi verir,
bitişik kontroller bloğunda olmayan. Dikkat edin bunda bir incelik var
bu "\c?" ASCII platformlarında bir ASCII karakteridir ancak herhangi bir karaktere eşdeğer değildir.
EBCDIC platformlarında ASCII karakteri.

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 X X X
\c] 29
\c^ 30
\c_ 31
\C? *

"*" Not: "\c?" ASCII platformlarında sıra 127 ("DEL") ile eşleşir, ancak sıra 127 bir olduğundan
EBCDIC makinelerinde bir kontrol karakteri değil, "\c?" bunun yerine onları "APC" ile eşleştirin;
255 ve 0037'de 1047 ve POSIX-BC'de 95.

FONKSİYONU FARKLILIKLARI


İstenilen karakteri elde etmek için "chr()" "chr()"ye bir EBCDIC kod numarası argümanı verilmelidir
EBCDIC platformunda dönüş değeri. Örneğin:

$CAPITAL_LETTER_A = chr(193);

UTF-EBCDIC'de temsil edilebilen en büyük kod noktası U+7FFF_FFFF'dir. Eğer sen
Daha büyük bir değerde "chr()" işlemi yaparsanız çalışma zamanı hatası (0'a bölmeye benzer) meydana gelir
olur.

"ord()" "ord()", bir EBCDIC platformunda EBCDIC kod numarası değerlerini döndürecektir. Örneğin:

$the_number_193 = ord("A");

"ambalaj()"
"Pack()" için "c" ve "C" şablonları karakter seti kodlamasına bağlıdır.
EBCDIC'deki kullanım örnekleri şunları içerir:

$foo = paket("CCCC",193,194,195,196);
# $foo eq "ABCD"
$foo = paket("C4",193,194,195,196);
# aynı şey

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

"U" şablonu tüm platformlarda "Unicode" anlamına gelecek şekilde taşındı, böylece

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

tüm platformlarda doğrudur. Düşük 256 için yerel kod noktaları istiyorsanız,
"W" şablonu. Bu, eşdeğerliklerin olduğu anlamına gelir

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

tutacak.

UTF-EBCDIC'de temsil edilebilen en büyük kod noktası U+7FFF_FFFF'dir. Eğer sen
Bir karaktere daha büyük bir değer sığdırmaya çalışın, çalışma zamanı hatası (bölmeye benzer)
0) gerçekleşecek.

"Yazdır()"
Aşağıdakileri içeren yazdırmaya iletilen skalerlere ve dizelere dikkat edilmelidir:
ASCII kodlamaları. Bunun meydana gelebileceği ortak yerlerden biri MIME çıktısıdır.
CGI komut dosyası yazımı için başlık yazın. Örneğin birçok Perl programlama kılavuzu
şuna benzer bir şey öner:

print "İçerik türü:\ttext/html\015\012\015\012";
# EBCDIC'de bu yanlış olabilir

Bunun yerine yazabilirsiniz

print "İçerik türü:\ttext/html\r\n\r\n"; # DGW ve diğerleri için tamam

ve taşınabilir şekilde çalışmasını sağlayın.

Bunun nedeni EBCDIC'den ASCII'ye çevirinin web sunucusu tarafından yapılmasıdır.
bu durum. Daha fazla ayrıntı için web sunucunuzun belgelerine bakın.

"baskı()"
Karakterleri sayılara ve tam tersini dönüştürebilen formatlar
EBCDIC platformunda yürütüldüğünde ASCII benzerlerinden farklıdır.
Örnekler şunları içerir:

printf("%c%c%c",193,194,195); # ABC'yi yazdırır

"düzenlemek()"
EBCDIC sıralama sonuçları, özellikle karışık durum için ASCII sıralama sonuçlarından farklı olabilir
Teller. Bu, aşağıda daha ayrıntılı olarak ele alınmıştır.

"sprintf()"
Yukarıdaki "printf()" tartışmasına bakın. Sprintf kullanımına bir örnek
be:

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

"paketten çıkar()"
Yukarıdaki "pack()" tartışmasına bakın.

Unicode'da bir şeyler belirterek bunlar için taşınabilir kod yazmanın mümkün olduğunu unutmayın.
sayılar ve bir dönüştürme işlevi kullanma:

printf("%c",utf8::unicode_to_native(65)); # hepsinde A yazıyor
# platform
print utf8::native_to_unicode(ord("A")); # Aynı şekilde 65 yazdırır

Perluniintro'da "Unicode ve EBCDIC" ve diğer seçenekler için "DÖNÜŞÜMLER" konusuna bakın.

DÜZENLİ İFADE FARKLILIKLARI


Normal ifadelerinizi tıpkı ASCII platformundaki birinin yapacağı gibi yazabilirsiniz.
Ancak belirli bir kod noktasını belirtmek için sekizlik veya onaltılık gösterim kullanmanın,
size EBCDIC kod sayfasının yerel olarak eşlediği karakteri verir. (Bu da doğrudur
(tüm çift tırnaklı dizelerin tümü.) Taşınabilir bir şekilde yazmak istiyorsanız, yalnızca "\N{U+...}" kullanın
"\x{...}" kullanmış olacağınız her yerde notasyon kullanın ve sekizlik notasyonu kullanmayın.
herşey.

Perl v5.22'den itibaren bu durum köşeli parantez içindeki karakter sınıflarındaki aralıklar için geçerlidir. Eğer sen
örneğin "qr/[\N{U+20}-\N{U+7F}]/", "\N{U+20}" karakterleri anlamına gelir,
"\N{U+21}", ..., "\N{U+7F}". Bu aralık ASCII'nin yazdırabileceği tüm yazdırılabilir karakterlerdir.
karakter seti içerir.

V5.22'den önce, (Perl v5.5.3'ten itibaren) dışında herhangi bir aralığı taşınabilir olarak belirtemiyordunuz.
"[AZ]" ve "[az]" aralıklarının tüm alt kümeleri, boşluğu kapatmayacak şekilde özel olarak kodlanmıştır
karakterler. Örneğin, "o" ("o İLE CIRCUMFLEX") gibi karakterler arasında yer alır.
"I" ve "J", "/[HK]/" normal ifade aralığıyla eşleşmez. Ama eğer ya
Aralık bitiş noktalarının yüzdesi açıkça sayısaldır (ve ikisi de "\N{U+...}" ile belirtilmez),
boşluk karakterleri eşleştirilir:

/[\x89-\x91]/

"\x8" "i" ve "\x89 " "j" ve "\x91e" bir boşluk olsa bile "\x8e" ile eşleşecektir
Alfabetik açıdan karakter.

Dikkatli olunması gereken başka bir yapı da hex'in uygunsuz kullanımıdır (kullanmadığınız sürece)
"\N{U+...}") veya normal ifadelerde sekizlik sabitler. Aşağıdaki kümeyi göz önünde bulundurun
altlar:

alt is_c0 {
benim $char = substr(shift,0,1);
$karakter =~ /[\000-\037]/;
}

alt is_print_ascii {
benim $char = substr(shift,0,1);
$karakter =~ /[\040-\176]/;
}

alt is_delete {
benim $char = substr(shift,0,1);
$char eq "\177";
}

alt is_c1 {
benim $char = substr(shift,0,1);
$karakter =~ /[\200-\237]/;
}

sub is_latin_1 { # Ama ASCII değil; C1 değil
benim $char = substr(shift,0,1);
$karakter =~ /[\240-\377]/;
}

Bunlar yalnızca ASCII platformlarında geçerlidir. Perl v5.22'den başlayarak, yalnızca
sekizlik sabitlerin eşdeğer "\N{U+...}" değerlerine dönüştürülmesi onları taşınabilir kılar:

alt is_c0 {
benim $char = substr(shift,0,1);
$char =~ /[\N{U+00}-\N{U+1F}]/;
}

alt is_print_ascii {
benim $char = substr(shift,0,1);
$char =~ /[\N{U+20}-\N{U+7E}]/;
}

alt is_delete {
benim $char = substr(shift,0,1);
$char eq "\N{U+7F}";
}

alt is_c1 {
benim $char = substr(shift,0,1);
$char =~ /[\N{U+80}-\N{U+9F}]/;
}

sub is_latin_1 { # Ama ASCII değil; C1 değil
benim $char = substr(shift,0,1);
$char =~ /[\N{U+A0}-\N{U+FF}]/;
}

Bunları yazmanın bazı alternatif taşınabilir yolları şunlardır:

alt Is_c0 {
benim $char = substr(shift,0,1);
return $char =~ /[[:cntrl:]]/a && ! Is_delete($karakter);

# Alternatif olarak:
# return $char =~ /[[:cntrl:]]/
# && $karakter =~ /[[:ascii:]]/
# && ! Is_delete($karakter);
}

sub Is_print_ascii {
benim $char = substr(shift,0,1);

return $char =~ /[[:print:]]/a;

# Alternatif olarak:
# return $char =~ /[[:print:]]/ && $char =~ /[[:ascii:]]/;

# Veya
# $char'ı döndür
# =~ /[ !"\#\$%&'()*+,\-.\/0-9:;<=>?\@AZ[\\\]^_`az{|}~] /;
}

alt Is_delete {
benim $char = substr(shift,0,1);
return utf8::native_to_unicode(ord $char) == 0x7F;
}

alt Is_c1 {
'unicode_strings' özelliğini kullanın;
benim $char = substr(shift,0,1);
return $char =~ /[[:cntrl:]]/ && $char !~ /[[:ascii:]]/;
}

sub Is_latin_1 { # Ama ASCII değil; C1 değil
'unicode_strings' özelliğini kullanın;
benim $char = substr(shift,0,1);
dönüş ord($char) < 256
&& $karakter !~ /[[:ascii:]]/
&& $karakter !~ /[[:cntrl:]]/;
}

"Is_latin_1()" yazmanın başka bir yolu da aralıktaki karakterleri kullanmak olacaktır.
açıkça:

sub Is_latin_1 {
benim $char = substr(shift,0,1);
$karakter =~ /[ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXAAAA~AeAaAECEEEEEeIIIIe]
[‐N~OOOO~OeXOUUUUeYPssaaaa~aeaaaeceeeiiiie`n~oooo~oeXouuuueypye]/x;
}

Her ne kadar bu form ağ geçişinde sorunla karşılaşabilse de (8 bitlik
karakterler) veya ISO-Latin olmayan karakter kümelerinde. Ancak "Is_c1"in yeniden yazılmasına izin veriyor
dolayısıyla 'unicode_strings' içermeyen Perl'lerde çalışır (v5.14'ten önceki sürümler):

sub Is_latin_1 { # Ama ASCII değil; C1 değil
benim $char = substr(shift,0,1);
dönüş ord($char) < 256
&& $karakter !~ /[[:ascii:]]/
&& ! Is_latin1($karakter);
}

SOKETLER


Çoğu soket programlaması, ağ bayt sırasına göre ASCII karakter kodlamalarını varsayar.
İstisnalar, sunucunun kullanabileceği bir ana web sunucusu altında CGI komut dosyası yazmayı içerebilir.
sizin için çeviriyle ilgilenin. Çoğu ana web sunucusu EBCDIC verilerini ISO-8859-1'e dönüştürür
veya çıktıda Unicode.

SIRALAMA


ASCII tabanlı karakter kümeleri ile EBCDIC olanlar arasındaki büyük farklardan biri görecelidir.
yerel sıraya göre sıralandığında karakterlerin konumları. En çok endişe duyulanlar üst düzey
ve küçük harfler, rakamlar ve alt çizgi ("_"). ASCII platformlarında
yerel sıralama düzeninde rakamlar, harflerden önce gelen büyük harflerden önce gelir
Küçük harflerden önce gelen alt çizgi. EBCDIC'de alt çizgi gelir
önce küçük harfler, sonra büyük harfler ve son olarak da rakamlar. Eğer
ASCII tabanlı bir platformda sıralandığında, hekimin iki harfli kısaltması geliyor
Drive'ın iki harfli kısaltmasından önce; yani:

@sorted = sort(qw(Dr.dr.)); # @sorted ASCII'de ('Dr.','dr.') tutar,
# ama ('dr.','Dr.') EBCDIC'de

EBCDIC'de büyük harflerden önce küçük harf özelliği Latince'ye bile taşınmıştır.
1 EBCDIC sayfası, örneğin 0037 ve 1047. Bunun bir örneği "Ee" ("DIAEREZİSLİ E",
203), bir ASCII platformunda "ee" ("e İLE DIAERESIS", 235)'ten önce gelir, ancak ikincisi (83)
EBCDIC platformunda öncekinden (115) önce gelir. (Akıllı okuyucular şunu fark edeceklerdir:
"ss"nin büyük harfli versiyonu "KÜÇÜK HARF SHARP S" basitçe "SS"dir ve büyük harf
"ye" (küçük "y İLE DİYAEREZ") ve "X" ("MİKRO İŞARETİ") versiyonları 0..255'te değildir
aralıktadır ancak Unicode'dadır, Unicode'un etkin olduğu bir Perl'dedir).

Sıralama düzeni, ASCII platformlarında elde edilen sonuçlarla elde edilen sonuçlar arasında farklılıklara neden olacaktır.
EBCDIC platformları. Aşağıda bunlarla nasıl başa çıkılacağına dair bazı öneriler yer almaktadır.
farklılıklar.

aldırmamak ASCII vs EBCDIC tür farklılıklar.
Bu, hesaplama açısından en az maliyetli stratejidir. Biraz kullanıcı eğitimi gerektirebilir.

kullanım a tür yardımcı işlev
Bu tamamen geneldir ancak hesaplama açısından en pahalı stratejidir. Birini seç
veya diğer karakter kümesini kullanın ve her sıralama karşılaştırması için buna dönüştürün. İşte bir
ASCII sıralama düzenine dönüşen tam örnek:

sub native_to_uni($) {
benim $dizgem = vardiya;

# ASCII platformunda zaman kazandırır
ord 'A' == 65 ise $string'i döndürün;

benim $çıktım = "";
benim için $i (0 .. uzunluk($dize) - 1) {
$ çıktı
.= chr(utf8::native_to_unicode(ord(substr($string, $i, 1)))));
}

# İhtiyaç duymasa bile girişin utf8ness'ini çıkışta koruyun
#utf8 olmak
utf8::upgrade($output) if utf8::is_utf8($string);

$çıktıyı döndür;
}

sub ascii_order { # Sıralama yardımcısı
return native_to_uni($a) cmp native_to_uni($b);
}

sort ascii_order @list;

MONO OLGU sonra tür veri (için rakamsız, alt çizgisiz)
Rakamların ve alt çizginin nereye sıralandığını umursamıyorsanız, şöyle bir şey yapabilirsiniz:
Re-Tweet

sub case_in sensitive_order { # Sıralama yardımcısı
dönüş lc($a) cmp lc($b)
}

sort büyük/küçük harfe duyarlı_düzen @list;

Performans bir sorunsa ve çıktının aynı durumda olup olmadığı umurunda değilse
girişi, Verilerde en çok kullanılan duruma dönüştürmek için "tr///" kullanın. Eğer veriler
öncelikle Latin1 olmayan BÜYÜK HARF'tir, ardından "tr/[az]/[AZ]/" uygulayın ve ardından "sort()" uygulayın. Eğer
veriler öncelikle Latin1 olmayan küçük harflerden oluşur ve sıralamadan önce "tr/[AZ]/[az]/" uygulanır.
Veriler öncelikle BÜYÜK HARF ise ve Latin-1 karakterleri içeriyorsa aşağıdakileri uygulayın:

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

sonra "sırala()". Eğer seçeneğiniz varsa, bazı şeyleri küçük harfle yazmak daha iyidir
Büyük harfi Latin-1'in dışında olan iki Latin-1 karakterinin sorunları: "ye" (küçük "y)
DİYAEREZ İLE") ve "X" ("MİKRO İŞARETİ"). Büyük harfle yazmanız gerekiyorsa;
Unicode özellikli Perl, şunları yapın:

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

Yapmak sınıflandırma on bir tip of platform bir tek.
Bu strateji bir ağ bağlantısı kullanabilir. Bu şekilde hesaplamalı olacaktır
pahalı.

DÖNÜŞÜM BİÇİMLER


Verileri karakter içi set eşlemeyle dönüştürmenin çeşitli yolları vardır.
çeşitli amaçlara hizmet eder. Sıralama önceki bölümde tartışılmıştı ve birkaçı
diğer daha popüler haritalama teknikleri bundan sonra tartışılacaktır.

URL şifre çözme ve kodlama
Bu sorunu aşmak amacıyla bazı URL'lerin onaltılık ASCII kod noktalarına sahip olduğunu unutmayın.
karakter veya protokol sınırlama sorunları. Örneğin tilde karakteri her
klavye dolayısıyla formun bir URL'si:

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

ayrıca aşağıdakilerden biri olarak da ifade edilebilir:

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

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

burada 7E, "~" için onaltılık ASCII kod noktasıdır. İşte böyle bir kodu çözme örneği
herhangi bir EBCDIC kod sayfasındaki bir URL:

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

Tersine, burada böyle bir URL'yi herhangi bir EBCDIC'de kodlama görevi için kısmi bir çözüm var.
kod sayfası:

$ url = 'http://www.pvhp.com/~pvhp/';
# Aşağıdaki düzenli ifade,
# eşlemeler: ('.' => '%2E', '/' => '%2F', ':' => '%3A')
$url =~ s/([\t "#%&\(\),;<=>\?\@\[\\\]^`{|}~])/
sprintf("%%%02X",utf8::native_to_unicode(ord($1))/xge;

burada daha eksiksiz bir çözüm URL'yi bileşenlere böler ve tam bir s/// uygular
yalnızca uygun parçalarla değiştirin.

uu kodlama ve şifre çözme
"pack()" veya "unpack()" için "u" şablonu, EBCDIC verilerini EBCDIC karakterlerinde oluşturacaktır
ASCII muadillerine eşdeğerdir. Örneğin, aşağıdaki çıktı "Evet
gerçekten\n" bir ASCII veya EBCDIC bilgisayarda:

$all_byte_chrs = '';
for (0..255) { $all_byte_chrs .= chr($_); }
$uuencode_byte_chrs = paket('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``
ENDOFHEREDOK
if ($uuencode_byte_chrs eq $uu) {
"Evet" yazdırın;
}
$uudecode_byte_chrs = paketi aç('u', $uuencode_byte_chrs);
if ($uudecode_byte_chrs eq $all_byte_chrs) {
"gerçekten\n" yazdır;
}

İşte EBCDIC üzerinde çalışacak çok basit bir uudecoder:

#! / usr / local / bin / perl
$_ = <> Until ($mode,$file) = /^begin\s*(\d*)\s*(\S*)/;
open(OUT, "> $dosya") if $dosya ne "";
while(<>) {
son if /^end/;
sonraki if /[az]/;
sonraki sürece int((((utf8::native_to_unicode(ord()) - 32 ) & 077)
+ 2) / 3)
== int(uzunluk() / 4);
print OUT paketten çıkar("u", $_);
}
kapat(ÇIKIŞ);
chmod ekim($mod), $dosya;

Alıntılı-Yazdırılabilir kodlama ve şifre çözme
ASCII kodlu platformlarda karakterleri yazdırılabilir kümenin dışına çıkarmak mümkündür
kullanarak:

# Bu QP kodlayıcı yalnızca ASCII'de çalışır
$qp_string =~ s/([=\x00-\x1F\x80-\xFF])/
sprintf("=%02X",ord($1))/xge;

Perl v5.22'den başlayarak, bu hem ASCII hem de ASCII üzerinde taşınabilir şekilde çalışacak şekilde önemsiz derecede değiştirilebilir.
EBCDIC platformları.

# Bu QP kodlayıcı hem ASCII hem de EBCDIC'de çalışır
$qp_string =~ s/([=\N{U+00}-\N{U+1F}\N{U+80}-\N{U+FF}])/
sprintf("=%02X",ord($1))/xge;

Daha önceki Perls için, hem ASCII hem de EBCDIC platformlarında çalışan bir QP kodlayıcı şöyle görünecektir:
biraz aşağıdakine benziyor:

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

(her ne kadar üretim kodunda değişiklikler EBCDIC şubesinde şu şekilde yapılabilirse de:
işlev çağrısı ve kimlik haritası masrafı olmadan ASCII şubesinde ayrı ayrı;
Perl v5.22'de kimlik haritası optimize edilmiştir, dolayısıyla masraf yoktur, ancak
Yukarıdaki alternatif daha basittir ve v5.22'de de mevcuttur).

Bu tür QP dizelerinin kodu aşağıdakilerle çözülebilir:

# Bu QP kod çözücü yalnızca ASCII ile sınırlıdır
$string =~ s/=([[:xdigit:][[:xdigit:])/chr hex $1/ge;
$string =~ s/=[\n\r]+$//;

Oysa hem ASCII hem de EBCDIC platformlarında çalışan bir QP kod çözücü biraz daha iyi görünebilir.
aşağıdaki gibi:

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

Sezar ile ilgili şifrelere
Şifreleme için bir alfabeyi bir veya daha fazla karakterin yerini değiştirme uygulaması çok eskilere dayanmaktadır.
binlerce yıldır var ve Gaius Julius Caesar tarafından açıkça detaylandırılmıştır. Fransa'ya ait Savaşları
metin. Tek bir alfabe değişikliğine bazen rotasyon ve kaydırma miktarı adı verilir
'rot' veya "rot$n" dizesinden sonra $n sayısı olarak verilir. Rot0 ve rot26 şunları belirtir:
Latin alfabesinin 26 harfli İngilizce versiyonundaki kimlik haritaları. Rot13'ün özellikleri
Sonraki çağrıları değiştiren ilginç özellik kimlik haritalarıdır (bu nedenle rot13
26 alfabe rotasyonu grubunda önemsiz olmayan bir tersidir). Dolayısıyla
ASCII ve EBCDIC platformlarında çalışacak bir rot13 kodlayıcı ve kod çözücü aşağıdadır:

#! / usr / local / bin / perl

süre(<>){
tr/n-za-mN-ZA-M/a-zA-Z/;
baskı;
}

Tek satırlık formda:

perl -ne 'tr/n-za-mN-ZA-M/a-zA-Z/;yazdır'

Çırpı sipariş ve toplamlarını


Perl, hem ASCII hem de EBCDIC'de güvenlik amacıyla karma sırasını kasıtlı olarak rastgele seçiyor
platformlar.

EBCDIC sağlama toplamları, ASCII'ye çevrilmiş aynı dosya için farklı olacaktır ve bunun tersi de geçerlidir.

I18N VE L10N


Uluslararasılaştırma (I18N) ve yerelleştirme (L10N) en azından prensipte desteklenmektedir
EBCDIC platformlarında bile. Ayrıntılar sisteme bağlıdır ve "İşletim Sistemi
SORUNLAR" bölümü aşağıdadır.

ÇOK OKTETLİ KARAKTER SETLER


Perl, çok baytlı bir kodlama olan UTF-EBCDIC ile çalışır. v5.22'den önceki Perls'de,
Bu konuda çeşitli hatalar olabilir.

Eski çok baytlı EBCDIC kod sayfaları XXX.

OS KONULAR


EBCDIC Perl programcılarını ilgilendiren birkaç sisteme bağlı sorun olabilir.

OS / 400
PASE PASE ortamı, OS/400 için yürütülebilir dosyaları çalıştırabilen bir çalışma ortamıdır.
OS/400'de PowerPC AIX için tasarlandı; perlos400'e bakınız. PASE, EBCDIC değil, ASCII tabanlıdır
ILE olarak temel alınır.

IFS erişimi
XXX.

OS / 390, z / OS
Perl, Unix Sistem Hizmetleri veya USS altında çalışır.

"sigaction"
"SA_SIGINFO" segmentasyon hatalarına sahip olabilir.

"chcp" chcp kişinin kod sayfasını görüntülemek ve değiştirmek için bir kabuk yardımcı programı olarak desteklenir.
Ayrıca bakınız chcp(1).

veri kümesi erişimi
Sıralı veri seti erişimi için şunu deneyin:

my @ds_records = `cat //DSNAME`;

ya da alışveriş sepetinize tıklayın:

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

Ayrıca CPAN'daki OS390::Stdio modülüne bakın.

"simge" iconv hem kabuk yardımcı programı hem de C RTL rutini olarak desteklenir. Ayrıca bkz.
iconv(1) ve iconv(3) kılavuz sayfaları.

yerel ayarlar Yerel ayarlar desteklenir. Bir yerel ayar başka bir EBCDIC kodu olduğunda aksaklıklar olabilir
diğer konumlarda kod sayfası değişken karakterlerinden bazılarının bulunduğu sayfa.

Bazı yerel ayar adları olmasına rağmen şu anda gerçek bir UTF-8 yerel ayarı yok
"UTF-8" dizesini içerir.

Yerel ayarlar hakkında bilgi için perllocale'e bakın. L10N dosyaları /usr/nls/yerel.
$Config{d_setlocale}, OS/390 veya z/OS'ta 'tanımla'dır.

POSIX-BC?
XXX.

Onworks.net hizmetlerini kullanarak perlebcdic'i çevrimiçi kullanın


Ücretsiz Sunucular ve İş İstasyonları

Windows ve Linux uygulamalarını indirin

  • 1
    AstroOrzOyuncu
    AstroOrzOyuncu
    AstrOrz Player ücretsiz bir medya oynatıcıdır
    yazılım, WMP ve VLC tabanlı kısım. bu
    oynatıcı, minimalist tarzda,
    ondan fazla tema rengi ve ayrıca
    b ...
    AstrOrzPlayer'ı indirin
  • 2
    film başlatıcısı
    film başlatıcısı
    Kodi Movistar+ TV, XBMC/ için bir ADDON'dur
    Kod, bir öğe dağıtılmasına izin verebilir
    IPTV hizmetlerinin kod çözücüsü
    Movistar tek bir cihazda entegre
    medya merkezleri ma...
    movistartv'yi indir
  • 3
    Code :: Blocks
    Code :: Blocks
    Code::Blocks ücretsiz, açık kaynaklı,
    platformlar arası C, C++ ve Fortran IDE
    en zorlu ihtiyaçları karşılamak için inşa edilmiştir
    kullanıcılarının Çok olacak şekilde tasarlanmıştır
    uzanır...
    Kodu İndir::Bloklar
  • 4
    ortasında
    ortasında
    Ortasında veya Gelişmiş Minecraft Arayüzü
    ve Veri/Yapı İzleme,
    Minecraft'a genel bir bakış göster
    dünya, aslında onu yaratmadan. Bilişim Teknoloji
    Yapabilmek ...
    Arada İndir
  • 5
    MSYS2
    MSYS2
    MSYS2 bir araçlar topluluğudur ve
    size sağlayan kütüphaneler
    bina için kullanımı kolay ortam,
    yerel Windows'u yükleme ve çalıştırma
    yazılım. ...
    MSYS2'yi İndirin
  • 6
    libjpeg turbo
    libjpeg turbo
    libjpeg-turbo bir JPEG görüntü codec bileşenidir
    SIMD talimatlarını kullanan (MMX, SSE2,
    NEON, AltiVec) temel çizgiyi hızlandırmak için
    JPEG sıkıştırma ve açma
    x86, x8...
    libjpeg-turbo'yu indirin
  • Daha fazla »

Linux komutları

Ad