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 perlunicook komutudur.
Program:
ADI
perlunicook - Unicode'u Perl'de kullanmanın yemek kitabı örnekleri
TANIM
Bu kılavuz sayfası, yaygın Unicode işlemlerinin nasıl ele alınacağını gösteren kısa tarifler içerir.
Perl'de artı sonunda bir tam program. Bireysel olarak herhangi bir bildirilmemiş değişken
tariflerin önceden uygun bir değere sahip olduğu varsayılır.
ÖRNEKLER
X 0: Standart önsöz
Aksi belirtilmedikçe, aşağıdaki tüm örnekler bu standart girişin çalışmasını gerektirir.
doğru, "#!" sisteminizde çalışacak şekilde ayarlanmış:
#!/usr/bin/ortam perl
utf8'i kullanın; # yani değişmezler ve tanımlayıcılar UTF-8'de olabilir
v5.12'yi kullanın; # veya üstü "unicode_strings" özelliğini almak için
katı kullanın; # alıntı dizeleri, değişkenleri bildir
uyarıları kullanın; # varsayılan olarak açık
uyarıları kullan qw(FATAL utf8); # kodlama hatalarını ölümcül hale getir
open qw(:std :utf8) kullanın; # UTF-8'de bildirilmemiş akışlar
karakter adlarını kullanın qw(:full :short); # v5.16'da gereksiz
Bu yok Unix programcılarını bile ikili akışlarınızı "bin modu" haline getirin veya
":raw", ancak yine de onlara taşınabilir bir şekilde ulaşmanın tek yolu bu.
UYARI: "autodie kullan" (2.26 öncesi) ve "use open" birbiriyle anlaşamaz.
X 1: genel Unicode konusunda bilgili filtre
Her zaman girerken ayrıştırın, sonra çıkarken yeniden oluşturun.
Unicode::Normalize kullanın;
süre (<>) {
$_ = NFD($_); # ayrıştır + kurallı olarak yeniden sırala
Kendi ID’n ile mağazalarını oluştur
} devam et {
NFC'yi yazdır($_); # yeniden oluştur (mümkünse) + kurallı olarak yeniden sırala
}
X 2: İnce ayar Unicode uyarılar
v5.14'ten itibaren Perl, UTFX8 uyarılarının üç alt sınıfını ayırt eder.
v5.14'ü kullanın; # alt uyarı daha önce kullanılamıyor
"nonchar" uyarısı yok; # 66 yasaklı olmayan karakter
uyarı yok "vekil"; # UTF-16/CESU-8 saçmalığı
uyarı yok "unicode olmayan"; # 0x10_FFFF üzerindeki kod noktaları için
X 3: bildirmek kaynak in utf8 için tanımlayıcıları ve değişmezleri
Tüm kritik "utf8 kullan" bildirimi olmadan, UTFX8'i değişmez değerlerinize ve
tanımlayıcılar doğru çalışmayacaktır. Yukarıda verilen standart önsözü kullandıysanız, bu
zaten oldu. Eğer yaptıysanız, şöyle şeyler yapabilirsiniz:
utf8'i kullanın;
benim $ölçüm = "Aangstroem";
benim @Xsoft = qw( cp852 cp1251 cp1252 );
benim @XXXXXXXXX = qw( XXXX XXXX );
benim @X = qw( koi8-f koi8-u koi8-r );
$mottom = "XXX"; # AİLE, BÜYÜYEN KALP, HAYVANLI DEVE
"utf8 kullan"ı unutursanız, yüksek baytlar ayrı karakterler olarak yanlış anlaşılacaktır ve
hiçbir şey doğru çalışmayacak.
X 4: Karakterler ve ve bazı Asya sayılar
"ord" ve "chr" işlevleri, yalnızca ASCII'de değil, tüm kod noktalarında şeffaf bir şekilde çalışır
tek başına X veya aslında, yalnızca Unicode'da bile değil.
# ASCII karakterleri
ord("A")
chr(65)
Temel Çok Dilli Düzlemden # karakter
ord("X")
chr(0x3A3)
# BMP'nin ötesinde
ord("X") # MATEMATİKSEL İTALİK KÜÇÜK N
chr(0x1D45B)
# Unicode'un ötesinde! (MAXINT'e kadar)
ord("\x{20_0000}")
chr(0x20_0000)
X 5: Unicode değişmezleri by karakter numara
İster çift tırnaklı bir dize isterse normal ifade olsun, enterpolasyonlu bir hazır bilgide, bir
"\x{ kullanarak numarasına göre karakterHHHHHH}" kaçış.
Dize: "\x{3a3}"
Normal ifade: /\x{3a3}/
Dize: "\x{1d45b}"
Normal ifade: /\x{1d45b}/
# normal ifadede BMP olmayan aralıklar bile iyi çalışıyor
/[\x{1D434}-\x{1D467}]/
X 6: Ön Onay karakter isim by numara
karakter adlarını kullanın ();
benim $isim = karakter isimlerim::yol kodu(0x03A3);
X 7: Ön Onay karakter numara by isim
karakter adlarını kullanın ();
benim $numaram = charnames::vianame("YUNANCA BÜYÜK HARF SIGMA");
X 8: Unicode adlı karakterler
"\N{'yi kullanınkarakter ismi}" enterpolasyonlu kullanım için karakteri bu ada göre almak için gösterim
değişmez değerler (çift tırnaklı dizeler ve normal ifadeler). v5.16'da örtük bir
karakter adlarını kullanın qw(:full :short);
Ancak v5.16'dan önce, hangi karakter dizisini istediğiniz konusunda açık olmalısınız. bu
":full" adları, hepsinin paylaştığı resmi Unicode karakter adı, takma ad veya dizilimdir.
bir ad alanı.
karakter adlarını kullan qw(:full :kısa latin yunanca);
"\N{MATEMATİKSEL İTALİK KÜÇÜK N}" # :dolu
"\N{YUNAN BÜYÜK HARF SIGMA}" # :dolu
Başka herhangi bir şey Perl'e özgü bir kolaylık kısaltmasıdır. Şuna göre bir veya daha fazla komut dosyası belirtin:
komut dosyasına özgü kısa adlar istiyorsanız, adlar.
"\N{Yunanca:Sigma}" # :kısa
"\N{ae}" # latince
"\N{epsilon}" # yunan
v5.16 sürümü, karakter adlarının gevşek eşleşmesi için ":loose" içe aktarımını da destekler,
bu, mülk adlarının gevşek eşleşmesi gibi çalışır: yani, büyük/küçük harfe dikkat etmez,
boşluk ve alt çizgiler:
"\N{euro işareti}" # :gevşek (v5.16'dan itibaren)
X 9: Unicode adlı dizileri
Bunlar sadece karakter adlarına benziyor ancak birden çok kod noktası döndürüyor. %vx'e dikkat edin
"printf" de vektör yazdırma işlevi.
karakter adlarını kullanın qw(:full);
benim $seq = "\N{MAKRON VE MEZARLI LATİN BÜYÜK A Harfi}";
printf "U+%v04X\n", $seq;
+ 0100.0300 U
X 10: görenek adlı karakterler
Var olan karakterlere sözlüksel olarak kapsamlı kendi takma adlarınızı vermek için ":alias" kullanın, hatta
isimsiz özel kullanım karakterlerine faydalı isimler vermek için.
karakter adlarını kullan ":full", ":alias" => {
ecute => "AKUT İLE LATİN KÜÇÜK E HARFİ",
"APPLE LOGO" => 0xF8FF, # özel kullanım karakteri
};
"\N{ecute}"
"\N{ELMA LOGOSU}"
X 11: İsimler of CJK kod noktaları
XXXX gibi sinogramlar, "CJK UNIFIED IDEOGRAPH-6771" karakter adlarıyla geri gelir ve
"CJK UNIFIED IDEOGRAPH-4EAC", çünkü XnamesX değişkendir. CPAN "Unicode::Unihan"
modül, bunları (ve daha fazlasını) çözmek için büyük bir veritabanına sahiptir, bilmeniz koşuluyla
çıktısı nasıl anlaşılır.
# cpan -i Unicode::Unihan
Unicode::Unihan'ı kullanın;
benim $str = "XX";
benim $unhan = Unicode::Unihan->new;
$lang'ım için (qw(Mandarin Kantonca Korece JaponcaOn JapaneseKun)) {
printf "%-12s cinsinden CJK $str is ", $lang;
$unhan->$lang($str); deyin
}
baskılar:
Mandarin CJK XX, DONG1JING1'dir
Kantoncada CJK XX dung1ging1
Korece'de CJK XX TONGKYENG'dir
Japonca'da CJK XX, TOUKYOU KEI KIN'dir
Japonca Kun'da CJK XX, HIGASHI AZUMAMIYAKO'dur
Aklınızda belirli bir romanlaştırma şeması varsa, belirli modülü kullanın:
# cpan -i Lingua::JA::Romanize::Japonca
Lingua::JA::Romanize::Japonca kullanın;
benim $k2r = Lingua::JA::Romanize::Japanese->new;
benim $str = "XX";
"$str için Japonca is " deyin, $k2r->chars($str);
baskılar
XX için Japonca toukyou
X 12: açık sifre desifre
Nadir durumlarda, örneğin bir veritabanının okunması gibi, size ihtiyacınız olan kodlanmış metin verilebilir.
kodunu çöz.
Encode qw'yi kullanın(kod çözme);
benim $chars = decode("shiftjis", $bayt, 1);
# VEYA
benim $bytes = encode("MIME-Header-ISO_2022_JP", $chars, 1);
Tümü aynı kodlamada olan akışlar için kodlama/kod çözmeyi kullanmayın; bunun yerine dosyayı ayarla
dosyayı açtığınızda veya daha sonra açıklandığı gibi "binmode" ile hemen sonra kodlama
altında.
X 13: decode program argümanlar as utf8
$ perl -CA ...
or
$ dışa aktar PERL_UNICODE=A
or
Encode qw(decode_utf8) kullanın;
@ARGV = harita { decode_utf8($_, 1) } @ARGV;
X 14: decode program argümanlar as yerel kodlama
# cpan -i Kodlama::Yerel Ayar
Encode qw(yerel ayar) kullanın;
Encode::Locale kullanın;
# kodlamak/kodunu çözmek için "yerel ayar"ı argüman olarak kullanın
@ARGV = map { decode(locale => $_, 1) } @ARGV;
X 15: bildirmek STD{GİRİŞ,ÇIKIŞ,ERR} için be utf8
Bir komut satırı seçeneği, bir ortam değişkeni kullanın veya açıkça "binmode" olarak adlandırın:
$ perl-CS...
or
$ dışa aktar PERL_UNICODE=S
or
open qw(:std :utf8) kullanın;
or
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");
X 16: bildirmek STD{GİRİŞ,ÇIKIŞ,ERR} için be in yerel kodlama
# cpan -i Kodlama::Yerel Ayar
Encode'u kullanın;
Encode::Locale kullanın;
# veya binmode veya open için bir akış olarak
binmode STDIN, ":encoding(console_in)" if -t STDIN;
binmode STDOUT, ":encoding(console_out)" if -t STDOUT;
binmode STDERR, ":encoding(console_out)" if -t STDERR;
X 17: Yapmak dosya I / O varsayılan için utf8
Kodlama argümanı olmadan açılan dosyalar UTF-8'de olacaktır:
$ perl-CD'si ...
or
$ dışa aktar PERL_UNICODE=D
or
open qw(:utf8) kullanın;
X 18: Yapmak herşey I / O ve args varsayılan için utf8
$ Perl-CSDA...
or
$ dışa aktarma PERL_UNICODE=SDA
or
open qw(:std :utf8) kullanın;
Encode qw(decode_utf8) kullanın;
@ARGV = harita { decode_utf8($_, 1) } @ARGV;
X 19: Açılış dosya ile özel kodlama
Akış kodlamasını belirtin. Bu, kodlanmış metinle uğraşmanın normal yoludur, arayarak değil.
düşük seviyeli fonksiyonlar.
# giriş dosyası
open(my $in_file, "< :encoding(UTF-16)", "wintext");
OR
open($in_filem, "<", "wintext");
binmode($in_file, ":encoding(UTF-16)");
SONRA
benim $line = <$in_file>;
# çıktı dosyası
open($out_file, "> :encoding(cp1252)", "wintext");
OR
open($out_filem, ">", "wintext");
binmode($out_file, ":encoding(cp1252)");
SONRA
$out_file "biraz metin\n" yazdır;
Burada yalnızca kodlamadan daha fazla katman belirtilebilir. Örneğin, büyü
":raw :encoding(UTF-16LE) :crlf", örtük CRLF işlemeyi içerir.
X 20: Unicode kasa
Unicode kasası ASCII kasasından çok farklıdır.
uc("henry X") # "HENRY X"
uc("tschuess") # "TSCHUeSS" uyarısı ss => SS
# ikisi de doğrudur:
"tschuess" =~ /TSCHUeSS/i # not ss => SS
"XXXXXXX" =~ /XXXXXXX/i # fark X,X,X aynılığı
X 21: Unicode büyük küçük harf duyarsız karşılaştırmalar
CPAN Unicode::CaseFold modülünde de mevcuttur, yeni "fc" XfoldcaseX işlevi
v5.16, "/i" model değiştiricisinin sahip olduğu aynı Unicode büyük/küçük harf katlamasına erişim sağlar.
her zaman kullanılır:
"fc" özelliğini kullanın; # fc() işlevi v5.16'dan
# büyük/küçük harfe duyarsız sırala
@sorted = sort { fc($a) cmp fc($b) } @list;
# ikisi de doğrudur:
fc("tschuess") eq fc("TSCHUESS")
fc("XXXXXX") eq fc("XXXXXX")
X 22: Maç Unicode satır sonu dizi in regex
Bir Unicode satır sonu, iki karakterli CRLF grafiğiyle veya yedi dikeyden herhangi biriyle eşleşir
boşluk karakterleri. Farklı işletim sistemlerinden gelen metin dosyalarıyla uğraşmak için iyi
sistemler.
\R
s/\R/\n/g; # tüm satır sonlarını \n olarak normalleştir
X 23: Ön Onay karakter kategori
Sayısal bir kod noktasının genel kategorisini bulun.
Unicode::UCD qw(charinfo) kullanın;
benim $kedim = bilgi(0x3A3)->{kategori}; # "Lu"
X 24: Devre Dışı Bırakma Unicode farkındalığı in builtin karakter sınıfları
"\w", "\b", "\s", "\d" ve POSIX sınıflarının Unicode'da düzgün çalışmasını devre dışı bırakın
ya bu kapsamda ya da yalnızca bir normal ifadede.
v5.14'i kullanın;
yeniden "/a" kullanın;
# VEYA
benim($sayı) = $str =~ /(\d+)/a;
Veya "\p{ahex}" ve "\p{POSIX_Digit"} gibi belirli Unicode olmayan özellikleri kullanın. Özellikler
hangi karakter kümesi değiştiricilerinin ("/d /u /l /a /aa") etkili olması gerektiğine bakılmaksızın hala normal şekilde çalışır.
X 25: Maç Unicode özellikleri in regex ile \P, \P
Bunların tümü, verilen özellik ile tek bir kod noktasıyla eşleşir. için "\p" yerine "\P" kullanın.
bu özellikten yoksun bir kod noktasıyla eşleştirin.
\pL, \pN, \pS, \pP, \pM, \pZ, \pC
\p{Sk}, \p{Ps}, \p{Lt}
\p{alfa}, \p{üst}, \p{alt}
\p{Latin}, \p{Yunanca}
\p{script=Latin}, \p{script=Yunanca}
\p{East_Asian_Width=Geniş}, \p{EA=W}
\p{Line_Break=Tire}, \p{LB=HY}
\p{Sayısal_Değer=4}, \p{NV=4}
X 26: görenek karakter özellikleri
Normal ifadelerde kullanmak için derleme zamanında kendi özel karakter özelliklerinizi tanımlayın.
# özel kullanımlı karakterleri kullanma
sub In_Tengwar { "E000\tE07F\n" }
eğer (/\p{In_Tengwar}/) { ... }
# mevcut özellikleri karıştırma
alt Is_GraecoRoman_Title {<<'END_OF_SET'}
+utf8::Latince
+utf8::Yunanca
&utf8::IsTitle
END_OF_SET
eğer (/\p{Is_GraecoRoman_Title}/ { ... }
X 27: Unicode normalleştirme
Tipik olarak girişte NFD'ye ve çıkışta NFC'ye dönüştürülür. NFKC veya NFKD işlevlerini kullanma
aranacak aynı metne zaten yaptığınızı varsayarsak, aramalarda hatırlamayı iyileştirir.
Bunun, önceden birleştirilmiş uyumluluk gliflerinden çok daha fazlası olduğunu unutmayın; o da
işaretleri kanonik birleştirme sınıflarına göre yeniden sıralar ve tekilleri ayıklar.
Unicode::Normalize kullanın;
benim $nfd = NFD($orij);
benim $nfc = NFC($orij);
benim $nfkd = NFKD($orij);
benim $nfkc = NFKC($orj);
X 28: dönüştürmek ASCII olmayan Unicode sayısal
"/a" veya "/aa" kullanmadığınız sürece, "\d" yalnızca ASCII basamaklarından daha fazlasıyla eşleşir, ancak PerlX'ler
örtük dizeden sayıya dönüştürme şu anda bunları tanımıyor. HereXs nasıl yapılır
bu tür dizeleri manuel olarak dönüştürün.
v5.14'ü kullanın; # num() işlevi için gerekli
Unicode::UCD kullanın qw(sayı);
benim $str = "X ve XXXX ve X ve burada var";
@sayılarım = ();
while ($str =~ /(\d+|\N)/g) { # sadece ASCII değil!
@nums'a basın, num($1);
}
"@nums" deyin; # 12 4567 0.875
karakter adlarını kullanın qw(:full);
benim $nv = num("\N{RUMI BİRİNCİ HANGİ}\N{RUMİ HANGİ İKİ HANGİ}");
X 29: Maç Unicode sesletim küme in regex
Programcı tarafından görülebilen XcharactersX, "/./s" ile eşleşen kod noktalarıdır, ancak kullanıcı tarafından görülebilir
XcharactersX, "/\X/" ile eşleşen grafiklerdir.
# Sesli harfleri *artı* herhangi bir birleştirici aksan, altı çizili, vb. bulun.
benim $nfd = NFD($orij);
$nfd =~ / (?=[aeiou]) \X /xi
X 30: Çıkarmak by sesletim yerine of by kod noktası (normal ifade)
# ilk beş grafiği eşleştirin ve alın
benim($ilk_beş) = $str =~ /^ ( \X{5} ) /x;
X 31: Çıkarmak by sesletim yerine of by kod noktası (alt dizi)
# cpan -i Unicode::GCString
Unicode::GCString kullanın;
benim $gcs = Unicode::GCString->new($str);
benim $first_five = $gcs->substr(0, 5);
X 32: Geri dizi by sesletim
Kod noktası ile tersine çevirmek, aksan işaretlerini karıştırır ve yanlışlıkla "krem brüle"yi
"eelurb emerc" yerine "eelXurb emXerc"; bunun yerine grafem ile tersine çevirin. Her ikisi de
bu yaklaşımlar, dize hangi normalleştirmede olursa olsun doğru çalışır:
$str = birleştirme("", ters $str =~ /\X/g);
# VEYA: cpan -i Unicode::GCString
Unicode::GCString kullanın;
$str = ters Unicode::GCString->new($str);
X 33: dizi uzunluk in grafemler
"Brulee" dizesinin altı grafiği vardır, ancak sekize kadar kod noktası vardır. Bu sayar
grafik, kod noktasına göre değil:
benim $str = "brulee";
benim $sayım = 0;
while ($str =~ /\X/g) { $say++ }
# VEYA: cpan -i Unicode::GCString
Unicode::GCString kullanın;
benim $gcs = Unicode::GCString->new($str);
benim $count = $gcs->uzunluk;
X 34: Unicode sütun genişliği için baskı
PerlX'ler "printf", "sprintf" ve "format", tüm kod noktalarının 1 yazdırma sütunu kapladığını düşünüyor, ancak
birçoğu 0 veya 2 alır. Normalleşmenin fark yaratmadığını göstermek için burada her ikisini de yazdırıyoruz.
formlar:
Unicode::GCString kullanın;
Unicode::Normalize kullanın;
@kelimelerim = qw/krem brulee/;
@kelimeler = harita { NFC($_), NFD($_) } @kelimeler;
$str (@words) { için
benim $gcs = Unicode::GCString->new($str);
benim $sütunlarım = $gcs->sütunlarım;
benim $pad = " " x (10 - $sütun);
str, $pad, " |" deyin;
}
normalleştirme ne olursa olsun doğru şekilde doldurulduğunu göstermek için bunu oluşturur:
krem |
krem |
brüle |
bruXleXe |
X 35: Unicode karşılaştırma
Sayısal kod noktasına göre sıralanan metin, makul bir alfabetik sıra izlemez; için UCA'yı kullanın
metin sıralama.
Unicode::Collate kullanın;
benim $col = Unicode::Collate->new();
@listem = $col->sort(@old_list);
Bak uc sıralama uygun bir komut satırı için Unicode::Tussle CPAN modülünden program
Bu modülün arayüzü.
X 36: vaka ve vurguya duyarsız Unicode tür
Yalnızca
temel karakter.
Unicode::Collate kullanın;
benim $col = Unicode::Collate->new(level => 1);
@listem = $col->sort(@old_list);
X 37: Unicode yerel karşılaştırma
Bazı yerel ayarların özel sıralama kuralları vardır.
# ya v5.12 kullanın, VEYA: cpan -i Unicode::Collate::Locale
Unicode::Collate::Locale kullanın;
benim $col = Unicode::Collate::Locale->new(locale => "de__phonebook");
@listem = $col->sort(@old_list);
The uc sıralama yukarıda bahsedilen program bir "--locale" parametresini kabul eder.
X 38: Yapımı "cmp" iş on metin yerine of kod noktaları
Bunun yerine:
@srecs = sıralama {
$b->{YAŞ} <=> $a->{YAŞ}
||
$a->{NAME} cmp $b->{NAME}
} @recs;
Bunu kullanın:
benim $coll = Unicode::Collate->new();
$rec'im için (@recs) {
$rec->{NAME_key} = $coll->getSortKey( $rec->{NAME} );
}
@srecs = sıralama {
$b->{YAŞ} <=> $a->{YAŞ}
||
$a->{NAME_key} cmp $b->{NAME_key}
} @recs;
X 39: vaka ve vurguya duyarsız karşılaştırmalar
Unicode metnini kod noktası yerine karakter bazında karşılaştırmak için bir harmanlayıcı nesnesi kullanın.
Unicode::Collate kullanın;
benim $es = Unicode::Collate->new(
seviye => 1,
normalleştirme => tanımsız
);
# şimdi ikisi de doğru:
$es->eq("Garcia", "GARCIA");
$es->eq("Marquez", "MARQUEZ");
X 40: vaka ve vurguya duyarsız yerel karşılaştırmalar
Aynı, ancak belirli bir yerel ayarda.
benim $de = Unicode::Collate::Locale->new(
yerel ayar => "de__phonebook",
);
# şimdi bu doğru:
$de->eq("tschuess", "TSCHUESS"); # not ue => UE, ss => SS
X 41: Unicode satır kırma
Unicode kurallarına göre metni satırlara ayırın.
# cpan -i Unicode::LineBreak
Unicode::LineBreak'i kullanın;
karakter adlarını kullanın qw(:full);
my $para = "Bu süper\N{HYPHEN}uzun bir dizedir." x 20;
benim $fmt = Unicode::LineBreak->new;
print $fmt->break($para), "\n";
X 42: Unicode metin in DBM karmalar, the sıkıcı yol
Bir DBM karması için anahtar veya değer olarak normal bir Perl dizesi kullanmak geniş bir karakteri tetikleyecektir
istisna, herhangi bir kod noktasının bir bayta sığmaması durumunda. HereX'in manuel olarak nasıl yönetileceği
çeviri:
DB_File'ı kullanın;
Encode qw'yi kullanın(kod çözme);
%dbhash, "DB_File", "pathname";
# MAĞAZA
# $uni_key ve $uni_value'nun soyut Unicode dizeleri olduğunu varsayalım
benim $enc_key = encode("UTF-8", $uni_key, 1);
benim $enc_value = encode("UTF-8", $uni_value, 1);
$dbhash{$enc_key} = $enc_value;
# GİDİP GETİRMEK
# $uni_key'in normal bir Perl dizgisine sahip olduğunu varsayalım (soyut Unicode)
benim $enc_key = encode("UTF-8", $uni_key, 1);
benim $enc_value = $dbhash{$enc_key};
benim $uni_value = decode("UTF-8", $enc_value, 1);
X 43: Unicode metin in DBM karmalar, the kolay yol
HereXs, çevirinin örtük olarak nasıl yönetileceğini; tüm kodlama ve kod çözme yapılır
otomatik olarak, kendilerine belirli bir kodlama eklenmiş akışlarda olduğu gibi:
DB_File'ı kullanın;
DBM_Filter'ı kullanın;
benim $dbobj = bağ %dbhash, "DB_File", "pathname";
$dbobj->Filter_Value("utf8"); # bu sihirli parça
# MAĞAZA
# $uni_key ve $uni_value'nun soyut Unicode dizeleri olduğunu varsayalım
$dbhash{$uni_key} = $uni_value;
# GİDİP GETİRMEK
# $uni_key normal bir Perl dizesi tutar (soyut Unicode)
benim $uni_value = $dbhash{$uni_key};
X 44: Program: Gösteri of Unicode karşılaştırma ve baskı
HereXs, yerel ayarlara duyarlı sıralamanın nasıl kullanılacağını gösteren eksiksiz bir program, Unicode kasa,
ve bazı karakterler sıfır veya iki sütun kapladığında baskı genişliklerini yönetmek,
her seferinde sadece bir sütun. Çalıştırıldığında, aşağıdaki program bu güzel hizalanmış
çıktı:
Krem Brüle....... X2.00
Ekler............. X1.60
Fideua............ X4.20
Hamburger...... X6.00
Jamon Serrano...... X4.45
Linguica......... X7.00
Pate.................. X4.15
Armut.............. X2.00
Peçeler.................. X2.25
Smorbrod......... X5.75
Spaetzle.............. X5.50
Xorico............ X3.00
XXXXX................. X6.50
XXX................. X4.00
XXX................. X2.65
XXXXX......... X8.00
XXXXXXX.....X1.85
XX................ X9.99
XX................ X7.50
İşte o program; v5.14 üzerinde test edilmiştir.
#!/usr/bin/ortam perl
# umenu - Unicode gıdaların demo olarak sınıflandırılması ve yazdırılması
#
# (zorunlu ve giderek daha uzun önsöz)
#
utf8'i kullanın;
v5.14'ü kullanın; # yerel sıralama için
sıkı kullanın;
uyarıları kullan;
uyarıları kullan qw(FATAL utf8); # kodlama hatalarını sonlandır
open qw(:std :utf8) kullanın; # UTF-8'de bildirilmemiş akışlar
karakter adlarını kullanın qw(:full :short); # v5.16'da gereksiz
# standart modüller
Unicode::Normalize kullanın; # v5.8'den itibaren std Perl dağıtımı
Listeyi kullan::Util qw(maks); # std Perl dağıtımı v5.10'dan itibaren
Unicode::Collate::Locale kullanın; # std Perl dağıtımı v5.14'ten itibaren
# cpan modülleri
Unicode::GCString kullanın; # CPAN'dan
# ileri def
alt ped($$$);
alt colwidth(_);
alt başlık(_);
benim %fiyatım = (
"XXXX" => 6.50, # jiroskop
"armut" => 2.00, # um gibi, armut
"linguica" => 7.00, # baharatlı sosis, Portekizce
"xorico" => 3.00, # chorizo sosis, Katalanca
"hamburger" => 6.00, # burgermeister meisterburger
"eclair" => 1.60, # tatlı, Fransızca
"smorbrod" => 5.75, # sandviç, Norveççe
"spaetzle" => 5.50, # Bayerisch eriştesi, küçük serçeler
"XX" => 7.50, # bao1 zi5, buğulanmış domuz çöreği, Mandarin
"jamon serrano" => 4.45, # ülke jambonu, İspanyolca
"peches" => 2.25, # şeftali, Fransızca
"XXXXXXX" => 1.85, # ekler gibi krema dolgulu pasta
"XXX" => 4.00, # makgeolli, Kore pirinç şarabı
"XX" => 9.99, # suşi, Japonca
"XXX" => 2.65, # omochi, pirinç keki, Japonca
"kremalı krema" => 2.00, # kremalı katalana
"fideua" => 4.20, # daha fazla erişte, Valensiya dili
# (Katalanca=fideuada)
"pate" => 4.15, # kaz direği ezmesi, Fransızca
"XXXX" => 8.00, # okonomiyaki, Japonca
);
$width = 5 + max map { colwidth } anahtarlarım %price;
# Yani Asyalı şeyler, birilerinin
# bu senaryoları okuyanlar çıldırmaz; en
# CJK malzemeleri bu şekilde JIS X 0208 düzeninde olacaktır.
benim $coll = Unicode::Collate::Locale->new(locale => "ja");
$item için ($coll->sort(keys %price)) {
print pad(entitle($item), $width, ".");
printf " X%.2f\n", $fiyat{$item};
}
alt ped($$$) {
my($str, $genişlik, $padchar) = @_;
$str döndür. ($padchar x ($width - colwidth($str)));
}
alt colwidth(_) {
benim($str) = @_;
dönüş Unicode::GCString->new($str)->columns;
}
alt başlık(_) {
benim($str) = @_;
$str =~ s{ (?=\pL)(\S) (\S*) }
{ ilk önce($1) . lc($2) }xge;
$str döndür;
}
onworks.net hizmetlerini kullanarak perlunicook'u çevrimiçi kullanın