perlapi - Bulutta Çevrimiçi

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 perlapi komutudur.

Program:

ADI


perlapi - perl genel API'si için otomatik oluşturulmuş belgeler

TANIM


Bu dosya, tarafından oluşturulan Perl genel API'sinin belgelerini içerir. embed.pl,
tarafından kullanılabilecek fonksiyonların, makroların, bayrakların ve değişkenlerin bir listesi.
uzatma yazarları Sonunda, henüz belgelenmemiş işlevlerin bir listesi var.
Bunların arayüzleri haber verilmeksizin değiştirilebilir. Burada listelenmeyen her şey
genel API'nin bir parçası değildir ve uzantı yazarları tarafından hiç kullanılmamalıdır. Bunlar için
nedenler, yazarken proto.h'de listelenen işlevleri körü körüne kullanmaktan kaçınılmalıdır.
uzantıları.

Tüm Perl API global değişkenlerine "PL_" öneki ile başvurulması gerektiğini unutmayın. Yine,
Burada listelenmeyenler, uzantı yazarları tarafından kullanılamaz ve değiştirilebilir veya
haber verilmeksizin kaldırıldı; makrolarla aynı. Bazı makrolar, uyumluluk için sağlanmıştır.
eski, süslenmemiş isimler, ancak bu destek gelecekteki bir sürümde devre dışı bırakılabilir.

Perl başlangıçta yalnızca US-ASCII'yi işlemek için yazılmıştır (bu, sıra sayısı
sayılar 0 - 127 arasındadır). Ve belgeler ve yorumlar hala terimi kullanabilir
ASCII, bazen aslında 0 - 255 arasındaki tüm aralığı kastediyor.

Perl'in ASCII veya EBCDIC altında derlenebileceğini ve çalıştırılabileceğini unutmayın (bkz. perlebcdic).
Belgelerin çoğu (ve hatta koddaki yorumlar) EBCDIC olasılığını görmezden gelir.
Hemen hemen tüm amaçlar için farklılıklar şeffaftır. Örnek olarak, EBCDIC kapsamında,
UTF-8 yerine, UTF-EBCDIC, Unicode dizelerini kodlamak için kullanılır ve bu nedenle, bu
belgeler "utf8" (ve işlev adları dahil olmak üzere bu adın türevleri) anlamına gelir,
ayrıca (esas olarak şeffaf) "UTF-EBCDIC" anlamına gelir. Ama karakterlerin sıra sayıları
ASCII, EBCDIC ve UTF kodlamaları ve UTF-EBCDIC'de kodlanmış bir dize arasında farklılık gösterir
UTF-8'den daha fazla bayt kaplayabilir.

Aşağıdaki liste alfabetiktir, büyük/küçük harf duyarsızdır.

"Ver" Değerler


GIMME Yalnızca "G_SCALAR" veya
"G_ARRAY"; geçersiz bir bağlamda "G_SCALAR" döndürür. Kullanımdan kaldırıldı. "GIMME_V" kullan
yerine.

U32 VER

GIMME_V XSUB-yazarının Perl'in "wantarray"ine eşdeğerdir. "G_VOID", "G_SCALAR" döndürür
veya sırasıyla void, skaler veya liste bağlamı için "G_ARRAY". için perlcall'a bakın
kullanım örneği.

U32 GIMME_V

G_ARRAY Liste içeriğini belirtmek için kullanılır. "GIMME_V", "GIMME" ve perlcall'a bakın.

G_DISCARD
Bir geri aramadan döndürülen bağımsız değişkenlerin atılması gerektiğini gösterir. Görmek
perlcall.

G_EVAL Bir geri arama etrafında bir Perl "değerlendirme" sarmalayıcısını zorlamak için kullanılır. Perlcall'a bakın.

G_NOARGS
Bir geri aramaya hiçbir argüman gönderilmediğini gösterir. Perlcall'a bakın.

G_SCALAR
Skaler bağlamı belirtmek için kullanılır. "GIMME_V", "GIMME" ve perlcall'a bakın.

G_VOID Geçersiz bağlamı belirtmek için kullanılır. "GIMME_V" ve perlcall'a bakın.

Dizi hile fonksiyonlar


AvFILL "av_top_index()" ile aynı. Kullanımdan kaldırıldı, bunun yerine "av_top_index()" kullanın.

int AvFILL(AV* av)

av_clear
Bir dizinin tüm öğelerini boş bırakarak serbest bırakır. XS eşdeğeri
"@dizi = ()". Ayrıca bkz. "av_undef".

Bir yıkıcının eylemlerinin doğrudan veya
dolaylı olarak dizinin bir elemanını serbest bırakarak referans sayısına neden olabilir
indirgenecek dizinin kendisi (örneğin, sembol tablosundaki bir girişi silerek). Böyle
AV'nin serbest bırakılmış (hatta yeniden tahsis edilmiş) olması bir olasılıktır.
bir referansınız yoksa aramadan geri dönün.

geçersiz av_clear(AV *av)

av_create_and_push
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Gerekirse diziyi oluşturarak, dizinin sonuna bir SV itin. Küçük
Yaygın olarak çoğaltılan bir deyimi kaldırmak için dahili yardımcı işlevi.

void av_create_and_push(AV **sabit avp,
SV *sabit değer)

av_create_and_unshift_one
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Dizinin başlangıcına bir SV'nin kaydırmasını kaldırır ve gerekirse diziyi oluşturur.
Yaygın olarak çoğaltılan bir deyimi kaldırmak için küçük bir dahili yardımcı işlev.

SV** av_create_and_unshift_one(AV **sabit avp,
SV *sabit değer)

av_delete
"anahtar" ile indekslenen öğeyi diziden siler, öğeyi ölümlü yapar ve
geri verir. "flags", "G_DISCARD" değerine eşitse, öğe serbest bırakılır ve null
iade. Perl eşdeğeri: "benim $elem = delete($myarray[$idx]);" için
"G_DISCARD" olmayan sürüm ve geçersiz bağlamlı "delete($myarray[$idx]);" için
"G_DISCARD" sürümü.

SV* av_delete(AV *av, SSize_t anahtarı, I32 bayrakları)

av_var
"Anahtar" tarafından dizine eklenen öğe başlatılmışsa true değerini döndürür.

Bu, başlatılmamış dizi öğelerinin NULL olarak ayarlanmasına dayanır.

Perl eşdeğeri: "vardır($myarray[$anahtar])".

bool av_exists(AV *av, SSize_t anahtarı)

av_extend
Bir diziyi önceden genişletin. "Anahtar", dizinin olması gereken dizindir.
Genişletilmiş.

void av_extend(AV *av, SSize_t anahtarı)

av_fetch
Dizide belirtilen dizindeki SV'yi döndürür. "Anahtar" dizindir. Eğer
lval doğrudur, gerçek bir SV geri almanız garanti edilir (gerçek olmaması durumunda
önce), daha sonra değiştirebilirsiniz. Dönüş değerinin boş olmadığını kontrol edin
"SV*" olarak referansını kaldırmadan önce.

Daha fazla bilgi için perlguts'ta "Bağlı Karmaların ve Dizilerin Sihrini Anlamak" bölümüne bakın
bağlı dizilerde bu işlevin nasıl kullanılacağı hakkında bilgi.

Kaba perl eşdeğeri $myarray[$idx]'dir.

SV** av_fetch(AV *av, SSize_t anahtarı, I32 lval)

av_fill Dizideki en yüksek dizini Perl'e eşdeğer verilen sayıya ayarlayın
"$#dizi = $doldur;".

Dizideki eleman sayısı "dolgu + 1" olacaktır. av_fill() döner.
Dizi önceden daha kısaysa, eklenen ek öğeler ayarlanır
NULL'a. Dizi daha uzunsa, fazla elemanlar serbest bırakılır.
"av_fill(av, -1)", "av_clear(av)" ile aynıdır.

void av_fill(AV *av, SSize_t dolgu)

av_len "av_top_index" ile aynı. Adından farklı olarak, şunu döndürdüğünü unutmayın:
dizideki en yüksek dizin, bu nedenle kullanmanız gereken dizinin boyutunu elde etmek için
"av_len(av) + 1". Bu, beklediğinizi döndüren "sv_len"den farklıdır.

SSsize_t av_len(AV *av)

av_make Yeni bir AV oluşturur ve onu bir SV listesiyle doldurur. SV'ler şuraya kopyalanır:
dizi, böylece av_make çağrısından sonra serbest bırakılabilirler. Yeni AV'de bir
referans sayısı 1.

Perl eşdeğeri: "benim @new_array = ($skalar1, $skalar2, $skalar3...);"

AV* av_make(SSize_t boyutu, SV **strp)

av_pop Dizinin sonundan bir SV'yi kaldırır, boyutunu bir azaltır ve geri döner
arayan kişiye SV (bir referans sayımının kontrolünü aktarma). İadeler
&PL_sv_undef dizi boşsa.

Perl eşdeğeri: "pop(@myarray);"

SV* av_pop(AV *av)

av_push Dizinin sonuna bir SV gönderir. Dizi otomatik olarak büyüyecek
eklemeyi kabul edin. Bu, bir referans sayısının sahipliğini alır.

Perl eşdeğeri: "push @myarray, $elem;".

geçersiz av_push(AV *av, SV *değer)

av_shift
Dizinin başlangıcından bir SV'yi kaldırır, boyutunu bir azaltır ve geri döner
arayan kişiye SV (bir referans sayımının kontrolünü aktarma). İadeler
&PL_sv_undef dizi boşsa.

Perl eşdeğeri: "shift(@myarray);"

SV* av_shift(AV *av)

av_store
Bir dizide bir SV depolar. Dizi indeksi "anahtar" olarak belirtilir. Geri dönüş
işlem başarısız olursa veya değerin olması gerekmiyorsa değer NULL olacaktır.
aslında dizi içinde depolanır (bağlı dizilerde olduğu gibi). Aksi takdirde
orada saklanan "SV*" (= "val") almak için başvurulabilir.

Arayanın, referans sayısını uygun şekilde artırmaktan sorumlu olduğunu unutmayın.
çağrıdan önce "val" ve işlev NULL döndürürse onu azaltır.

Yaklaşık Perl eşdeğeri: "$myarray[$key] = $val;".

Daha fazla bilgi için perlguts'ta "Bağlı Karmaların ve Dizilerin Sihrini Anlamak" bölümüne bakın
bağlı dizilerde bu işlevin nasıl kullanılacağı hakkında bilgi.

SV** av_store(AV *av, SSize_t anahtarı, SV *val)

av_tindex
"av_top_index()" ile aynı.

int av_tindex(AV* av)

av_top_index
Dizideki en yüksek dizini döndürür. Dizideki eleman sayısı
"av_top_index(av) + 1". Dizi boşsa -1 döndürür.

Bunun Perl karşılığı $#myarray'dir.

(Biraz daha kısa biçimi "av_tindex"tir.)

SSize_t av_top_index(AV *av)

av_undef
Dizinin tanımını kaldırır. "undef(@array)" ifadesinin XS eşdeğeri.

Dizinin tüm öğelerini ("av_clear()" gibi) serbest bırakmanın yanı sıra, bu aynı zamanda
av tarafından skaler listesini depolamak için kullanılan belleği boşaltır.

Dönüşte muhtemelen geçersiz olan dizi hakkında bir not için "av_clear" bölümüne bakın.

geçersiz av_undef(AV *av)

av_unshift
Verilen sayıda "undef" değerinin dizinin başlangıcına kaydırmasını kaldırın. bu
dizi, eklemeye uyum sağlamak için otomatik olarak büyüyecektir. o zaman kullanmalısın
Bu yeni öğelere değerler atamak için "av_store".

Perl eşdeğeri: "unshift @myarray, ( (undef) x $n );"

void av_unshift(AV *av, SSsize_t num)

get_av Belirtilen ada sahip belirtilen Perl global veya paket dizisinin AV'sini döndürür
(böylece sözcüksel değişkenler üzerinde çalışmaz). "bayraklar", "gv_fetchpv"ye geçirilir. Eğer
"GV_ADD" ayarlandı ve Perl değişkeni yoksa yaratılacak. Eğer
"flags" sıfırdır ve değişken mevcut değilse NULL döndürülür.

Perl eşdeğeri: "@{"$name"}".

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

AV* get_av(const char *isim, I32 bayrakları)

newAV Yeni bir AV oluşturur. Referans sayısı 1 olarak ayarlanmıştır.

Perl eşdeğeri: "benim @dizim;".

AV* yeniAV()

sortsv Bir diziyi sıralar. İşte bir örnek:

sortsv(AvARRAY(av), av_top_index(av)+1, Perl_sv_cmp_locale);

Şu anda bu her zaman mergesort kullanır. Daha esnek bir görünüm için sortsv_flags'a bakın
rutin.

void sortsv(SV** dizisi, size_t num_elts,
SVCOMPARE_t cmp)

sortv_flags
Bir diziyi çeşitli seçeneklerle sıralayın.

void sortsv_flags(SV** dizisi, size_t num_elts,
SVCOMPARE_t cmp, U32 bayrakları)

"xsubpp" değişkenler ve fonksiyonlar


tarafından kullanılan yığın tabanı ofsetini belirtmek için "xsubpp" tarafından ayarlanan ax Değişkeni
"ST", "XSprePUSH" ve "XSRETURN" makroları. "dMARK" makrosu önceden çağrılmalıdır
"MARK" değişkenini ayarlamak için.

I32 balta

Bir C++ XS için sınıf adını belirtmek üzere "xsubpp" tarafından ayarlanan SINIF Değişkeni
yapıcı. Bu her zaman bir "char*" dır. Bunu gör".

karakter* SINIF

dAX "ax" değişkenini ayarlar. Bu genellikle "xsubpp" tarafından otomatik olarak gerçekleştirilir.
"dXSARGS" çağırıyor.

dAX;

dAXMARK "ax" değişkenini ve yığın işaretleyici değişkeni "mark"ı ayarlar. Bu genellikle
"dXSARGS" çağrılarak "xsubpp" tarafından otomatik olarak işlenir.

dAXMARK;

dITEMS "itemler" değişkenini ayarlar. Bu genellikle "xsubpp" tarafından otomatik olarak gerçekleştirilir.
"dXSARGS"ı arayarak.

ÖZELLİKLER;

DÜĞÜN ÇUBUĞU
"UNDERBAR" makrosu tarafından ihtiyaç duyulan herhangi bir değişkeni ayarlar. tanımlamak için kullanılır
"padoff_du", ancak şu anda bir noop. Ancak, yine de şiddetle tavsiye edilir
geçmiş ve gelecek uyumluluğu sağlamak için kullanın.

DÜNDERBAR;

dXSARGS dSP ve dMARK'ı çağıran bir XSUB için yığın ve işaret işaretçileri kurar. ayarlar
"dAX" ve "dITEMS" çağrılarak "ax" ve "items" değişkenleri. Bu genellikle işlenir
"xsubpp" tarafından otomatik olarak.

dXSARGS;

dXSI32 Takma adları olan bir XSUB için "ix" değişkenini ayarlar. Bu genellikle işlenir
"xsubpp" tarafından otomatik olarak.

dXSI32;

öğeler Yığındaki öğelerin sayısını belirtmek için "xsubpp" tarafından ayarlanan değişken.
Perlxs'te "Değişken uzunluklu Parametre Listeleri"ne bakın.

I32 öğeleri

XSUB'un takma adlarından hangisinin olduğunu belirtmek için "xsubpp" tarafından ayarlanan ix Değişken
çağırmak için kullanılır. Perlxs'te "Anahtar Kelime: Anahtar Kelime" konusuna bakın.

I32ix

Bir XSUB için dönüş değerini tutmak için "xsubpp" tarafından ayarlanan RETVAL Değişkeni. Bu
her zaman XSUB için uygun tip. Perlxs'te "RETVAL Değişkeni" konusuna bakın.

(her neyse) GERİ DÖNÜŞ

ST XSUB yığınındaki öğelere erişmek için kullanılır.

SV* ST(int ix)

Nesneyi bir C++ XSUB'da belirtmek için "xsubpp" tarafından kurulan BU Değişken. Bu
her zaman C++ nesnesi için uygun tiptir. "SINIF" ve "XS'yi C++ ile Kullanma" konusuna bakın.
perlx'lerde.

(her neyse) BU

ALT ÇUBUK
$_ değişkenine karşılık gelen SV*. İçinde sözcüksel bir $_ olsa bile çalışır
dürbün.

Bir XSUB ve onun C parametre listesini bildirmek için XS Makrosu. Bu "xsubpp" tarafından gerçekleştirilir.
Daha açık olan XS_EXTERNAL makrosunu kullanmakla aynıdır.

XS_HARİCİ
Bir XSUB ve onun C parametre listesini açıkça dışa aktaran makro
semboller.

XS_DAHİLİ
Sembolleri dışa aktarmadan bir XSUB ve C parametre listesini bildirmek için makro.
Bu, "xsubpp" tarafından gerçekleştirilir ve genellikle XSUB'u dışa aktarmak yerine tercih edilir.
gereksiz yere simgeler.

Geri Arama fonksiyonlar


çağrı_argv
Belirtilen adlandırılmış ve paket kapsamlı Perl alt yordamına bir geri arama gerçekleştirir.
"argv" (NULL ile sonlandırılmış bir dize dizisi). Perlcall'a bakın.

Yaklaşık Perl eşdeğeri: "&{"$sub_name"}(@$argv)".

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

I32 call_argv(const char* alt_adı, I32 bayrakları,
karakter** argv)

çağrı_yöntemi
Belirtilen Perl yöntemine bir geri arama gerçekleştirir. Kutsanmış nesne açık olmalı
yığın. Perlcall'a bakın.

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

I32 call_method(const char* methname, I32 bayrakları)

call_pv Belirtilen Perl alt birimine bir geri arama gerçekleştirir. Perlcall'a bakın.

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

I32 call_pv(const char* alt_adı, I32 bayrakları)

call_sv SV tarafından belirtilen Perl alt öğesine bir geri arama gerçekleştirir.

"G_METHOD" veya "G_METHOD_NAMED" bayrağı sağlanmamışsa, SV herhangi biri olabilir.
CV, GV, CV referansı, GV veya "SvPV(sv)" referansı kullanılacaktır.
aranacak abonenin adı olarak.

"G_METHOD" bayrağı sağlanmışsa, SV bir CV'ye referans olabilir veya
Çağrılacak yöntemin adı olarak "SvPV(sv)" kullanılacaktır.

"G_METHOD_NAMED" bayrağı sağlanmışsa, "SvPV(sv)" adı olarak kullanılacaktır.
çağırma yöntemi.

Diğer bazı değerler dahili kullanım için özel olarak ele alınır ve kullanılmamalıdır.
bağlı.

Perlcall'a bakın.

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

I32 call_sv(SV* sv, VOL I32 bayrakları)

ENTER Bir geri aramada parantez açma. "BIRAK" ve perlcall'a bakın.

GİRMEK;

eval_pv Perl'e verilen dizgiyi skaler bağlamda "değerlendirmesini" ve bir SV* sonucu döndürmesini söyler.

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

SV* eval_pv(const char* p, I32 croak_on_error)

eval_sv Perl'e SV'deki dizeyi "değerlendirmesini" söyler. Aynı bayrakları destekler
G_EVAL'in bariz istisnası dışında "call_sv". Perlcall'a bakın.

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

I32 eval_sv(SV* sv, I32 bayrakları)

ÜCRETSİZ
Bir geri aramadaki geçiciler için kapanış braketi. Bkz. "SAVETMPS" ve perlcall.

ÜCRETSİZTMPS;

LEAVE Bir geri aramada parantez kapatma. "ENTER" ve perlcall'a bakın.

AYRILMAK;

KAYDETTMPS
Geri aramadaki geçiciler için parantez açma. "FREETMPS" ve perlcall'a bakın.

KAYDETTMPS;

Karakter dava değiştirme


toFOLD Belirtilen karakteri katlama durumuna dönüştürür. Giriş bir şey dışında bir şey ise
ASCII büyük harf karakteri, bu giriş karakterinin kendisi döndürülür. varyant
"toFOLD_A" eşdeğerdir. (Tam metin için "to_FOLD_L1" eşdeğeri yoktur.
Latin1 aralığı, "toFOLD_uni"nin tam genelliği burada gereklidir.)

U8 toFOLD(U8 kanal)

FOLD_uni'ye
Unicode kod noktası "cp"yi kendi katlanır kılıf versiyonuna dönüştürür ve bunu içinde saklar.
"s" cinsinden UTF-8 ve "lenp" cinsinden bayt cinsinden uzunluğu. Tamponun işaret ettiğini unutmayın
by "s", katlama durumundan bu yana en az "UTF8_MAXBYTES_CASE+1" bayt olmalıdır
sürüm orijinal karakterden daha uzun olabilir.

Katlanmış versiyonun ilk kod noktası döndürülür (ancak açıklandığı gibi not edin
hemen yukarıda, daha fazlası olabilir.)

UV toFOLD_uni(UV cp, U8* s, STRLEN* lenp)

FOLD_utf8'e
"p" noktasındaki UTF-8 kodlu karakteri, katlama kutusu sürümüne dönüştürür ve depolar
UTF-8'de "s" cinsinden ve uzunluğu bayt cinsinden "lenp" cinsindendir. tampon olduğunu unutmayın
"s" ile gösterilen en az "UTF8_MAXBYTES_CASE+1" bayt olmalıdır.
Foldcase versiyonu orijinal karakterden daha uzun olabilir.

Katlanmış versiyonun ilk kod noktası döndürülür (ancak açıklandığı gibi not edin
hemen yukarıda, daha fazlası olabilir.)

"p"deki giriş karakterinin iyi biçimli olduğu varsayılır.

UV toFOLD_utf8(U8* p, U8* s, STRLEN* lenp)

toLOWER Belirtilen karakteri küçük harfe dönüştürür. Giriş bir şey dışında bir şey ise
ASCII büyük harf karakteri, bu giriş karakterinin kendisi döndürülür. varyant
"toLOWER_A" eşdeğerdir.

U8 ila DÜŞÜK(U8 kanal)

LOWER_L1'e
Belirtilen Latin1 karakterini küçük harfe dönüştürür. Sonuçlar tanımsız
giriş bir bayta sığmıyorsa.

U8 toLOWER_L1(U8 kanal)

LOWER_LC'ye
Geçerli yerel ayarın kurallarını kullanarak belirtilen karakteri küçük harfe dönüştürür, eğer
mümkün; aksi takdirde giriş karakterinin kendisini döndürür.

U8 toLOWER_LC(U8 kanal)

LOWER_uni'ye
Unicode kod noktası "cp"yi küçük harfli versiyonuna dönüştürür ve bunu
"s" cinsinden UTF-8 ve "lenp" cinsinden bayt cinsinden uzunluğu. Tamponun işaret ettiğini unutmayın
by "s", küçük harf olduğundan en az "UTF8_MAXBYTES_CASE+1" bayt olmalıdır
sürüm orijinal karakterden daha uzun olabilir.

Küçük harfli sürümün ilk kod noktası döndürülür (ancak açıklandığı gibi not edin
hemen yukarıda, daha fazlası olabilir.)

UV toLOWER_uni(UV cp, U8* s, STRLEN* lenp)

LOWER_utf8'e
"p" noktasındaki UTF-8 kodlu karakteri küçük harfli sürümüne dönüştürür ve depolar
UTF-8'de "s" cinsinden ve uzunluğu bayt cinsinden "lenp" cinsindendir. tampon olduğunu unutmayın
"s" ile gösterilen en az "UTF8_MAXBYTES_CASE+1" bayt olmalıdır.
küçük harf versiyonu orijinal karakterden daha uzun olabilir.

Küçük harfli sürümün ilk kod noktası döndürülür (ancak açıklandığı gibi not edin
hemen yukarıda, daha fazlası olabilir.)

"p"deki giriş karakterinin iyi biçimli olduğu varsayılır.

UV toLOWER_utf8(U8* s, U8* s, STRLEN* lenp)

toTITLE Belirtilen karakteri başlık durumuna dönüştürür. Giriş bir şey dışında bir şey ise
ASCII küçük harf karakteri, bu giriş karakterinin kendisi döndürülür. varyant
"toTITLE_A" eşdeğerdir. (Latin1 aralığının tamamı için "toTITLE_L1" yoktur,
"toTITLE_uni"nin tam genelliğine burada ihtiyaç duyulduğu için. Başlık bir değil
yerel ayar işlemede kullanılan kavram, bu nedenle bunun için bir işlevsellik yoktur.)

U8 toTITLE(U8 kanal)

TITLE_uni'ye
Unicode kod noktası "cp"yi başlık durumu sürümüne dönüştürür ve bunu
"s" cinsinden UTF-8 ve "lenp" cinsinden bayt cinsinden uzunluğu. Tamponun işaret ettiğini unutmayın
by "s", başlıktan bu yana en az "UTF8_MAXBYTES_CASE+1" bayt olmalıdır
sürüm orijinal karakterden daha uzun olabilir.

Başlıklı versiyonun ilk kod noktası döndürülür (ancak açıklandığı gibi not edin
hemen yukarıda, daha fazlası olabilir.)

UV toTITLE_uni(UV cp, U8* s, STRLEN* lenp)

TITLE_utf8'e
"p" noktasındaki UTF-8 kodlu karakteri başlık durumu sürümüne dönüştürür ve depolar
UTF-8'de "s" cinsinden ve uzunluğu bayt cinsinden "lenp" cinsindendir. tampon olduğunu unutmayın
"s" ile gösterilen en az "UTF8_MAXBYTES_CASE+1" bayt olmalıdır.
başlık versiyonu orijinal karakterden daha uzun olabilir.

Başlıklı versiyonun ilk kod noktası döndürülür (ancak açıklandığı gibi not edin
hemen yukarıda, daha fazlası olabilir.)

"p"deki giriş karakterinin iyi biçimli olduğu varsayılır.

UV toTITLE_utf8(U8* s, U8* s, STRLEN* lenp)

toUPPER Belirtilen karakteri büyük harfe dönüştürür. Giriş bir şey dışında bir şey ise
ASCII küçük harf karakteri, bu giriş karakterinin kendisi döndürülür. varyant
"toUPPER_A" eşdeğerdir.

U8 ilaÜST(U8 kanal)

UPPER_uni'ye
Unicode kod noktası "cp"yi büyük harf versiyonuna dönüştürür ve bunu
"s" cinsinden UTF-8 ve "lenp" cinsinden bayt cinsinden uzunluğu. Tamponun işaret ettiğini unutmayın
by "s" büyük harften beri en az "UTF8_MAXBYTES_CASE+1" bayt olmalıdır
sürüm orijinal karakterden daha uzun olabilir.

Büyük harfli versiyonun ilk kod noktası döndürülür (ancak açıklandığı gibi not edin
hemen yukarıda, daha fazlası olabilir.)

UV toUPPER_uni(UV cp, U8* s, STRLEN* lenp)

UPPER_utf8'e
"p" noktasındaki UTF-8 kodlu karakteri büyük harf versiyonuna dönüştürür ve depolar
UTF-8'de "s" cinsinden ve uzunluğu bayt cinsinden "lenp" cinsindendir. tampon olduğunu unutmayın
"s" ile gösterilen en az "UTF8_MAXBYTES_CASE+1" bayt olmalıdır.
büyük harf versiyonu orijinal karakterden daha uzun olabilir.

Büyük harfli versiyonun ilk kod noktası döndürülür (ancak açıklandığı gibi not edin
hemen yukarıda, daha fazlası olabilir.)

"p"deki giriş karakterinin iyi biçimli olduğu varsayılır.

UV toUPPER_utf8(U8* s, U8* s, STRLEN* lenp)

Karakter sınıflandırma


Bu bölüm, karakterleri türlere göre sınıflandıran işlevler (gerçekten makrolar) hakkındadır.
noktalama işaretlerine karşı alfabetik vb. olarak. Bunların çoğu normal ifadeye benzer
karakter sınıfları. (Perlrecharclass'ta "POSIX Karakter Sınıfları"na bakın.) Birkaç tane vardır.
Her sınıf için varyantlar. (Tüm makroların tüm varyantları yoktur; aşağıdaki her öğe aşağıdakileri listeler:
onun için geçerli olanlar.) Hiçbiri "kullanım baytlarından" etkilenmez ve yalnızca "LC" içerenler
ad geçerli yerel ayardan etkilenir.

Temel işlev, örneğin "isALPHA()", girdi olarak bir sekizli ("char" veya "U8") alır
ve o sekizli tarafından temsil edilen karakterin (veya
ASCII olmayan platformlarda, aşağıdakilere dayalı olarak adlandırılmış sınıftaki bir ASCII karakterine karşılık gelir:
platform, Unicode ve Perl kuralları. Giriş, bir sekizliye sığmayan bir sayıysa,
YANLIŞ döndürülür.

"isFOO_A" değişkeni (örneğin, "isALPHA_A()"), son eki olmayan temel işlevle aynıdır
"_A".

"isFOO_L1" varyantı, Latin-1 (veya EBCDIC eşdeğeri) karakter kümesini
platform. Yani, ASCII bir alt küme olduğundan, ASCII olan kod noktaları etkilenmez.
Latince-1. Ancak ASCII olmayan kod noktalarına Latin-1 karakterleriymiş gibi davranılır.
Örneğin, "isWORDCHAR_L1()", 0xDF kod noktasıyla çağrıldığında true değerini döndürür,
hem ASCII hem de EBCDIC'de bir kelime karakteri olan (farklıları temsil etse de)
her birinde karakterler).

"isFOO_uni" varyantı, "isFOO_L1" varyantına benzer, ancak herhangi bir UV kod noktasını şu şekilde kabul eder:
giriş. Kod noktası 255'ten büyükse, olup olmadığını belirlemek için Unicode kuralları kullanılır.
karakter sınıfında. Örneğin, "isWORDCHAR_uni(0x100)", 0x100 olduğu için DOĞRU döndürür
LATİN BÜYÜK A HARFİ MAKRON İLE Unicode'da ve bir kelime karakteridir.

"isFOO_utf8" varyantı "isFOO_uni" gibidir, ancak girdi bir işaretçidir (olduğu bilinmektedir
iyi biçimlendirilmiş) UTF-8 kodlu dize ("U8*" veya "char*"). Sadece sınıflandırma
dizedeki ilk (muhtemelen çok baytlı) karakter test edilir.

"isFOO_LC" varyantı, "isFOO_A" ve "isFOO_L1" varyantları gibidir, ancak sonuç
mevcut yerel ayarda, adındaki "LC"nin anlamı budur. Perl belirleyebilirse
geçerli yerel ayarın bir UTF-8 yerel ayarı olduğunu, yayınlanmış Unicode kurallarını kullandığına; aksi halde,
adlandırılmış sınıflandırmayı veren C kitaplığı işlevini kullanır. Örneğin,
"isDIGIT_LC()", bir UTF-8 yerel ayarında olmadığında, "isdigit()" çağrısının sonucunu döndürür.
Giriş bir sekizliye sığmazsa her zaman FALSE döndürülür. Bazı platformlarda
C kitaplığı işlevinin kusurlu olduğu biliniyorsa, Perl sonucunu aşağıdaki şekilde değiştirir:
POSIX standardının kuralları.

"isFOO_LC_uvchr" varyantı "isFOO_LC" gibidir, ancak herhangi bir UV'de tanımlanır. şunu döndürür:
256'dan küçük giriş kodu noktaları için "isFOO_LC" ile aynıdır ve sabit kodlanmış olanı döndürür, değil-
yerel ayardan etkilenen, daha büyük olanlar için Unicode sonuçları.

"isFOO_LC_utf8" varyantı "isFOO_LC_uvchr" gibidir, ancak girdi bir (bilinen) işaretçisidir.
iyi biçimlendirilmiş olmak için) UTF-8 kodlu dize ("U8*" veya "char*"). sadece sınıflandırma
dizedeki ilk (muhtemelen çok baytlı) karakter test edilir.

isALPHA Belirtilen karakterin alfabetik olup olmadığını gösteren bir boole döndürür
"m/[[:alpha:]]/" ile benzer karakter. için bu bölümün üst kısmına bakın.
"isALPHA_A", "isALPHA_L1", "isALPHA_uni", "isALPHA_utf8" varyantlarının açıklaması,
"isALPHA_LC", "isALPHA_LC_uvchr" ve "isALPHA_LC_utf8".

boolALPHA(karakter ch)

alfanümerik
Belirtilen karakterin bir boolean olup olmadığını gösteren bir boole döndürür.
"m/[[:alnum:]]/" ile benzer alfabetik karakter veya ondalık basamak. yukarıya bakın
"isALPHANUMERIC_A" varyantlarının açıklaması için bu bölümün,
"isALPHANUMERIC_L1", "isALPHANUMERIC_uni", "isALPHANUMERIC_utf8",
"isALPHANUMERIC_LC", "isALPHANUMERIC_LC_uvchr" ve "isALPHANUMERIC_LC_utf8".

bool alfanümerik(char ch)

isASCII Belirtilen karakterin 128 karakterden biri olup olmadığını gösteren bir boole döndürür.
ASCII karakter kümesindeki karakterler, "m/[[:ascii:]]/"ye benzer. olmayan
ASCII platformlarında, bu karakter bir ASCII'ye karşılık geliyorsa TRUE döndürür
karakter. "isASCII_A()" ve "isASCII_L1()" varyantları ile aynıdır
"isASCII()". Varyantların açıklaması için bu bölümün üst kısmına bakın
"isASCII_uni", "isASCII_utf8", "isASCII_LC", "isASCII_LC_uvchr" ve
"isASCII_LC_utf8". Ancak bazı platformlarda C kütüphanesinin bulunmadığını unutmayın.
rutin "isascii()". Bu durumlarda, adları "LC" içeren varyantlar
olmayan karşılık gelenlerle aynı.

Ayrıca, tüm ASCII karakterleri UTF-8 değişmez olduğundan (yani
UTF-8'de kodlanmış olsun, tam olarak aynı temsile (her zaman tek bir bayt) sahip olun
veya değil), "isASCII" herhangi bir bayt ile çağrıldığında doğru sonuçları verecektir.
dize kodlanmış veya UTF-8'de değil. Ve benzer şekilde "isASCII_utf8" düzgün çalışacak
UTF-8'de kodlanmış veya kodlanmamış herhangi bir dizede.

bool ASCII(karakter ch)

isBLANK Belirtilen karakterin bir karakter olup olmadığını gösteren bir boole döndürür
"m/[[:blank:]]/" ile benzer şekilde boş olarak kabul edilir. bunun üst kısmına bakın
"isBLANK_A", "isBLANK_L1", "isBLANK_uni" varyantlarının açıklaması için bölüm,
"isBLANK_utf8", "isBLANK_LC", "isBLANK_LC_uvchr" ve "isBLANK_LC_utf8". Not,
ancak, bazı platformlarda C kitaplığı rutini "isblank()" yoktur. İçinde
bu durumlarda, adları "LC" içeren varyantlar,
karşılık gelenler olmadan.

boolBLANK(karakter ch)

isCNTRL Belirtilen karakterin bir kontrol olup olmadığını gösteren bir boole döndürür
"m/[[:cntrl:]]/" ile benzer karakter. için bu bölümün üst kısmına bakın.
"isCNTRL_A", "isCNTRL_L1", "isCNTRL_uni", "isCNTRL_utf8" varyantlarının açıklaması,
"isCNTRL_LC", "isCNTRL_LC_uvchr" ve "isCNTRL_LC_utf8" EBCDIC platformlarında,
neredeyse her zaman "isCNTRL_L1" varyantını kullanmak ister.

boolCNTRL(karakter ch)

isDIGIT Belirtilen karakterin benzer bir rakam olup olmadığını gösteren bir boole döndürür
"m/[[:rakam:]]/" olarak. "isDIGIT_A" ve "isDIGIT_L1" varyantları ile aynıdır
"isDIGIT". Varyantların açıklaması için bu bölümün üst kısmına bakın
"isDIGIT_uni", "isDIGIT_utf8", "isDIGIT_LC", "isDIGIT_LC_uvchr" ve
"isDIGIT_LC_utf8".

bool isDIGIT(karakter ch)

isGRAPH Belirtilen karakterin bir grafik olup olmadığını gösteren bir boole döndürür
"m/[[:grafik:]]/" ile benzer karakter. için bu bölümün üst kısmına bakın.
"isGRAPH_A", "isGRAPH_L1", "isGRAPH_uni", "isGRAPH_utf8" varyantlarının açıklaması,
"isGRAPH_LC", "isGRAPH_LC_uvchr" ve "isGRAPH_LC_utf8".

bool:GRAPH(karakter ch)

isIDCONT
Belirtilen karakterin ikinci mi yoksa ikinci mi olabileceğini belirten bir boole döndürür.
bir tanımlayıcının sonraki karakteri. Bu çok yakın, ama tam olarak değil
resmi Unicode özelliği "XID_Continue" ile aynı. Fark şu ki, bu
yalnızca giriş karakteri "isWORDCHAR" ile eşleşirse true değerini döndürür. yukarıya bakın
"isIDCONT_A", "isIDCONT_L1" değişkenlerinin açıklaması için bu bölümün,
"isIDCONT_uni", "isIDCONT_utf8", "isIDCONT_LC", "isIDCONT_LC_uvchr" ve
"isIDCONT_LC_utf8".

bool IDCONT(karakter ch)

isIDFIRST
Belirtilen karakterin ilk olup olmayacağını belirten bir boole döndürür
bir tanımlayıcının karakteri. Buna çok yakın, ancak tam olarak aynı değil.
resmi Unicode özelliği "XID_Start". Aradaki fark, bunun doğru olması
yalnızca giriş karakteri "isWORDCHAR" ile de eşleşirse. bunun üst kısmına bakın
"isIDFIRST_A", "isIDFIRST_L1" değişkenlerinin açıklaması için bölüm,
"isIDFIRST_uni", "isIDFIRST_utf8", "isIDFIRST_LC", "isIDFIRST_LC_uvchr" ve
"isIDFIRST_LC_utf8".

boolIDFIRST(karakter ch)

isLOWER Belirtilen karakterin küçük harf olup olmadığını gösteren bir boole döndürür
"m/[[:low:]]/" ile benzer karakter. için bu bölümün üst kısmına bakın.
"isLOWER_A", "isLOWER_L1", "isLOWER_uni", "isLOWER_utf8" değişkenlerinin açıklaması,
"isLOWER_LC", "isLOWER_LC_uvchr" ve "isLOWER_LC_utf8".

bool LOWER(char ch)

isOCTAL Belirtilen karakterin sekizlik bir rakam olup olmadığını gösteren bir boole döndürür,
[0-7]. Yalnızca iki değişken "isOCTAL_A" ve "isOCTAL_L1"; her biri aynı
"isOCTAL" için.

bool OCTAL(karakter ch)

isPRINT Belirtilen karakterin yazdırılabilir olup olmadığını gösteren bir boole döndürür
"m/[[:print:]]/" ile benzer karakter. için bu bölümün üst kısmına bakın.
"isPRINT_A", "isPRINT_L1", "isPRINT_uni", "isPRINT_utf8" değişkenlerinin açıklaması,
"isPRINT_LC", "isPRINT_LC_uvchr" ve "isPRINT_LC_utf8".

bool isPRINT(karakter ch)

isPSXSPC
(Posix Space'in kısaltması) 5.18'den başlayarak, bu tüm biçimleriyle aynıdır.
karşılık gelen "isSPACE()" makroları. Bu makronun yerel ayar biçimleri
tüm Perl sürümlerinde karşılık gelen "isSPACE()" formlarıyla aynıdır. İçinde
5.18'den önceki sürümlerde, yerel olmayan formlar "isSPACE()" formlarından farklıdır
yalnızca "isSPACE()" formlarının bir Dikey Sekmeyle eşleşmemesi ve
"isPSXSPC()" formları yapar. Aksi takdirde özdeştirler. Böylece bu makro
normal bir ifadede "m/[[:space:]]/" ifadesinin eşleşmesine benzer. yukarıya bakın
"isPSXSPC_A", "isPSXSPC_L1" varyantlarının açıklaması için bu bölümün,
"isPSXSPC_uni", "isPSXSPC_utf8", "isPSXSPC_LC", "isPSXSPC_LC_uvchr" ve
"isPSXSPC_LC_utf8".

bool PSXSPC(karakter ch)

isPUNCT Belirtilen karakterin bir noktalama işareti olup olmadığını gösteren bir boole döndürür
"m/[[:punkt:]]/" ile benzer karakter. Neyin tanımının olduğuna dikkat edin.
noktalama işaretleri istendiği kadar basit değildir. Bkz. "POSIX Karakteri
Ayrıntılar için perlrecharclass'ta "sınıflar".
"isPUNCT_A", "isPUNCT_L1", "isPUNCT_uni", "isPUNCT_utf8" değişkenlerinin açıklaması,
"isPUNCT_LC", "isPUNCT_LC_uvchr" ve "isPUNCT_LC_utf8".

bool PUNCT(karakter ch)

isSPACE Belirtilen karakterin bir boşluk olup olmadığını gösteren bir boole döndürür
karakter. Bu, normal bir ifadede "m/\s/"nin eşleştiği şeye benzer.
Perl 5.18'den başlayarak, bu aynı zamanda "m/[[:space:]]/" ile de eşleşir. Önce
5.18, sadece bu makronun yerel formları (adlarında "LC" olanlar)
"m/[[:space:]]/" ile tam olarak eşleşti. Bu yayınlarda sadece
yerel olmayan değişkenlerdeki fark, "isSPACE()" öğesinin bir
dikey sekme. (Tümünde dikey bir sekmeyle eşleşen bir makro için "isPSXSPC"ye bakın).
sürümleri.) Varyantların açıklaması için bu bölümün üst kısmına bakın.
"isSPACE_A", "isSPACE_L1", "isSPACE_uni", "isSPACE_utf8", "isSPACE_LC",
"isSPACE_LC_uvchr" ve "isSPACE_LC_utf8".

bool isSPACE(karakter ch)

isUPPER Belirtilen karakterin büyük harf olup olmadığını gösteren bir boole döndürür
"m/[[:upper:]]/" ile benzer karakter. için bu bölümün üst kısmına bakın.
"isUPPER_A", "isUPPER_L1", "isUPPER_uni", "isUPPER_utf8" varyantlarının açıklaması,
"isUPPER_LC", "isUPPER_LC_uvchr" ve "isUPPER_LC_utf8".

bool ÜSTÜN(karakter ch)

isWORDCHAR
Belirtilen karakterin bir karakter olup olmadığını gösteren bir boole döndürür.
"m/\w/" ve "m/[[:word:]]/" ile eşleşen bir sözcük karakteridir.
Düzenli ifade. Bir kelime karakteri bir alfabetik karakterdir, bir ondalık basamaktır,
bir bağlantı noktalama karakteri (alt çizgi gibi) veya bir "işaret" karakteri
bunlardan birine bağlı olan (bir çeşit aksan gibi). "isALNUM()" bir
bir sözcük karakteri şunları içerse bile, geriye dönük uyumluluk için sağlanan eşanlamlı
alfasayısalın standart C dilindeki anlamından daha fazlası. bunun üst kısmına bakın
"isWORDCHAR_A", "isWORDCHAR_L1" değişkenlerinin açıklaması için bölüm,
"isWORDCHAR_uni" ve "isWORDCHAR_utf8". "isWORDCHAR_LC", "isWORDCHAR_LC_uvchr",
ve "isWORDCHAR_LC_utf8" de orada açıklandığı gibidir, ancak ek olarak şunları içerir:
platformun yerel alt çizgisi.

boolWORDCHAR(karakter ch)

isXDIGIT
Belirtilen karakterin onaltılık sayı olup olmadığını gösteren bir boole döndürür
hane. ASCII aralığında bunlar "[0-9A-Fa-f]" şeklindedir. Varyantlar "isXDIGIT_A()" ve
"isXDIGIT_L1()", "isXDIGIT()" ile aynıdır. için bu bölümün üst kısmına bakın.
"isXDIGIT_uni", "isXDIGIT_utf8", "isXDIGIT_LC" varyantlarının açıklaması,
"isXDIGIT_LC_uvchr" ve "isXDIGIT_LC_utf8".

bool XDIGIT(karakter ch)

Klonlama an çevirmen


perl_clone
Mevcut olanı klonlayarak yeni bir yorumlayıcı oluşturun ve döndürün.

perl_clone bu bayrakları parametre olarak alır:

CLONEf_COPY_STACKS - yığınları da kopyalamak için kullanılır, onsuz sadece
verileri klonlayın ve yığınları sıfırlayın, bununla birlikte yığınları ve yeni Perl'i kopyalarız
yorumlayıcı, öncekiyle tam olarak aynı noktada çalışmaya hazırdır. bu
sözde çatal kodu, thread->create kullanmazken COPY_STACKS kullanır.

CLONEf_KEEP_PTR_TABLE - perl_clone, eski işaretçiyle bir ptr_table tutar
anahtar olarak değişken ve değer olarak yeni değişken, bu,
bir şey klonlandı ve bir daha klonlamayın, bunun yerine sadece değeri kullanın ve
refcount'u artırın. KEEP_PTR_TABLE ayarlanmazsa, perl_clone
ptr_table "ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;" işlevini kullanarak,
Etrafta tutmanın nedeni, kendi değişkeninizden bazılarını kopyalamak istemenizdir.
grafik perl taramalarının dışında, bu kodun örneği threads.xs oluşturma içindedir.

CLONEf_CLONE_HOST - Bu bir win32 olayıdır, unix'te yoksayılır, perls'e söyler
kendini klonlamak için win32host kodu (c ++), isterseniz bu win32'de gereklidir
aynı anda iki iş parçacığı çalıştırmak için, sadece bir dizide bazı şeyler yapmak istiyorsanız
perl yorumlayıcısını ayırın ve ardından atın ve orijinaline geri dönün,
hiçbir şey yapmana gerek yok.

Perl Yorumlayıcı* perl_clone(
PerlTercüman *proto_perl,
UV bayrakları
)

Derleme zamanı kapsam kancalar


BhkDEVRE DIŞI
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Uygun öğeleri temizleyerek bu BHK yapısındaki bir girişi geçici olarak devre dışı bırakın.
bayrağı. hangi hangi girişin devre dışı bırakılacağını gösteren bir önişlemci belirtecidir.

void BhkDISABLE(BHK *hk, hangisi)

BhkENABLE
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Uygun bayrağı ayarlayarak bu BHK yapısında bir girişi yeniden etkinleştirin. hangi
hangi girişin etkinleştirileceğini gösteren bir önişlemci belirtecidir. Bu iddia edecek (altında
-DEBUGING) giriş geçerli bir işaretçi içermiyorsa.

void BhkENABLE(BHK *hk, hangisi)

BhkENTRY_set
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

BHK yapısında bir giriş ayarlayın ve geçerli olduğunu belirtmek için bayrakları ayarlayın.
hangi hangi girişin ayarlanacağını gösteren bir ön işleme belirtecidir. türü ptr
girişine bağlıdır.

void BhkENTRY_set(BHK *hk, hangi, void *ptr)

blok kancası_register
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Perl sözcüksel kapsamı değiştiğinde çağrılacak bir dizi kancayı kaydedin.
Derleme zamanı. Perlguts'ta "Derleme zamanı kapsam kancaları" konusuna bakın.

NOT: bu işlev, açıkça Perl_blockhook_register olarak çağrılmalıdır.
aTHX_ parametresi.

geçersiz Perl_blockhook_register(pTHX_ BHK *hk)

COP Ipucu Hash'ler


cophh_2hv
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Anahtar/değer setinin tamamını temsil eden standart bir Perl karması oluşturur ve döndürür
polisteki çiftler hash ipucu veriyor kahve. bayraklar şu anda kullanılmamaktadır ve sıfır olmalıdır.

HV * cophh_2hv(const COPHH *cophh, U32 bayrakları)

cophh_copy
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Polis ipuçları karmasının tam bir kopyasını oluşturun ve iade edin kahve.

KOPHH * cophh_copy(COPHH *cophh)

cophh_delete_pv
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"cophh_delete_pvn" gibi, ancak bir yerine boş sonlandırılmış bir dize alır
dizi/uzunluk çifti.

COPHH * cophh_delete_pv(const COPHH *cophh,
const char *key, U32 karma,
U32 bayrakları)

cophh_delete_pvn
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Polis ipuçları karmasından bir anahtarı ve onunla ilişkili değeri silin kahve, ve döner
değiştirilmiş karma. Döndürülen karma işaretçi, genel olarak
geçirilen hash işaretçisi. Girdi karma, işlev tarafından tüketilir ve
işaretçi daha sonra kullanılmamalıdır. Gerekirse "cophh_copy" kullanın
her iki karma.

Anahtar tarafından belirtilir keypv ve Keylen. Eğer bayraklar "COPHH_KEY_UTF8" bitine sahip
set, anahtar sekizliler UTF-8 olarak yorumlanır, aksi halde şu şekilde yorumlanırlar:
Latince-1. esrar anahtar dizginin önceden hesaplanmış bir karmasıdır, ya da daha önce yapılmamışsa sıfırdır.
önceden hesaplanmış.

KOPHH * cophh_delete_pvn(COPHH *cophh,
const char *keypv,
STRLEN keylen, U32 karma,
U32 bayrakları)

cophh_delete_pvs
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"cophh_delete_pvn" gibi, ancak dize/uzunluk yerine değişmez bir dize alır
çifti ve önceden hesaplanmış karma yok.

COPHH * cophh_delete_pvs(const COPHH *cophh,
const char *key, U32 bayrakları)

cophh_delete_sv
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"cophh_delete_pvn" gibi, ancak bir dizi/uzunluk çifti yerine bir Perl skaleri alır.

COPHH * cophh_delete_sv(const COPHH *cophh, SV *anahtar,
U32 karma, U32 bayrakları)

cophh_fetch_pv
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"cophh_fetch_pvn" gibi, ancak bir yerine boş sonlandırılmış bir dize alır
dizi/uzunluk çifti.

SV * cophh_fetch_pv(const COPHH *cophh,
const char *key, U32 karma,
U32 bayrakları)

cophh_fetch_pvn
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Polis ipuçları karmasındaki girişe bakın kahve tarafından belirtilen anahtarla keypv ve
Keylen. Eğer bayraklar "COPHH_KEY_UTF8" bit kümesine sahipse, anahtar sekizlileri yorumlanır
UTF-8 olarak, aksi takdirde Latin-1 olarak yorumlanırlar. esrar önceden hesaplanmış bir karmadır
anahtar dizesinin veya önceden hesaplanmamışsa sıfır. Bir ölümlü döndürür
anahtarla ilişkili değerin skaler kopyası veya varsa &PL_sv_placeholder
anahtarla ilişkili bir değer yok.

SV * cophh_fetch_pvn(const COPHH *cophh,
const char *keypv,
STRLEN keylen, U32 karma,
U32 bayrakları)

cophh_fetch_pvs
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"cophh_fetch_pvn" gibi, ancak dize/uzunluk yerine değişmez bir dize alır
çifti ve önceden hesaplanmış karma yok.

SV * cophh_fetch_pvs(const COPHH *cophh,
const char *key, U32 bayrakları)

cophh_fetch_sv
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"cophh_fetch_pvn" gibi, ancak bir dizi/uzunluk çifti yerine bir Perl skaleri alır.

SV * cophh_fetch_sv(const COPHH *cophh, SV *anahtar,
U32 karma, U32 bayrakları)

cophh_free
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Polis ipuçları karma atın kahve, onunla ilişkili tüm kaynakları serbest bırakmak.

geçersiz cophh_free(COPHH *cophh)

cophh_new_empty
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Hiçbir girdi içermeyen yeni bir polis ipuçları karması oluşturun ve döndürün.

COPHH * cophh_new_empty()

cophh_store_pv
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"cophh_store_pvn" gibi, ancak bir yerine boş sonlandırılmış bir dize alır
dizi/uzunluk çifti.

COPHH * cophh_store_pv(const COPHH *cophh,
const char *key, U32 karma,
SV *değeri, U32 bayrakları)

cophh_store_pvn
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Polis ipuçları karmasında bir anahtarla ilişkili bir değeri depolar kahve, ve döner
değiştirilmiş karma. Döndürülen karma işaretçi, genel olarak
geçirilen hash işaretçisi. Girdi karma, işlev tarafından tüketilir ve
işaretçi daha sonra kullanılmamalıdır. Gerekirse "cophh_copy" kullanın
her iki karma.

Anahtar tarafından belirtilir keypv ve Keylen. Eğer bayraklar "COPHH_KEY_UTF8" bitine sahip
set, anahtar sekizliler UTF-8 olarak yorumlanır, aksi halde şu şekilde yorumlanırlar:
Latince-1. esrar anahtar dizginin önceden hesaplanmış bir karmasıdır, ya da daha önce yapılmamışsa sıfırdır.
önceden hesaplanmış.

değer bu anahtar için saklanacak skaler değerdir. değer bunun tarafından kopyalanır
bu nedenle kendisine herhangi bir referansın sahipliğini almayan işlev ve daha sonra
skalerdeki değişiklikler polis ipuçlarında görünen değere yansıtılmayacaktır.
doğramak. Karmaşık skaler türleri referans bütünlüğü ile saklanmaz, ancak
iplere zorlanacak.

COPHH * cophh_store_pvn(COPHH *cophh, const char *keypv,
STRLEN keylen, U32 karma,
SV *değeri, U32 bayrakları)

cophh_store_pvs
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"cophh_store_pvn" gibi, ancak dize/uzunluk yerine değişmez bir dize alır
çifti ve önceden hesaplanmış karma yok.

COPHH * cophh_store_pvs(const COPHH *cophh,
const char *anahtar, SV *değer,
U32 bayrakları)

cophh_store_sv
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"cophh_store_pvn" gibi, ancak bir dizi/uzunluk çifti yerine bir Perl skaleri alır.

COPHH * cophh_store_sv(const COPHH *cophh, SV *anahtar,
U32 karma, SV *değeri, U32 bayrakları)

COP Ipucu Okuma


polis_hints_2hv
Tam ipucu kümesini temsil eden standart bir Perl karması oluşturur ve döndürür
polis girişleri polis. bayraklar şu anda kullanılmamaktadır ve sıfır olmalıdır.

HV * cop_hints_2hv(const COP *cop, U32 bayrakları)

polis_hints_fetch_pv
"cop_hints_fetch_pvn" gibi, ancak bir yerine boş sonlandırılmış bir dize alır
dizi/uzunluk çifti.

SV * cop_hints_fetch_pv(const COP *polis,
const char *key, U32 karma,
U32 bayrakları)

cop_hints_fetch_pvn
Polisteki ipucu girişine bakın polis tarafından belirtilen anahtarla keypv ve Keylen.
If bayraklar "COPHH_KEY_UTF8" bit kümesine sahipse, anahtar sekizlileri şu şekilde yorumlanır:
UTF-8, aksi takdirde Latin-1 olarak yorumlanırlar. esrar önceden hesaplanmış bir karmadır
anahtar dizesi veya önceden hesaplanmamışsa sıfır. Ölümlü bir skaler döndürür
anahtarla ilişkili değerin kopyası veya yoksa &PL_sv_placeholder
anahtarla ilişkili değer.

SV * cop_hints_fetch_pvn(const COP *polis,
const char *keypv,
STRLEN keylen, U32 karma,
U32 bayrakları)

cop_hints_fetch_pvs
"cop_hints_fetch_pvn" gibi, ancak dize/uzunluk yerine değişmez bir dize alır
çifti ve önceden hesaplanmış karma yok.

SV * cop_hints_fetch_pvs(const COP *polis,
const char *key, U32 bayrakları)

cop_hints_fetch_sv
"cop_hints_fetch_pvn" gibi, ancak bir dize/uzunluk yerine bir Perl skalar alır
çifti.

SV * cop_hints_fetch_sv(const COP *polis, SV *anahtar,
U32 karma, U32 bayrakları)

görenek Operatörler


özel_op_register
Özel bir operasyon kaydedin. Perlguts'ta "Özel Operatörler"e bakın.

NOT: bu işlev, açıkça Perl_custom_op_register olarak çağrılmalıdır.
aTHX_ parametresi.

geçersiz Perl_custom_op_register(pTHX_
Perl_ppaddr_t ppaddr,
sabit XOP *xop)

özel_op_xop
Belirli bir özel operasyon için XOP yapısını döndürün. Bu makro dikkate alınmalı
OP_NAME ve diğer erişim makrolarının içinde: bunun yerine bunları kullanın. Bu makro
bir işlevi çağırır. 5.19.6'dan önce, bu bir fonksiyon olarak uygulanıyordu.

NOT: bu işlev, bir aTHX_ ile açıkça Perl_custom_op_xop olarak çağrılmalıdır.
parametre.

const XOP * Perl_custom_op_xop(pTHX_ const OP *o)

XopDEVRE DIŞI BIRAKILACAK
Uygun bayrağı temizleyerek bir XOP üyesini geçici olarak devre dışı bırakın.

void XopDISABLE(XOP *xop, hangisi)

XopENABLE
Devre dışı bırakılmış bir XOP üyesini yeniden etkinleştirin.

void XopENABLE(XOP *xop, hangisi)

XopENTRY
XOP yapısının bir üyesini döndürün. hangi hangi girişi gösteren bir cpp belirtecidir
geri vermek. Üye ayarlanmazsa, bu varsayılan bir değer döndürür. Geri dönüş
tip bağlıdır hangi. Bu makro, bağımsız değişkenlerini bir kereden fazla değerlendirir. Eğer sen
"OP *" dan "XOP *" almak için "Perl_custom_op_xop" kullanıyor, daha fazlasını kullanın
bunun yerine verimli "XopENTRYCUSTOM".

XopENTRY(XOP *xop, hangisi)

XopENTRYCUSTOM
Aynen "XopENTRY(XopENTRY(Perl_custom_op_xop(aTHX_ o), hangisi)" gibi ama daha fazlası
verimli. bu hangi parametre "XopENTRY" ile aynıdır.

XopENTRYCUSTOM(const OP *o, hangisi)

XopENTRY_set
XOP yapısının bir üyesini ayarlayın. hangi hangi girişin yapıldığını gösteren bir cpp belirtecidir
ayarlamak. Mevcut üyeler hakkında ayrıntılar için perlguts'ta "Özel Operatörler"e bakın
ve nasıl kullanıldıkları. Bu makro, argümanını bir kereden fazla değerlendirir.

void XopENTRY_set(XOP *xop, hangi, değer)

Xopbayraklar
XOP'un bayraklarını döndürün.

U32 XopBAYRAKLAR(XOP *xop)

CV hile fonksiyonlar


Bu bölüm, kod değerleri veya alt rutinler olan CV'leri işlemek için işlevleri belgelemektedir.
Daha fazla bilgi için bkz. perlguts.

arayan_cx
XSUB yazarının eşdeğeri arayan(). Döndürülen "PERL_CONTEXT" yapısı
"arayan" tarafından Perl'e döndürülen tüm bilgileri bulmak için sorgulanabilir.
XSUB'ların yığın çerçevesi almadığını unutmayın, bu nedenle "caller_cx(0, NULL)" geri dönecektir
hemen çevreleyen Perl kodu için bilgi.

Bu işlev, kullanıcı adına yapılan &DB::sub'a yapılan otomatik çağrıları atlar.
hata ayıklayıcı. İstenen yığın çerçevesi "DB::sub" tarafından adlandırılan bir alt ise, dönüş
değer "DB::sub" çağrısı için çerçeve olacaktır, çünkü bu doğru satıra sahiptir
numara/vb. arama sitesi için. Eğer dbcxp "NULL" değilse, bir
alt çağrının kendisi için çerçeveye işaretçi.

const PERL_CONTEXT * arayan_cx(
I32 seviyesi,
const PERL_CONTEXT **dbcxp
)

CvSTASH CV'nin zulasını döndürür. Stash, aşağıdakileri içeren sembol tablosu karmasıdır.
altyordamın tanımlandığı paketteki paket kapsamlı değişkenler. İçin
daha fazla bilgi, bkz. perlguts.

Bunun ayrıca XS AUTOLOAD alt birimleriyle özel bir kullanımı vardır. "XSUB'larla Otomatik Yükleme" konusuna bakın
perlguts içinde.

YG* CVSTASH(CV* CV)

find_runcv
Şu anda yürütülen alt veya değerlendirmeye karşılık gelen CV'yi bulun. db_seqp ise
non_null, DB paketindeki CV'leri atlayın ve *db_seqp'yi polisle doldurun
DB:: kodunun girildiği noktadaki sıra numarası. (Bu izin verir
hata ayıklayıcıları, değerlendirmenin kapsamından ziyade kesme noktası kapsamında değerlendirir.
hata ayıklayıcının kendisi.)

CV* find_runcv(U32 *db_seqp)

get_cv "name"nin uzunluğunu almak için "strlen"i kullanır, ardından "get_cvn_flags"ı çağırır.

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

CV* get_cv(const char* adı, I32 bayrakları)

get_cvn_flags
Belirtilen Perl alt yordamının CV'sini döndürür. "bayraklar" aktarılır
"gv_fetchpvn_flags". "GV_ADD" ayarlanmışsa ve Perl alt programı mevcut değilse
daha sonra bildirilecektir ("alt ad;" demekle aynı etkiye sahiptir). Eğer
"GV_ADD" ayarlanmadı ve alt program mevcut değil, ardından NULL döndürüldü.

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

CV* get_cvn_flags(const char* adı, STRLEN len,
I32 bayrakları)

Hata ayıklama kamu hizmetleri


dump_all
"PL_main_root" ile başlayan mevcut programın tüm opttree'sini şuraya atar:
"STDER". Ayrıca, "PL_defstash" içindeki tüm görünür alt rutinler için opttree'leri döker.

geçersiz dump_all()

dump_packsubs
"Stash" içindeki tüm görünür alt yordamlar için seçenekleri atar.

geçersiz dump_packsubs(const HV* stash)

op_dump OP "o" ile başlayan optree'yi "STDERR"'ye döker.

geçersiz op_dump(sabit OP *o)

sv_dump Bir SV'nin içeriğini "STDERR" dosya tanıtıcısına atar.

Çıktısının bir örneği için bkz. Devel::Peek.

geçersiz sv_dump(SV* sv)

ekran ve Boşaltmak fonksiyonlar


pv_display
Benzer

pv_escape(dsv,pv,cur,pvlim,PERL_PV_ESCAPE_QUOTE);

len > cur ve olduğunda dizeye ek bir "\0" eklenmesi dışında
pv[cur] "\0"dır.

Son dizenin pvlim'den 7 karaktere kadar daha uzun olabileceğini unutmayın.

char* pv_display(SV *dsv, const char *pv, STRLEN eğrisi,
STRLEN len, STRLEN pvlim)

pv_escape
En fazla pv'nin ilk "sayılan" karakterlerinden kaçar ve sonuçları dsv'ye şöyle koyar
kaçan dizenin boyutunun "max" karakterlerini aşmayacağını ve
tamamlanmamış kaçış dizilerini içerir. Kaçan bayt sayısı
null değilse STRLEN *escaped parametresinde döndürülür. dsv ne zaman
parametresi null aslında kaçma gerçekleşmez, ancak
kaçmış olsaydı null hesaplanacak.

Bayraklar PERL_PV_ESCAPE_QUOTE içeriyorsa, dizedeki herhangi bir çift tırnak
da kaçmak.

Normalde SV, çıkışlı dize hazırlanmadan önce temizlenir, ancak
PERL_PV_ESCAPE_NOCLEAR ayarlanırsa bu gerçekleşmeyecektir.

PERL_PV_ESCAPE_UNI ayarlanırsa, giriş dizesi aşağıdaki durumlarda UTF-8 olarak kabul edilir:
PERL_PV_ESCAPE_UNI_DETECT ayarlanır, ardından giriş dizesi kullanılarak taranır
UTF-8 olup olmadığını belirlemek için "is_utf8_string()".

PERL_PV_ESCAPE_ALL ayarlanırsa, tüm giriş karakterleri "\x01F1" kullanılarak çıkarılacaktır.
stil kaçar, aksi takdirde PERL_PV_ESCAPE_NONASCII ayarlanmışsa, yalnızca ASCII olmayan karakterler
bu stil kullanılarak kaçılacak; aksi takdirde, yalnızca 255'in üzerindeki karakterler öyle olacaktır
kaçtı; yazdırılamayan diğer karakterler, sekizli veya ortak çıkışlı kalıplar kullanır.
"\n". Aksi takdirde, eğer PERL_PV_ESCAPE_NOBACKSLASH ise 255'in altındaki tüm karakterler
yazdırılabilir olarak kabul edilir ve sabit değerler olarak çıkarılacaktır.

PERL_PV_ESCAPE_FIRSTCHAR ayarlanırsa, dizenin yalnızca ilk karakteri
max ne olursa olsun kaçtı. Çıktı onaltılı olacaksa, o zaman
düz bir hex dizisi olarak döndürülür. Böylece çıktı ya tek bir karakter olacak,
sekizli bir kaçış dizisi, "\n" gibi özel bir kaçış veya bir onaltılık değer.

PERL_PV_ESCAPE_RE ayarlanmışsa, kullanılan kaçış karakteri bir '%' olacak ve bir '%' olmayacaktır.
'\\'. Bunun nedeni, normal ifadelerin sıklıkla ters eğik çizgili diziler içermesidir.
'%', kalıplarda özellikle yaygın bir karakter değildir.

dsv tarafından tutulduğu şekliyle, çıkış yapılan metne bir işaretçi döndürür.

char* pv_escape(SV *dsv, char const * const str,
const STRLEN sayısı, const STRLEN max,
STRLEN * const kaçtı,
const U32 bayrakları)

pv_güzel
Bir dizeyi sunulabilir bir şeye dönüştürür, üzerinden kaçmayı ele alır pv_escape()
ve alıntıları ve elipsleri destekler.

PERL_PV_PRETTY_QUOTE bayrağı ayarlanırsa, sonuç şu şekilde çift tırnak içine alınır:
dizedeki herhangi bir çift tırnak kaçtı. Aksi takdirde, PERL_PV_PRETTY_LTGT
bayrak ayarlanır, ardından sonuç açılı ayraçlara sarılır.

PERL_PV_PRETTY_ELLIPSES bayrağı ayarlanmışsa ve dizedeki tüm karakterler ayarlanmamışsa
çıktıysa, dizeye bir üç nokta "..." eklenecektir. unutmayın ki bu
alıntı yapıldıktan SONRA gerçekleşir.

start_color boş değilse, açılış alıntısından sonra eklenir (eğer
bir tane var) ancak kaçan metinden önce. end_color boş değilse, o zaman
kaçan metinden sonra, ancak herhangi bir tırnak işareti veya üç noktadan önce eklenmelidir.

dsv tarafından tutulduğu şekliyle güzelleştirilmiş metne bir işaretçi döndürür.

char* pv_pretty(SV *dsv, char const * const str,
const STRLEN sayısı, const STRLEN max,
karakter const * const start_color,
karakter const * const end_color,
const U32 bayrakları)

katıştırma fonksiyonlar


CV_clone
Bir özgeçmiş klonlayın, sözlüksel bir kapanış yapın. bu nedenle prototipini sağlar
işlevi: kodu, ped yapısı ve diğer özellikleri. prototip
kodun atıfta bulunduğu dış sözlüklerin yakalanmasıyla birlikte, bunlar
hemen çevreleyen kodun şu anda yürütülmekte olan örneğinden alınır.

CV * cv_clone(CV *proto)

cv_name Esas olarak hata raporlamada kullanılmak üzere CV'nin adını içeren bir SV döndürür.
Özgeçmiş aslında bunun yerine bir GV olabilir, bu durumda iade edilen SV, GV'leri elinde tutar.
isim. GV veya CV dışındaki herhangi bir şey, halihazırda
alt ad, ancak bu gelecekte değişebilir.

İkinci bir argüman olarak bir SV iletilebilir. Eğer öyleyse, ona isim atanacaktır.
ve iade edilecektir. Aksi takdirde, iade edilen SV yeni bir ölümlü olacaktır.

Eğer bayraklar CV_NAME_NOTQUAL dahil edilirse, paket adı dahil edilmeyecektir.
İlk argüman ne CV ne de GV değilse, bu bayrak yok sayılır (buna tabidir).
değişiklik).

SV * cv_name(CV *cv, SV *sv, U32 bayrakları)

CV_undef
Bir CV'nin tüm aktif bileşenlerini temizleyin. Bu, bir
açık "undef &foo" veya referans sayısı sıfıra gidiyor. eskiden
durumda, CvOUTSIDE işaretçisini tutarız, böylece herhangi bir isimsiz çocuk hala
tam sözlüksel kapsam zincirini takip edin.

void cv_undef(CV*cv)

find_rundefsv
Sözcük kapsamında $_ adlı değişkeni bulun ve döndürün.
şu anda yürütülen işlev. Bu sözcüksel bir $_ olabilir veya aksi takdirde
küresel olan.

SV * bul_rundefsv()

find_rundefsvoffset
KULLANIMDAN KALDIRILDI! Bu işlevin Perl'in gelecekteki bir sürümünden kaldırılması planlanmaktadır.
Yeni kod için kullanmayın; mevcut koddan kaldırın.

Şu anda yürütülmekte olan dosyanın pedinde sözcüksel $_ öğesinin konumunu bulun.
işlev. Geçerli peddeki ofseti döndürür veya yoksa "NOT_IN_PAD"
sözlüksel $_ kapsamda (bu durumda bunun yerine global olan kullanılmalıdır).
"find_rundefsv" muhtemelen daha uygun olacaktır.

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

PADOFFSET find_rundefsvoffset()

giriş_my
"Benim" değişkenlerimi görünür duruma "girin". Bu, ayrıştırma sırasında çağrılır
sözcük değişkenlerini sonraki kullanıcılar için görünür kılmak için her ifadenin sonu
ifadeleri.

U32 giriş_my()

yük_modülü
Adın dize kısmıyla gösterilen modülü yükler. Bunu not et
dosya adı değil, asıl modül adı verilmelidir. Örneğin, bunun yerine "Foo::Bar"
"Foo/Bar.pm". bayraklar, PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT veya
PERL_LOADMOD_IMPORT_OPS (veya bayrak yok ise 0). ver, belirtilmişse ve NULL değilse,
"Foo::Bar VERSION kullan"a benzer sürüm anlambilimi sağlar. isteğe bağlı
takip eden SV* argümanları, modülün argümanlarını belirtmek için kullanılabilir. içe aktarmak()
"Foo::Bar VERSION LIST kullan"a benzer bir yöntem. ile sonlandırılmalıdır.
son NULL işaretçisi. Bu listenin yalnızca aşağıdaki durumlarda atlanabileceğini unutmayın.
PERL_LOADMOD_NOIMPORT bayrağı kullanıldı. Aksi takdirde en az tek bir NULL
varsayılan içe aktarma listesini belirtmek için işaretçi gereklidir.

Belirtilen her "SV*" parametresi için referans sayısı azaltılır.

void load_module(U32 bayrakları, SV* adı, SV* sürümü, ...)

yeniPADNAMELIST
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Yeni bir ped adı listesi oluşturur. "max", boşluk olan en yüksek dizindir.
tahsis etti.

PADNAMELIST * yeniPADNAMELIST(size_t max)

yeniPADNAMEdış
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Yeni bir pad adı oluşturur ve döndürür. Bu işlevi yalnızca şu adlar için kullanın:
dış sözlüklere bakın. (Ayrıca bkz. "newPADNAMEpvn".) dış dış ped adıdır
bu aynalar. Döndürülen pad adında zaten PADNAMEt_OUTER bayrağı var
ayarlayın.

PADNAME * yeniPADNAMEdış(PADNAME *dış)

yeniPADNAMEpvn
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Yeni bir pad adı oluşturur ve döndürür. s bir UTF8 dizesi olmalıdır. bunu kullanma
dış sözlüklere işaret eden ped adları için. "newPADNAMEdış" bölümüne bakın.

PADNAME * newPADNAMEpvn(const char *s, STRLEN len)

kancasız
İş parçacığı olmadığında perl_destruct için iş parçacığı kancası sağlayan saplama.

int notreadhook()

padnamelist_fetch
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Verilen dizinden ped adını getirir.

PADNAME * padnamelist_fetch(PADNAMELIST *pnl,
SSize_t anahtarı)

padnamelist_store
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Pad adını (boş olabilir) verilen dizinde saklar, mevcut herhangi bir şeyi serbest bırakır.
bu yuvadaki ped adı.

PADNAME ** padnamelist_store(PADNAMELIST *pnl,
SSize_t anahtarı, PADNAME *val)

pad_add_anon
Şu anda derlenmekte olan pad'de ("pad_alloc" aracılığıyla) bir yer tahsis eder.
şu anda derlenmekte olan içinde sözcüksel olarak kapsamına giren anonim işlev
işlev. İşlev func pede bağlanır ve "CvOUTSIDE" bağlantısı
bir referans döngüsünden kaçınmak için dış kapsam zayıflatılır.

Bir referans sayısı çalındı, bu nedenle "SvREFCNT_inc(func)" yapmanız gerekebilir.

optik pad girişinin ne tür bir işlem olduğunu gösteren bir işlem kodu olmalıdır.
desteklemek. Bu işlemsel semantiği etkilemez, ancak hata ayıklama için kullanılır.

PADOFFSET pad_add_anon(CV *işlev, I32 tipi)

pad_add_name_pv
Tam olarak "pad_add_name_pvn" gibidir, ancak bir yerine boş sonlandırılmış bir dize alır
dizi/uzunluk çifti.

PADOFFSET pad_add_name_pv(const char *isim, U32 bayrakları,
HV *tipi, HV *stash)

pad_add_name_pvn
Adlandırılmış bir sözcük değişkeni için şu anda derlenmekte olan pad'de bir yer ayırır.
Adı ve diğer meta verileri pedin ad bölümünde saklar ve
değişkenin sözcüksel kapsamını yönetmek için hazırlıklar. ofsetini döndürür
tahsis edilmiş ped yuvası.

isim/isim baştaki mührü de dahil olmak üzere değişkenin adını belirtin. Eğer dizgi
boş değildir, ad yazılan bir sözlük içindir ve bu, türü tanımlar. Eğer
zulamız boş değildir, bir paket değişkenine sözcüksel bir başvurudur ve bu
paketi tanımlar. Aşağıdaki bayraklar birlikte VEYA'lanabilir:

padadd_OUR, bunun bir paket olup olmadığını gereksiz olarak belirtir.
padadd_STATE değişkeni değeri kalıcı olarak koruyacaktır
padadd_NO_DUP_CHECK sözcüksel gölgeleme kontrolünü atla

PADOFFSET pad_add_name_pvn(const char *namepv,
STRLEN namelen, U32 bayrakları,
HV *tipi, HV *stash)

pad_add_name_sv
Tam olarak "pad_add_name_pvn" gibi, ancak ad dizesini bir SV biçiminde alır
dize/uzunluk çifti yerine.

PADOFFSET pad_add_name_sv(SV *adı, U32 bayrakları,
HV *tipi, HV *stash)

pad_alloc
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Şu anda derlenmekte olan pad'de bir yer ayırır ve
tahsis edilmiş ped yuvası. Ped yuvasına başlangıçta herhangi bir ad eklenmez. tmp türü bir
içinde ayarlanacak olan, gerekli pad girişinin türünü gösteren bir dizi bayrak.
tahsis edilen pad girişi için değer SV:

SVs_PADMY adlı sözcük değişkeni ("benim", "bizim", "durum")
SVs_PADTMP adsız geçici depo
Özyineleme seviyeleri arasında paylaşılan SVf_READONLY sabiti

"SVf_READONLY" burada yalnızca Perl 5.20'den beri desteklenmektedir. Daha önce çalışmak için
sürümlerinde de "SVf_READONLY|SVs_PADTMP" kullanın. "SVf_READONLY" neden olmaz
pad yuvasındaki SV salt okunur olarak işaretlenecek, ancak basitçe "pad_alloc"a şunu söyler:
it irade (arayan tarafından) salt okunur hale getirilmeli veya en azından bu şekilde ele alınmalıdır.

optik pad girişinin ne tür bir işlem olduğunu gösteren bir işlem kodu olmalıdır.
desteklemek. Bu işlemsel semantiği etkilemez, ancak hata ayıklama için kullanılır.

PADOFFSET pad_alloc(I32 seçenek tipi, U32 tmptipi)

pad_findmy_pv
Tam olarak "pad_findmy_pvn" gibi, ancak bir yerine boş sonlandırılmış bir dize alır
dizi/uzunluk çifti.

PADOFFSET pad_findmy_pv(const char *isim, U32 bayrakları)

pad_findmy_pvn
Sözcüksel bir değişkenin adı verildiğinde, şu anda derlenen değişkendeki konumunu bulun.
ped. isim/isim baştaki mührü dahil olmak üzere değişkenin adını belirtin. bayraklar
saklıdır ve sıfır olmalıdır. Geçerli pedde değilse ancak
sözcüksel olarak çevreleyen herhangi bir kapsamın pedi, daha sonra bunun için bir sözde giriş eklenir.
mevcut ped. Geçerli peddeki ofseti döndürür veya böyle değilse "NOT_IN_PAD"
sözlük kapsam dahilindedir.

PADOFFSET pad_findmy_pvn(const char *namepv,
STRLEN namelen, U32 bayrakları)

pad_findmy_sv
Tam olarak "pad_findmy_pvn" gibi, ancak ad dizesini bir SV biçiminde alır
dize/uzunluk çifti yerine.

PADOFFSET pad_findmy_sv(SV *adı, U32 bayrakları)

pad_setsv
Değeri ofset olarak ayarlayın po geçerli (derleme veya yürütme) pedinde. Kullan
makro PAD_SETSV() bu işlevi doğrudan çağırmak yerine.

geçersiz pad_setsv(PADOFFSET po, SV *sv)

pad_sv ofsetteki değeri al po geçerli (derleme veya yürütme) pedinde. Makro kullan
Bu işlevi doğrudan çağırmak yerine PAD_SV.

SV * pad_sv(PADOFFSET po)

pad_tidy
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Ait olduğu kodun derlenmesinin sonunda bir ped düzenleyin. Meslekler
burada gerçekleştirilenler: çoğu şeyi anonsub prototiplerin pedlerinden çıkarın; ver
a @_; geçicileri bu şekilde işaretleyin. tip altyordamın türünü gösterir:

padtidy_SUB sıradan alt yordamı
sözcüksel kapanış için padtidy_SUBCLONE prototipi
padtidy_FORMAT biçimi

void pad_tidy(padtidy_type türü)

perl_alloc
Yeni bir Perl yorumlayıcısı tahsis eder. Perlembed'e bakınız.

Perl Yorumlayıcı* perl_alloc()

perl_construct
Yeni bir Perl yorumlayıcısını başlatır. Perlembed'e bakınız.

geçersiz perl_construct(PerlInterpreter *my_perl)

perl_destruct
Bir Perl yorumlayıcısını kapatır. Perlembed'e bakınız.

int perl_destruct(Perl Yorumlayıcı *my_perl)

perl_free
Bir Perl yorumlayıcısını serbest bırakır. Perlembed'e bakınız.

geçersiz perl_free(PerlInterpreter *my_perl)

perl_parse
Bir Perl yorumlayıcısına bir Perl betiğini ayrıştırmasını söyler. Perlembed'e bakınız.

int perl_parse(Perl Yorumlayıcı *my_perl,
XSINIT_t xsinit, int argc,
karakter** argv, karakter** env)

perl_run
Bir Perl yorumlayıcısına çalışmasını söyler. Perlembed'e bakınız.

int perl_run(Perl Yorumlayıcı *my_perl)

gerekli_pv
Perl'e dize argümanı tarafından adlandırılan dosyayı "gerektirmesini" söyler. şuna benzer
Perl kodu "değerlendirme" '$dosya' gerektirir"". Hatta bu şekilde uygulanmaktadır; düşünmek
bunun yerine load_module kullanarak.

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

geçersiz gereksinim_pv(const char* pv)

Istisna kullanma (basit) Makrolar


dXCPT Özel durum işleme için gerekli yerel değişkenleri ayarlayın. Bkz. "İstisna İşleme"
perlguts içinde.

dXCPT;

XCPT_CATCH
Bir yakalama bloğu tanıtır. Perlguts'ta "İstisna İşleme" konusuna bakın.

XCPT_RETHROW
Daha önce yakalanmış bir özel durumu yeniden atar. Perlguts'ta "İstisna İşleme" konusuna bakın.

XCPT_RETHROW;

XCPT_TRY_END
Bir try bloğunu sonlandırır. Perlguts'ta "İstisna İşleme" konusuna bakın.

XCPT_TRY_START
Bir try bloğu başlatır. Perlguts'ta "İstisna İşleme" konusuna bakın.

Küresel Değişkenler


Bu değişkenler tüm süreç için globaldir. Tüm tercümanlar arasında paylaşılırlar.
ve bir süreçteki tüm iş parçacıkları.

PL_kontrol
"Kontrol" aşaması için çağrılacak işlevlerin opcode tarafından indekslenen dizisi
Perl kodunun derlenmesi sırasında opttree oluşturma. Çoğu (hepsi değil) tür için
op, op başlangıçta oluşturulduktan ve alt operasyonlarla doldurulduktan sonra
uygun öğesi tarafından başvurulan kontrol işlevi aracılığıyla filtrelenebilir.
bu dizi. Yeni işlem, kontrol işlevine tek argüman olarak iletilir,
ve kontrol işlevi tamamlanan işlemi döndürür. Kontrol işlevi olabilir (
adından da anlaşılacağı gibi) işlemi geçerlilik ve sinyal hataları açısından kontrol edin. Ayrıca olabilir
operasyonların bölümlerini başlatmak veya değiştirmek veya daha radikal ameliyatlar yapmak, örneğin
alt operasyonları eklemek veya çıkarmak, hatta operasyonu atmak ve farklı bir operasyon döndürmek
burada.

Bu işlev işaretçileri dizisi, derlemeye bağlanmak için uygun bir yerdir.
işlem. Bir XS modülü, herhangi birinin yerine kendi özel kontrol işlevini koyabilir.
belirli bir op türünün derlenmesini etkilemek için standart olanlar.
Ancak, özel bir kontrol işlevi hiçbir zaman standart bir kontrolün yerini almamalıdır.
işlevi (veya başka bir modülden özel bir kontrol işlevi). bir modül
değiştirme denetimi bunun yerine gerekir sarın önceden var olan kontrol işlevi. Bir gelenek
kontrol işlevi, özel davranışını ne zaman uygulayacağı konusunda seçici olmalıdır. İçinde
bir operasyonla özel bir şey yapmamaya karar verdiği olağan durumda, zincirleme yapması gerekir
önceden var olan op işlevi. Kontrol fonksiyonları böylece bir zincirde bağlantılıdır.
sonunda çekirdeğin temel denetleyicisi.

İş parçacığı güvenliği için modüller doğrudan bu diziye yazmamalıdır. Bunun yerine, kullanın
"wrap_op_checker" işlevi.

PL_keyword_plugin
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Genişletilmiş anahtar sözcükleri işlemek için kullanılan bir işlevi işaret eden işlev işaretçisi. bu
işlev olarak bildirilmelidir

int anahtar kelime_eklenti_fonksiyonu(pTHX_
char *anahtar kelime_ptr, STRLEN anahtar kelime_len,
OP **op_ptr)

İşlev, olası bir anahtar sözcük görüldüğünde belirteçten çağrılır.
"keyword_ptr", ayrıştırıcının giriş arabelleğindeki sözcüğü işaret eder ve "keyword_len"
uzunluğunu verir; null sonlandırılmamış. Fonksiyonun incelenmesi bekleniyor
kelime ve muhtemelen %^H gibi başka bir durum, isteyip istemediğine karar vermek için
genişletilmiş bir anahtar kelime olarak ele alın. Olmazsa, işlev geri dönmelidir
"KEYWORD_PLUGIN_DECLINE" ve normal ayrıştırıcı işlemi devam edecektir.

İşlev anahtar kelimeyi işlemek istiyorsa, önce herhangi bir şeyi ayrıştırması gerekir.
anahtar sözcük tarafından sunulan sözdiziminin bir parçası olan anahtar sözcüğün ardından. Görmek
Ayrıntılar için "Lexer arayüzü".

Bir anahtar kelime işlenirken, eklenti işlevi bir "OP" ağacı oluşturmalıdır.
ayrıştırılan kodu temsil eden yapılar. Ağacın kökü olmalı
*op_ptr'de saklanır. İşlev daha sonra sözdizimini gösteren bir sabit döndürür
ayrıştırdığı yapının rolü: "KEYWORD_PLUGIN_STMT" ise
tam ifade veya bir ifade ise "KEYWORD_PLUGIN_EXPR". Bir
deyim yapısı bir ifade içinde kullanılamaz ("do BLOCK" ve
benzer) ve bir ifade tam bir ifade değildir (en az bir
noktalı virgül sonlandırılır).

Bir anahtar kelime işlendiğinde, eklenti işlevinin (derleme zamanı) tarafı da olabilir.
Etkileri. "%^H"yi değiştirebilir, işlevleri tanımlayabilir, vb. Tipik olarak, eğer yan
efektler, bir işleyicinin temel amacıdır, herhangi bir işlem oluşturmak istemez.
normal derlemeye dahil edilmelidir. Bu durumda hala gerekli
bir op ağacı sağlayın, ancak tek bir boş op oluşturmak yeterlidir.

*PL_keyword_plugin işlevinin genel olarak böyle davranması gerekir.
Bununla birlikte, geleneksel olarak, mevcut işleyici tamamen değiştirilmez.
işlev. Bunun yerine, kendinizinkini atamadan önce "PL_keyword_plugin"in bir kopyasını alın
işlev işaretçisi ona. İşleyici işleviniz, olduğu anahtar kelimeleri aramalıdır.
bunlarla ilgilenir ve ilgilenir. İlgilenmiyorsa, aramalı
kaydedilen eklenti işlevi, aldığı argümanları iletir. Böylece
"PL_keyword_plugin" aslında bir dizi işleyici işlevine işaret eder, bunların tümü
anahtar kelimeleri ve yalnızca zincirdeki son işlevi ele alma fırsatına sahip olun
(Perl çekirdeğinde yerleşik) normalde "KEYWORD_PLUGIN_DECLINE" döndürür.

GV fonksiyonlar


Bir GV, bir Perl typeglob'a karşılık gelen bir yapıdır, yani *foo. Bu bir yapıdır
$foo, @foo, %foo'ya karşılık gelen bir skaler, bir dizi, bir karma vb. için bir işaretçi tutan.

GV'ler genellikle Perl'in verilerini sakladığı zulalarda (sembol tablosu karmaları) değerler olarak bulunur.
küresel değişkenler.

GvAV GV'den AV'yi döndürür.

AV* GvAV(GV* gv)

GvCV CV'yi GV'den döndürür.

CV* GvCV(GV* gv)

GvHV GV'den HV'yi döndürür.

HV* GvHV(GV* gv)

GvSV GV'den SV'yi döndürür.

SV* GvSV(GV* gv)

gv_const_sv
"gv", alt rutin girişi için uygun bir sabit alt olan bir typeglob ise
satır içi veya "gv", böyle bir konuma yükseltilecek bir yer tutucu referansıdır.
typeglob, ardından alt tarafından döndürülen değeri döndürür. Aksi takdirde, NULL döndürür.

SV* gv_const_sv(GV* gv)

gv_fetchmeth
"gv_fetchmeth_pvn" gibi, ancak bir flags parametresinden yoksun.

GV* gv_fetchmeth(HV* zula, const char* adı,
STRLEN len, I32 seviyesi)

gv_fetchmethod_autoload
Yöntemi çağırmak için çağrılacak alt yordamı içeren küreyi döndürür.
"saklamak". Aslında, otomatik yüklemenin varlığında bu,
"OTOMATİK YÜKLE". Bu durumda ilgili değişken $AUTOLOAD zaten ayarlanmıştır.

"gv_fetchmethod_autoload" öğesinin üçüncü parametresi, AUTOLOAD'ın
arama, verilen yöntem yoksa gerçekleştirilir: sıfır olmayan, evet anlamına gelir, bak
OTOMATİK YÜKLEME için; sıfır, hayır anlamına gelir, AUTOLOAD'ı aramayın. "gv_fetchmethod"u çağırmak
sıfır olmayan bir "otomatik yükleme" ile "gv_fetchmethod_autoload" çağrısına eşdeğer
parametre.

Bu işlevler, yöntem adının öneki olarak "SÜPER" belirteci verir. Dikkat edin, eğer
döndürülen küreyi uzun süre tutmak istiyorsanız, olup olmadığını kontrol etmeniz gerekir.
"OTOMATİK YÜKLE", çünkü daha sonraki bir zamanda arama nedeniyle farklı bir alt program yüklenebilir.
değerini değiştirerek $AUTOLOAD olarak. Yapmak için bir yan etki olarak oluşturulan küreyi kullanın
bu.

Bu işlevler, "level==0" ile "gv_fetchmeth" ile aynı yan etkilere sahiptir. bu
"gv_fetchmeth" tarafından döndürülen GV'nin "call_sv"ye geçirilmesine karşı uyarı geçerlidir
bu fonksiyonlara eşit olarak

GV* gv_fetchmethod_autoload(HV* zula,
const karakter* adı,
I32 otomatik yükleme)

gv_fetchmeth_autoload
Bu, bayrak parametresi olmayan eski "gv_fetchmeth_pvn_autoload" biçimidir.

GV* gv_fetchmeth_autoload(HV* zula,
const karakter* adı,
STRLEN len, I32 seviyesi)

gv_fetchmeth_pv
Tam olarak "gv_fetchmeth_pvn" gibi, ancak bir yerine boş sonlandırılmış bir dize alır
dizi/uzunluk çifti.

GV* gv_fetchmeth_pv(HV* zula, const char* adı,
I32 seviyesi, U32 bayrakları)

gv_fetchmeth_pvn
Verilen "ad" ve tanımlanmış bir alt yordam veya "NULL" ile küreyi döndürür. bu
glob, verilen "saklamada" veya @ISA aracılığıyla erişilebilen zulalarda yaşar ve
EVRENSEL::.

"Seviye" argümanı 0 veya -1 olmalıdır. "level==0" ise yan etki olarak
verilen "zula" içinde verilen "ad" ile bir küre oluşturur, bu durumda
başarı, alt yordam için bir takma ad içerir ve bunun için önbelleğe alma bilgilerini ayarlar
küre.

"bayraklar" için tek anlamlı değerler GV_SUPER ve SVf_UTF8'dir.

GV_SUPER, yöntemin üst sınıflarında aramak istediğimizi belirtir.
"saklamak".

"gv_fetchmeth"den döndürülen GV, olmayan bir yöntem önbelleği girişi olabilir.
Perl koduna görünür. Bu nedenle, "call_sv"yi çağırırken GV'yi kullanmamalısınız.
direkt olarak; bunun yerine yöntemin özgeçmişini kullanmalısınız.
"GvCV" makrosu ile GV.

GV* gv_fetchmeth_pvn(HV* zula, const char* adı,
STRLEN len, I32 seviyesi,
U32 bayrakları)

gv_fetchmeth_pvn_autoload
Aynısı gv_fetchmeth_pvn(), ancak otomatik olarak yüklenen alt yordamları da arar. bir
alt yordam için küre.

GV'si olmayan otomatik olarak yüklenen bir alt program için, "seviye < 0" olsa bile bir GV oluşturacaktır.
Saplama olmadan otomatik olarak yüklenen bir alt program için, GvCV() sonucun sıfır olabilir.

Şu anda "bayraklar" için tek önemli değer SVf_UTF8'dir.

GV* gv_fetchmeth_pvn_autoload(HV* zula,
const karakter* adı,
STRLEN len, I32 seviyesi,
U32 bayrakları)

gv_fetchmeth_pv_autoload
Tam olarak "gv_fetchmeth_pvn_autoload" gibi, ancak boş sonlandırılmış bir dize alır
dize/uzunluk çifti yerine.

GV* gv_fetchmeth_pv_autoload(HV* zula,
const karakter* adı,
I32 seviyesi, U32 bayrakları)

gv_fetchmeth_sv
Tam olarak "gv_fetchmeth_pvn" gibi, ancak ad dizesini bir SV biçiminde alır
dize/uzunluk çifti yerine.

GV* gv_fetchmeth_sv(HV* zula, SV* adlarıv,
I32 seviyesi, U32 bayrakları)

gv_fetchmeth_sv_autoload
Tam olarak "gv_fetchmeth_pvn_autoload" gibi, ancak ad dizesini şu şekilde alır:
dize/uzunluk çifti yerine bir SV.

GV* gv_fetchmeth_sv_autoload(HV* zula, SV* adlarıv,
I32 seviyesi, U32 bayrakları)

gv_init Eski biçimi gv_init_pvn(). UTF8 dizeleriyle çalışmaz, çünkü
bayraklar parametresi. "Çoklu" parametre ayarlanırsa, GV_ADDMULTI bayrağı
geçirilen gv_init_pvn().

void gv_init(GV* gv, HV* stash, const char* adı,
STRLEN len, int çoklu)

gv_init_pv
Aynısı gv_init_pvn(), ancak ad için yerine boş sonlandırılmış bir dize alır
ayrı karakter * ve uzunluk parametreleri.

void gv_init_pv(GV* gv, HV* stash, const char* adı,
U32 bayrakları)

gv_init_pvn
Bir skaleri typeglob'a dönüştürür. Bu, zorlanamaz bir tip küresi; atama
referans olarak üzerine yazmak yerine yuvalarından birine atanacaktır.
SvSetSV tarafından oluşturulan typeglob'larla olur. Herhangi bir skaleri dönüştürme SvOK()
öngörülemeyen sonuçlar üretebilir ve Perl'in dahili kullanımı için ayrılmıştır.

"gv" dönüştürülecek skalerdir.

"stash", varsa, ana depo/pakettir.

"name" ve "len" adını verin. İsim niteliksiz olmalıdır; yani, olmalı
paket adını içermez. "gv" bir zula öğesiyse, arayanın
Bu işleve iletilen adın, işlevin adıyla eşleşmesini sağlama sorumluluğu
öğe. Eşleşmiyorsa, Perl'in dahili muhasebesi
senkron.

"name" bir UTF8 dizesiyse "bayraklar" SVf_UTF8 olarak ayarlanabilir veya
SvUTF8(sv). GV_ADDMULTI bayrağını da alabilir, bu da öyleymiş gibi yapmak anlamına gelir.
GV daha önce görüldü (yani, "Bir kez kullanıldı" uyarılarını bastırın).

void gv_init_pvn(GV* gv, HV* stash, const char* adı,
STRLEN len, U32 bayrakları)

gv_init_sv
Aynısı gv_init_pvn(), ancak ad için ayrı char * yerine bir SV * alır
ve uzunluk parametreleri. "bayraklar" şu anda kullanılmamaktadır.

void gv_init_sv(GV* gv, HV* zula, SV* adlarıv,
U32 bayrakları)

gv_stashpv
Belirtilen paket için zulaya bir işaretçi döndürür. için "strlen" kullanır
"name"nin uzunluğunu belirleyin, ardından "gv_stashpvn()" öğesini çağırır.

HV* gv_stashpv(const char* adı, I32 bayrakları)

gv_stashpvn
Belirtilen paket için zulaya bir işaretçi döndürür. "namelen" parametresi
bayt cinsinden "adın" uzunluğunu gösterir. "bayraklar" iletilir
"gv_fetchpvn_flags()", yani "GV_ADD" olarak ayarlanırsa paket şu durumlarda oluşturulur:
zaten yok. Paket mevcut değilse ve "bayraklar" 0 (veya herhangi bir
paket oluşturmayan diğer ayar), ardından NULL döndürülür.

Bayraklar şunlardan biri olabilir:

GV_ADD
SVf_UTF8
GV_NOADD_NOINIT
GV_NOINIT
GV_NOEXPAND
GV_ADDMG

Bunların en önemlileri muhtemelen GV_ADD ve SVf_UTF8'dir.

Mümkün olduğu durumlarda "gv_stashpvn" yerine "gv_stashsv" kullanımının kesinlikle geçerli olduğunu unutmayın.
performans nedenleriyle önerilir.

HV* gv_stashpvn(const char* adı, U32 namelen,
I32 bayrakları)

gv_stashpvs
"gv_stashpvn" gibi, ancak dize/uzunluk çifti yerine değişmez bir dize alır.

HV* gv_stashpvs(const char* adı, I32 oluştur)

gv_stashsv
Belirtilen paket için zulaya bir işaretçi döndürür. "gv_stashpvn" konusuna bakın.

Performans için bu arabirimin "gv_stashpvn" yerine kesinlikle tercih edildiğini unutmayın
nedenler.

HV* gv_stashsv(SV* sv, I32 bayrakları)

setdefout
Çıktı için varsayılan dosya tanıtıcısı olan PL_defoutgv'yi, geçirilen typeglob'a ayarlar.
PL_defoutgv, typeglob'unda bir referansa "sahip" olduğundan, referans sayısı
typeglob'da geçirilen bir artırılır ve typeglob'un referans sayısı
PL_defoutgv'nin işaret ettiği şey bir azalır.

geçersiz setdefout(GV* gv)

Kullanışlı Değerler


Nullav Null AV işaretçisi.

(kullanımdan kaldırıldı - bunun yerine "(AV *)NULL" kullanın)

Nullch Null karakter işaretçisi. ("PERL_CORE" tanımlandığında artık kullanılamaz.)

Nullcv Boş CV işaretçisi.

(kullanımdan kaldırıldı - bunun yerine "(CV *)NULL" kullanın)

Nullhv Boş HV işaretçisi.

(kullanımdan kaldırıldı - bunun yerine "(HV *)NULL" kullanın)

Nullsv Null SV işaretçisi. ("PERL_CORE" tanımlandığında artık kullanılamaz.)

Esrar hile fonksiyonlar


Bir HV yapısı, bir Perl karmasını temsil eder. Esas olarak, her biri bir dizi işaretçiden oluşur.
bunların bağlantılı bir HE yapıları listesine işaret eder. Dizi, hash tarafından indekslenir
anahtarın işlevi, böylece her bağlantılı liste, aynı olan tüm karma girişleri temsil eder.
hash değeri. Her HE, gerçek değere bir işaretçi ve bir HEK işaretçisine sahiptir.
anahtarı ve hash değerini tutan yapı.

cop_fetch_label
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Bir polise iliştirilmiş etiketi döndürür. Bayrak işaretçisi "SVf_UTF8" olarak ayarlanabilir
veya 0.

const char * cop_fetch_label(COP *const polis,
STRLEN *len, U32 *bayraklar)

polis_store_label
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Bir etiketi "cop_hints_hash" içine kaydedin. için bayrakları "SVf_UTF8" olarak ayarlamanız gerekir.
utf-8 etiketi.

void cop_store_label(COP *const polis,
const char *etiket, STRLEN len,
U32 bayrakları)

get_hv Belirtilen Perl karma değerinin HV'sini döndürür. "bayraklar", "gv_fetchpv"ye geçirilir.
"GV_ADD" ayarlanmışsa ve Perl değişkeni yoksa yaratılacaktır.
"bayraklar" sıfırsa ve değişken yoksa NULL döndürülür.

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

HV* get_hv(const char *name, I32 bayrakları)

HEf_SVKEY
Hash girişlerinin ve sihirli yapıların uzunluk yuvasında kullanılan bu bayrak,
yapı, bir "char*" işaretçisinin beklendiği yerde bir "SV*" işaretçisi içerir.
(Yalnızca bilgi amaçlıdır - kullanılmamalıdır).

HeHASH Karma girişinde saklanan hesaplanmış karmayı döndürür.

U32 HeHASH(HE* o)

HeKEY Karma girişinin anahtar yuvasında depolanan gerçek işaretçiyi döndürür. işaretçi
"HeKLEN()" değerine bağlı olarak "char*" veya "SV*" olabilir. Olabilir
atandı. "HePV()" veya "HeSVKEY()" makroları genellikle aşağıdakiler için tercih edilir:
Bir anahtarın değerini bulma.

void* HeKEY(HE* o)

HeKLEN Bu negatifse ve "HEf_SVKEY" tutarındaysa, girişin bir
"SV*" tuşu. Aksi takdirde, anahtarın gerçek uzunluğunu tutar. atanabilir.
Anahtar uzunluklarını bulmak için genellikle "HePV()" makrosu tercih edilir.

STRLEN HeKLEN(HE* o)

HePV, gerekli işlemleri yaparak karma girişinin anahtar yuvasını "char*" değeri olarak döndürür
olası "SV*" tuşlarının referansının kaldırılması. Dizenin uzunluğu "len" içine yerleştirilir
(bu bir makro, öyle yapın değil &len'i kullanın). Uzunluğun ne olduğunu umursamıyorsanız
önemli olan şu ki, "PL_na" global değişkenini kullanabilirsiniz, ancak bu biraz daha azdır.
yerel bir değişken kullanmaktan daha verimli. Yine de unutmayın, bu hash anahtarları Perl'de
gömülü boş değerler içermekte serbesttir, bu nedenle "strlen()" veya benzerini kullanmak iyi değildir
karma anahtarların uzunluğunu bulmanın yolu. Bu, "SvPV()" makrosuna çok benzer
bu belgede başka bir yerde açıklanmıştır. Ayrıca bkz. "HeUTF8".

Yeni bir SV oluşturmak üzere "newSVpvn()" öğesine iletilecek değerleri almak için "HePV" kullanıyorsanız,
daha verimli olduğu için "newSVhek(HeKEY_hek(he))" kullanmayı düşünmelisiniz.

karakter* HePV(HE* o, STRLEN len)

HeSVKEY Anahtarı "SV*" veya karma giriş "SV*" içermiyorsa "NULL" olarak döndürür
tuşuna basın.

SV* HeSVKEY(HE* o)

HeSVKEY_force
Anahtarı "SV*" olarak döndürür. Aşağıdaki durumlarda geçici bir ölümlü "SV*" oluşturacak ve döndürecektir:
karma girdi yalnızca bir "char*" anahtarı içerir.

SV* HeSVKEY_force(HE* o)

HeSVKEY_set
Anahtarı belirli bir "SV*" olarak ayarlar, uygun bayrakları
bir "SV*" anahtarının varlığını belirtir ve aynı "SV*" değerini döndürür.

SV* HeSVKEY_set(HE* o, SV* sv)

HeUTF8 "HePV" tarafından döndürülen "char *" değerinin UTF-8'de kodlanıp kodlanmadığını döndürür.
olası "SV*" anahtarlarının gerekli referanslarının kaldırılması. Döndürülen değer 0 olacak
veya 0 olmayan, mutlaka 1 (veya düşük bit ayarlanmış bir değer bile) olması gerekmez, bu nedenle do değil
"bool", "char" için bir typedef olabileceğinden, bunu körü körüne bir "bool" değişkenine atayın.

U32 HeUTF8(HE* o)

HeVAL Karma girişinde saklanan değer yuvasını ("SV*" tipi) döndürür. atanabilir.

SV *foo= HeVAL(hv);
HeVAL(hv)= sv;

SV* HeVAL(HE* o)

HvENAME Bir zulanın etkin adını veya yoksa NULL döndürür. etkili
name, bu zulanın bulunduğu sembol tablosundaki bir konumu temsil eder. Bu
paketlere takma ad verildiğinde veya silindiğinde otomatik olarak güncellenir. Olmayan bir depo
artık sembol tablosunda etkin bir isme sahip değildir. Bu isim tercih edilebilir
MRO doğrusallaştırmalarında ve isa önbelleklerinde kullanım için "HvNAME".

karakter* HvENAME(HV* saklama)

HvENAMELEN
Zulanın etkin adının uzunluğunu döndürür.

STRLEN HvENAMELEN(HV *saklama)

HvENAMEUTF8
Etkili ad UTF8 kodlamasındaysa true değerini döndürür.

imzasız karakter HvENAMEUTF8(HV *saklama)

HvNAME Bir zulanın paket adını veya "saklama" bir zula değilse NULL döndürür. Görmek
"SvSTASH", "CvSTASH".

karakter* HvNAME(HV* saklama)

HvNAMELEN
Zula adının uzunluğunu döndürür.

STRLEN HvNAMELEN(HV *zula)

HvNAMEUTF8
Ad UTF8 kodlamasındaysa true değerini döndürür.

imzasız karakter HvNAMEUTF8(HV *saklama)

hv_assert
Bir karmanın dahili olarak tutarlı bir durumda olup olmadığını kontrol edin.

geçersiz hv_assert(HV *hv)

hv_clear
Bir karmanın tüm öğelerini boş bırakarak serbest bırakır. XS eşdeğeri
"%hash = ()". Ayrıca bkz. "hv_undef".

Dönüşte muhtemelen geçersiz olan karma hakkında bir not için "av_clear" konusuna bakın.

geçersiz hv_clear(HV *hv)

hv_clear_placeholders
Bir karmadan tüm yer tutucuları temizler. Kısıtlanmış bir karma anahtarlarından herhangi birine sahipse
salt okunur olarak işaretlenir ve ardından anahtar silinir, anahtar aslında
silinir, ancak ona &PL_sv_placeholder değeri atanarak işaretlenir. Bu onu etiketler
bu nedenle, karma üzerinde yineleme gibi gelecekteki işlemler tarafından yoksayılacak, ancak
yine de karmanın gelecekte anahtara yeniden atanmış bir değere sahip olmasına izin verecek
nokta. Bu işlev, bu tür yer tutucu anahtarları karmadan temizler. Görmek
Hash::Util::lock_keys() kullanımına bir örnek için.

geçersiz hv_clear_placeholders(HV *hv)

hv_copy_hints_hv
"%^H" kopyalamak için "newHVhv"nin özel bir sürümü. ohh bir işaretçi olmalı
karma ("%^H" büyüsüne sahip olabilir, ancak genellikle büyülü olmamalıdır) veya "NULL"
(boş bir karma olarak yorumlanır). içeriği ohh yeni bir karmaya kopyalanır;
"%^H"'ye özgü büyü eklendi. Yeni karma için bir işaretçi döndürülür.

YG * hv_copy_hints_hv(YG *ohv)

hv_delete
Karmadaki bir anahtar/değer çiftini siler. Değerin SV'si karmadan kaldırılır,
ölümlü yaptı ve arayan döndü. "klen"in mutlak değeri,
anahtarın uzunluğu. "Klen" negatifse, anahtarın içinde olduğu varsayılır.
UTF-8 kodlu Unicode. "bayraklar" değeri normalde sıfır olacaktır; ayarlanırsa
G_DISCARD sonra NULL döndürülür. Anahtar ise NULL da döndürülür.
bulunamadı.

SV* hv_delete(HV *hv, const char *anahtar, I32 klen,
I32 bayrakları)

hv_delete_ent
Karmadaki bir anahtar/değer çiftini siler. SV değeri hash'den kaldırılır,
ölümlü ve arayan döndü. "bayraklar" değeri normalde sıfır olacaktır; Eğer
G_DISCARD olarak ayarlanırsa NULL döndürülür. NULL ayrıca döndürülürse
anahtar bulunamadı. "karma", önceden hesaplanmış geçerli bir karma değer veya istenecek 0 olabilir
hesaplanacak olmasıdır.

SV* hv_delete_ent(HV *hv, SV *keysv, I32 bayrakları,
U32 karma)

hv_exists
Belirtilen karma anahtarın var olup olmadığını gösteren bir boole döndürür. Mutlak
"klen" değeri anahtarın uzunluğudur. "klen" negatifse, anahtar
UTF-8 kodlu Unicode'da olduğu varsayılır.

bool hv_exists(HV *hv, const char *anahtar, I32 klen)

hv_exists_ent
Belirtilen karma anahtarın var olup olmadığını gösteren bir boole döndürür. "hash" olabilir
geçerli bir önceden hesaplanmış karma değer veya hesaplanmasını istemek için 0.

bool hv_exists_ent(HV *hv, SV *keysv, U32 karma)

hv_fetch
Karmada belirtilen anahtara karşılık gelen SV'yi döndürür. Mutlak
"klen" değeri anahtarın uzunluğudur. "klen" negatifse, anahtar
UTF-8 kodlu Unicode'da olduğu varsayılır. "lval" ayarlanmışsa, getirme
bir mağazanın parçası. Bu şu anlama gelir, eğer hash ile ilişkili bir değer yoksa
verilen anahtar, ardından bir tane oluşturulur ve ona bir işaretçi döndürülür. "SV*" bu
noktaları atanabilir. Ancak her zaman dönüş değerinin boş olmadığını kontrol edin.
"SV*" olarak referansını kaldırmadan önce.

Daha fazla bilgi için perlguts'ta "Bağlı Karmaların ve Dizilerin Sihrini Anlamak" bölümüne bakın
bağlı karmalarda bu işlevin nasıl kullanılacağı hakkında bilgi.

SV** hv_fetch(HV *hv, const char *anahtar, I32 klen,
I32 değeri)

hv_fetch'ler
"hv_fetch" gibi, ancak dize/uzunluk çifti yerine değişmez bir dize alır.

SV** hv_fetchs(HV* tb, const karakter* anahtarı, I32 lval)

hv_fetch_ent
Karmada belirtilen anahtara karşılık gelen karma girdisini döndürür. "doğramak"
verilen "anahtar" için önceden hesaplanmış geçerli bir karma numarası veya isterseniz 0 olmalıdır.
hesaplamak için işlev. EĞER "lval" ayarlanmışsa, getirme bir mağazanın parçası olacaktır.
Erişmeden önce dönüş değerinin boş olmadığından emin olun. Dönüş değeri ne zaman
"hv" bağlı bir karmadır, statik bir konuma işaretçidir, bu nedenle bir kopya oluşturduğunuzdan emin olun
yapının bir yerde saklamanız gerekiyorsa.

Daha fazla bilgi için perlguts'ta "Bağlı Karmaların ve Dizilerin Sihrini Anlamak" bölümüne bakın
bağlı karmalarda bu işlevin nasıl kullanılacağı hakkında bilgi.

HE* hv_fetch_ent(HV *hv, SV *keysv, I32 lval,
U32 karma)

hv_fill Kullanımda olan karma paketlerin sayısını döndürür. Bu işlev
"HvFILL" makrosu tarafından sarılır.

Önceden bu değer her zaman HV yapısında saklanıyordu, bu da bir
olan bir şey için her karma (ve hemen hemen her nesne) üzerinde ek yük
nadiren kullanılmış. Şimdi ilk ihtiyaç duyulduğunda talep üzerine hesaplıyoruz ve
Bu hesaplamanın tekrarlanması maliyetli olacaksa önbelleğe alın. Önbelleğe alınan değer
eklemeler ve silmelerle güncellenir, ancak (şu anda) karma ise atılır
Bölünmüş.

STRLEN hv_fill(HV *sabit hv)

hv_iterinit
Bir karma tablosunda gezinmek için bir başlangıç ​​noktası hazırlar. Anahtarların sayısını döndürür
karma (yani "HvUSEDKEYS(hv)" ile aynı). Dönüş değeri şu anda yalnızca
kravat büyüsü olmayan hashler için anlamlıdır.

NOT: 5.004_65 sürümünden önce, "hv_iterinit", karma sayısını döndürmek için kullanılırdı.
kullanımda olan kovalar. Hala bu ezoterik değere ihtiyacınız varsa,
"HvFILL(hv)" makrosu üzerinden alın.

I32 hv_iterinit(HV *hv)

hv_iterkey
Anahtarı, karma yineleyicinin geçerli konumundan döndürür. Görmek
"hv_iterinit".

char* hv_iterkey(HE* girişi, I32* geri verildi)

hv_iterkeysv
Anahtarı, karma yineleyicinin geçerli konumundan bir "SV*" olarak döndürür. bu
dönüş değeri her zaman anahtarın ölümlü bir kopyası olacaktır. Ayrıca bkz. "hv_iterinit".

SV* hv_iterkeysv(HE* girişi)

hv_iternext
Bir karma yineleyiciden girdileri döndürür. "hv_iterinit" bölümüne bakın.

Yineleyicinin kullandığı karma girişte "hv_delete" veya "hv_delete_ent" diyebilirsiniz.
şu anda yerinizi kaybetmeden veya yineleyicinizi geçersiz kılmadan işaret ediyor.
Bu durumda, mevcut girişin, hash'den sizinkiyle silindiğini unutmayın.
son referansı tutan yineleyici. Yineleyiciniz serbest bırakmak için işaretlendi
"hv_iternext" için bir sonraki çağrıda giriş yapın, bu nedenle yineleyicinizi atmamalısınız
aksi takdirde giriş sızdıracak - kaynağı tetiklemek için "hv_iternext" arayın
serbest bırakma.

HE* hv_iternext(HV *hv)

hv_iternextsv
Tek işlemde "hv_iternext", "hv_iterkey" ve "hv_iterval" gerçekleştirir.

SV* hv_iternextsv(HV *hv, karakter **anahtar, I32 *retlen)

hv_iternext_flags
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Bir karma yineleyiciden girdileri döndürür. "hv_iterinit" ve "hv_iternext"e bakın. bu
"bayraklar" değeri normalde sıfır olacaktır; HV_ITERNEXT_WANTPLACEHOLDERS ayarlanırsa
yer tutucu anahtarları (sınırlı karmalar için) normale ek olarak iade edilecektir
anahtarlar. Varsayılan olarak yer tutucular otomatik olarak atlanır. Şu anda bir
yer tutucu, &PL_sv_placeholder olan bir değerle uygulanır. Şuna dikkat edin:
yer tutucuların ve kısıtlı karmaların uygulanması değişebilir ve
Uygulama şu anda herhangi bir değişikliğin düzenli olması için yeterince soyutlanmamıştır.

HE* hv_iternext_flags(HV *hv, I32 bayrakları)

hv_iterval
Karma yineleyicinin geçerli konumundan değeri döndürür. Görmek
"hv_iterkey".

SV* hv_iterval(HV *hv, HE *giriş)

hv_magic
Bir karmaya sihir ekler. Bkz. "sv_magic".

void hv_magic(HV *hv, GV *gv, int nasıl)

hv_skalar
Karmayı skaler bağlamda değerlendirir ve sonucu döndürür. Ne zaman sihirle uğraşır
hash bağlanır.

SV* hv_scalar(HV *hv)

hv_store
Bir SV'yi bir hash içinde saklar. Karma anahtar "anahtar" olarak belirtilir ve mutlak değer
"klen", anahtarın uzunluğudur. "klen" negatifse, anahtarın
UTF-8 kodlu Unicode'da olun. "karma" parametresi, önceden hesaplanmış karma değerdir;
sıfır ise, Perl bunu hesaplayacaktır.

İşlem başarısız olursa veya değere ihtiyaç duyulmadıysa, dönüş değeri NULL olacaktır.
aslında karma içinde depolanacak (bağlı karmalar durumunda olduğu gibi). Aksi halde
orijinal "SV*" elde etmek için başvurudan çıkarılabilir. Arayanın
önce "val" referans sayısını uygun şekilde artırmaktan sorumludur.
çağırın ve işlev NULL döndürdüyse onu azaltın. Etkili bir şekilde başarılı
hv_store, "val" için bir başvurunun sahipliğini alır. Bu genellikle senin
istemek; yeni oluşturulan bir SV'nin referans sayısı birdir, bu nedenle kodunuzun yaptığı tek şey
SV'ler oluşturun ve bunları bir karmada saklayın, hv_store
yeni SV ve kodunuzun toparlamak için başka bir şey yapmasına gerek yok. hv_store (şimdiki değeri)
hv_store_ent çağrısı olarak uygulanmadı ve geçici bir SV oluşturmaz.
anahtar, bu nedenle anahtar verileriniz zaten SV biçiminde değilse, hv_store içinde kullanın.
hv_store_ent tercihi.

Daha fazla bilgi için perlguts'ta "Bağlı Karmaların ve Dizilerin Sihrini Anlamak" bölümüne bakın
bağlı karmalarda bu işlevin nasıl kullanılacağı hakkında bilgi.

SV** hv_store(HV *hv, const char *anahtar, I32 klen,
SV *val, U32 karma)

hv_stores
"hv_store" gibi, ancak dize/uzunluk çifti yerine değişmez bir dize alır ve
hash parametresini atlar.

SV** hv_stores(HV* tb, const char* anahtarı,
NULLOK SV* değeri)

hv_store_ent
Bir hash içinde "val" depolar. Karma anahtar "anahtar" olarak belirtilir. "karma" parametresi
önceden hesaplanmış karma değerdir; sıfır ise, Perl bunu hesaplayacaktır. bu
dönüş değeri, bu şekilde oluşturulan yeni karma girdidir. İşlem yapılırsa NULL olacaktır.
başarısız olduysa veya değerin hash içinde gerçekten saklanması gerekmiyorsa (olduğu gibi)
bağlı karmalar durumunda). Aksi takdirde, dönüş değerinin içeriği
"O?" kullanılarak erişildi. Burada açıklanan makrolar. Arayanın
önce "val" referans sayısını uygun şekilde artırmaktan sorumludur.
çağırın ve işlev NULL döndürdüyse onu azaltın. Etkili bir şekilde başarılı
hv_store_ent, "val" için bir başvurunun sahipliğini alır. Bu genellikle senin
istemek; yeni oluşturulan bir SV'nin referans sayısı birdir, bu nedenle kodunuzun yaptığı tek şey
SV'ler oluşturun ve bunları bir karmada saklayın, hv_store
yeni SV ve kodunuzun toparlamak için başka bir şey yapmasına gerek yok. Bunu not et
hv_store_ent sadece "anahtar"ı okur; "val" den farklı olarak sahipliğini almaz,
bu nedenle "anahtar" üzerinde doğru referans sayısını korumak tamamen arayanın
sorumluluk. hv_store, hv_store_ent çağrısı olarak uygulanmaz ve
anahtar için geçici bir SV oluşturmayın, bu nedenle anahtar verileriniz zaten SV'de değilse
formu sonra hv_store_ent yerine hv_store kullanın.

Daha fazla bilgi için perlguts'ta "Bağlı Karmaların ve Dizilerin Sihrini Anlamak" bölümüne bakın
bağlı karmalarda bu işlevin nasıl kullanılacağı hakkında bilgi.

HE* hv_store_ent(HV *hv, SV *anahtar, SV *val, U32 karma)

hv_undef
Karmayı tanımlamaz. "undef(%hash)" ifadesinin XS eşdeğeri.

Hash'in tüm öğelerini serbest bırakmanın yanı sıra (gibi hv_clear()), bu da serbest bırakır
karma ile ilişkili herhangi bir yardımcı veri ve depolama.

Dönüşte muhtemelen geçersiz olan karma hakkında bir not için "av_clear" konusuna bakın.

geçersiz hv_undef(HV *hv)

newHV Yeni bir HV oluşturur. Referans sayısı 1 olarak ayarlanmıştır.

YG* yeniHV()

kanca manipülasyon


Bu işlevler, kanca değişkenlerini manipüle etmek için kullanışlı ve güvenli bir yol sağlar.

sarma_op_checker
Belirtilen bir işlem türü için kontrol işlevleri zincirine bir C işlevi yerleştirir. Bu
"PL_check" dizisini değiştirmenin tercih edilen yoludur. işlemkodu hangisi olduğunu belirtir
op türü etkilenecektir. new_checker olan C işlevine bir işaretçidir
bu işlem kodunun kontrol zincirine eklenecek ve eski_denetleyici_p depolamaya işaret ediyor
zincirdeki bir sonraki işleve yönelik bir işaretçinin depolanacağı konum. bu
değeri yeni_işaretçi "PL_check" dizisine yazılırken, değer
daha önce orada saklanan *old_checker_p.

Fonksiyon şu şekilde tanımlanmalıdır:

statik OP *new_checker(pTHX_ OP *op) { ... }

Bu şekilde çağrılması amaçlanmıştır:

new_checker(aTHX_ işlem)

eski_denetleyici_p şöyle tanımlanmalıdır:

statik Perl_check_t old_checker_p;

"PL_check", tüm süreç için geneldir ve op'u bağlamak isteyen bir modül
kontrol, işlem başına bir defadan fazla çağrıldığını görebilir, tipik olarak
farklı iplikler. Bu durumla başa çıkmak için, bu işlev önemsizdir. bu
yer *old_checker_p başlangıçta (işlem başına bir kez) bir boş gösterici içermelidir.
Statik sürenin AC değişkeni (dosya kapsamında bildirilir, tipik olarak ayrıca işaretlenir
"statik" dahili bağlantı vermek için) örtük olarak başlatılacaktır
uygun şekilde, açık bir başlatıcıya sahip değilse. Bu fonksiyon
sadece bulursa kontrol zincirini gerçekten değiştirin *old_checker_p boş olmak. Bu
işlev aynı zamanda küçük ölçekte iş parçacığı için güvenlidir. Uygun kilitlemeyi kullanır
"PL_check"e erişimde yarış koşullarından kaçının.

Bu işlev çağrıldığında, başvurulan işlev new_checker hazır olmalı
dışında çağrılacak *old_checker_p doldurulmamış olması. Bir iş parçacığı durumunda,
new_checker bu işlev geri dönmeden önce bile hemen çağrılabilir.
*old_checker_p her zaman önce uygun şekilde ayarlanacaktır new_checker denir. Eğer
new_checker verilen bir operasyonla özel bir şey yapmamaya karar verir (ki
op çek kancalamanın çoğu kullanımı için olağan durumdur), çeki zincirlemelidir
tarafından başvurulan işlev *old_checker_p.

Belirli bir alt programa yapılan çağrıların derlenmesini etkilemek istiyorsanız,
Tüm "entersub" operasyonlarını kontrol etmek yerine "cv_set_call_checker".

void wrap_op_checker(Optype işlem kodu,
Perl_check_t new_checker,
Perl_check_t *old_checker_p)

Lexer arayüzey


Bu, Perl ayrıştırıcısının alt katmanıdır, karakterleri ve belirteçleri yönetir.

lex_bufutf8
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Sözcük arabelleğindeki ("PL_parser->linestr") sekizlilerin olması gerekip gerekmediğini gösterir.
Unicode karakterlerinin UTF-8 kodlaması olarak yorumlanır. Değilse, olmalılar
Latin-1 karakterleri olarak yorumlanır. Bu, "SvUTF8" bayrağına benzer.
skaler.

UTF-8 modunda, lexer arabelleğinin gerçekten geçerli içerik içerdiği garanti edilmez.
UTF-8. Lexing kodu, geçersiz kodlama karşısında sağlam olmalıdır.

"PL_parser->linestr" skalerinin gerçek "SvUTF8" bayrağı önemlidir, ancak
giriş karakter kodlamasıyla ilgili tüm hikaye değil. Normalde, bir dosya
okunuyor, skaler sekizli içeriyor ve "SvUTF8" bayrağı kapalı, ancak
"utf8 kullan" pragması etkinse, oktetler UTF-8 olarak yorumlanmalıdır.
Ancak bir dize değerlendirme sırasında, skaler "SvUTF8" bayrağına sahip olabilir ve
bu durumda, "bayt kullan" pragma olmadığı sürece sekizlileri UTF-8 olarak yorumlanmalıdır.
yürürlüktedir. Bu mantık gelecekte değişebilir; yerine bu işlevi kullanın
mantığı kendiniz uygulamak.

bool lex_bufutf8()

lex_discard_to
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"PL_parser->linestr" arabelleğinin ilk bölümünü en fazla atar. ptr.
arabelleğin kalan içeriği taşınacak ve tüm işaretçiler arabelleğe
uygun şekilde güncellendi. ptr tamponun konumundan daha sonra olmamalıdır
"PL_parser->bufptr": henüz yazılmamış metinlerin atılmasına izin verilmez.

Normalde bunu doğrudan yapmak gerekli değildir, çünkü bunu kullanmak yeterlidir.
"lex_next_chunk" ve buna dayalı şeylerin örtülü atma davranışı.
Ancak, bir belirteç birden çok satıra yayılıyorsa ve sözcük kodu
bu amaç için arabellekte birden çok metin satırı, ardından tamamlandıktan sonra
belirteç, şimdi gereksiz olan önceki satırları açıkça atmak akıllıca olacaktır,
Gelecekteki çok satırlı belirteçlerin arabelleği sınırsız olarak büyütmesini önlemek için.

geçersiz lex_discard_to(char *ptr)

lex_grow_linestr
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Lexer arabelleğini ("PL_parser->linestr") en azından barındırmak için yeniden tahsis eder len
sekizli ("NUL" sonlandırma dahil). Yeniden tahsis edilene bir işaretçi döndürür
tampon. Bu, tamponda herhangi bir doğrudan değişiklik yapmadan önce gereklidir.
uzunluğunu artıracaktır. "lex_stuff_pvn" daha uygun bir yol sağlar
arabelleğe metin ekleyin.

Doğrudan "PL_parser->linestr" üzerinde "SvGROW" veya "sv_grow" kullanmayın; bu fonksiyon
doğrudan arabelleğe işaret eden tüm sözlük değişkenlerini günceller.

char * lex_grow_linestr(STRLEN uzunluk)

lex_next_chunk
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"PL_parser->linestr" öğesine ekleyerek, yazılacak metnin sonraki yığınını okur.
Bu, lexing kodu mevcut yığının sonuna baktığında çağrılmalıdır.
ve daha fazlasını bilmek istiyor. Lexing'in sahip olması olağandır, ancak gerekli değildir.
şu anda mevcut yığının tamamını tüketti.

"PL_parser->bufptr" geçerli yığının en sonuna işaret ediyorsa (yani,
mevcut yığın tamamen tüketildi), normalde mevcut yığın
yeni yığın okunurken aynı anda atılır. bayraklar içerir
"LEX_KEEP_PREVIOUS", mevcut yığın atılmayacaktır. eğer akım
yığın tamamen tüketilmediyse, ne olursa olsun atılmayacaktır.
bayrak.

Ara belleğe bazı yeni metinler eklendiyse true, arabelleğe eklenmişse false döndürür.
giriş metninin sonuna ulaştı.

bool lex_next_chunk(U32 bayrakları)

lex_peek_unichar
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Şu anda lexed metinde bir (Unicode) karakter ileriye bakar. İadeler
sonraki karakterin kod noktası (işaretsiz tamsayı değeri) veya lexing varsa -1
giriş metninin sonuna ulaştı. Peeked karakteri tüketmek için şunu kullanın:
"lex_read_unichar".

Bir sonraki karakter, giriş metninin bir sonraki parçasındaysa (veya içine uzanıyorsa),
sonraki parça okunacak. Normalde mevcut parça,
aynı zamanda, ama eğer bayraklar "LEX_KEEP_PREVIOUS" içeriyorsa, geçerli yığın
atılmaz.

Giriş UTF-8 olarak yorumlanıyorsa ve bir UTF-8 kodlama hatası
karşılaşıldığında, bir özel durum oluşturulur.

I32 lex_peek_unichar(U32 bayrakları)

lex_read_space
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Şu anda lexed metinde isteğe bağlı boşlukları Perl stilinde okur. bu
boşluklar sıradan boşluk karakterlerini ve Perl tarzı yorumları içerebilir.
"#line" yönergeleri karşılaşıldığında işlenir. "PL_parser->bufptr" taşındı
boşluk olmayan bir karakteri (veya
giriş metni).

Boşluklar, giriş metninin bir sonraki parçasına uzanırsa, bir sonraki parça okunacaktır.
içinde. Normalde mevcut yığın aynı anda atılır, ancak bayraklar
"LEX_KEEP_PREVIOUS" içeriyorsa, geçerli yığın atılmayacaktır.

void lex_read_space(U32 bayrakları)

lex_read_to
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Lexer arabelleğindeki metni "PL_parser->bufptr" den şuna kadar tüketin: ptr. Bu
"PL_parser->bufptr" öğesini eşleşecek şekilde ilerletir ptr, doğru muhasebenin yapılması
ne zaman bir yeni satır karakteri geçirilirse. Lexed tüketmenin normal yolu budur.
Metin.

Tamponun sekizlilerinin yorumlanması, hafifçe kullanılarak soyutlanabilir.
üst düzey işlevler "lex_peek_unichar" ve "lex_read_unichar".

geçersiz lex_read_to(char *ptr)

lex_read_unichar
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

O anda lexed metinde sonraki (Unicode) karakteri okur. döndürür
karakterin kod noktası (işaretsiz tamsayı değeri) okunur ve hareket eder
"PL_parser->bufptr" karakteri geçtikten sonra veya lexing'e ulaştıysa -1 döndürür
giriş metninin sonu. Sonraki karakteri tahribatsız bir şekilde incelemek için şunu kullanın:
Bunun yerine "lex_peek_unichar".

Bir sonraki karakter, giriş metninin bir sonraki parçasındaysa (veya içine uzanıyorsa),
sonraki parça okunacak. Normalde mevcut parça,
aynı zamanda, ama eğer bayraklar "LEX_KEEP_PREVIOUS" içeriyorsa, geçerli yığın
atılmaz.

Giriş UTF-8 olarak yorumlanıyorsa ve bir UTF-8 kodlama hatası
karşılaşıldığında, bir özel durum oluşturulur.

I32 lex_read_unichar(U32 bayrakları)

lex_start
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

içinde bir bağlam sağlayarak yeni bir lexer/parser state nesnesi oluşturur ve başlatır.
yeni bir Perl kodu kaynağından lex ve ayrıştırma. Yeni duruma bir işaretçi
nesne "PL_parser" içine yerleştirilir. Kaydetme yığınına bir giriş yapılır, böylece
yeni durum nesnesinin çözülmesi yok edilecek ve eski değeri
"PL_parser" geri yüklenecek. Ayrıştırmayı temizlemek için başka bir şey yapılmasına gerek yok
bağlamı.

Ayrıştırılacak kod geliyor hat ve RSFP. hat, boş değilse, bir sağlar
ayrıştırılacak kodu içeren dize (SV biçiminde). Dizenin bir kopyası yapılır,
böylece sonraki değişiklik hat ayrıştırmayı etkilemez. RSFP, eğer boş değilse,
kodun ayrıştırılmak üzere okunacağı bir girdi akışı sağlar. eğer ikisi de
boş olmayan, içindeki kod hat önce gelir ve tam satırlardan oluşmalıdır
girdi ve RSFP kaynağın geri kalanını sağlar.

The bayraklar parametre ileride kullanılmak üzere ayrılmıştır. Şu anda sadece perl tarafından kullanılıyor
dahili olarak, bu nedenle uzantılar her zaman sıfırı geçmelidir.

void lex_start(SV *satırı, PerlIO *rsfp, U32 bayrakları)

lex_stuff_pv
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Karakterleri lexer arabelleğine ("PL_parser->linestr") ekleyin, hemen sonra
geçerli lexing noktası ("PL_parser->bufptr"), eğer varsa arabelleği yeniden tahsis eder
gerekli. Bu, daha sonra çalışan lexing kodunun karakterleri şu şekilde göreceği anlamına gelir.
girişte görünmüş olsalardı. parçası olarak bunu yapmanız önerilmez.
normal ayrıştırma ve bu tesisin çoğu kullanımı, eklenen
karakterlerin istenmeyen bir şekilde yorumlanması.

Eklenecek dize, şuradan başlayan sekizli sayılarla temsil edilir: pv ve devam ediyor
ilk sıfıra. Bu sekizli, UTF-8 veya Latin-1 olarak yorumlanır,
"LEX_STUFF_UTF8" bayrağının ayarlanıp ayarlanmadığına göre bayraklar. Karakterler
arabelleğin şu anda nasıl olduğuna bağlı olarak, lexer arabelleği için yeniden kodlanır
yorumlandı ("lex_bufutf8"). Bir dizgeyi boş sonlandırmak uygun değilse
eklendiğinde, "lex_stuff_pvn" işlevi daha uygundur.

void lex_stuff_pv(const char *pv, U32 bayrakları)

lex_stuff_pvn
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Karakterleri lexer arabelleğine ("PL_parser->linestr") ekleyin, hemen sonra
geçerli lexing noktası ("PL_parser->bufptr"), eğer varsa arabelleği yeniden tahsis eder
gerekli. Bu, daha sonra çalışan lexing kodunun karakterleri şu şekilde göreceği anlamına gelir.
girişte görünmüş olsalardı. parçası olarak bunu yapmanız önerilmez.
normal ayrıştırma ve bu tesisin çoğu kullanımı, eklenen
karakterlerin istenmeyen bir şekilde yorumlanması.

Eklenecek dize ile temsil edilir len başlayan sekizli pv. Bunlar
oktetler, olup olmadığına göre UTF-8 veya Latin-1 olarak yorumlanır.
"LEX_STUFF_UTF8" bayrağı ayarlandı bayraklar. Karakterler lexer için yeniden kodlanmıştır
arabelleğin şu anda nasıl yorumlandığına göre arabellek
("lex_bufutf8"). Eklenecek bir dize Perl skaleri olarak mevcutsa,
"lex_stuff_sv" işlevi daha uygundur.

void lex_stuff_pvn(const char *pv, STRLEN len,
U32 bayrakları)

lex_stuff_pvs
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"lex_stuff_pvn" gibi, ancak dize/uzunluk çifti yerine değişmez bir dize alır.

void lex_stuff_pvs(const char *pv, U32 bayrakları)

lex_stuff_sv
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Karakterleri lexer arabelleğine ("PL_parser->linestr") ekleyin, hemen sonra
geçerli lexing noktası ("PL_parser->bufptr"), eğer varsa arabelleği yeniden tahsis eder
gerekli. Bu, daha sonra çalışan lexing kodunun karakterleri şu şekilde göreceği anlamına gelir.
girişte görünmüş olsalardı. parçası olarak bunu yapmanız önerilmez.
normal ayrıştırma ve bu tesisin çoğu kullanımı, eklenen
karakterlerin istenmeyen bir şekilde yorumlanması.

Eklenecek dize, dize değeridir sv. Karakterler yeniden kodlandı
lexer arabelleği için, arabelleğin şu anda nasıl yorumlandığına göre
("lex_bufutf8"). Eklenecek bir dize zaten bir Perl skaleri değilse,
"lex_stuff_pvn" işlevi, bir skaler oluşturma ihtiyacını ortadan kaldırır.

void lex_stuff_sv(SV *sv, U32 bayrakları)

lex_unstuff
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

"PL_parser->bufptr" den şuna kadar, yazılmak üzere olan metni atar ptr. Metin
takip etme ptr taşınacak ve arabellek kısaltılacaktır. Bu atılanları gizler
metin hiç görünmemiş gibi, daha sonra çalışan herhangi bir sözcük kodundan metin.

Lexed metni tüketmenin normal yolu bu değildir. Bunun için "lex_read_to" kullanın.

geçersiz lex_unstuff(char *ptr)

ayrıştırma_arithexpr
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Bir Perl aritmetik ifadesini ayrıştırın. Bu, aşağı öncelikli operatörler içerebilir
bit kaydırma operatörlerine. İfade takip edilmelidir (ve dolayısıyla sonlandırılmalıdır)
ya bir karşılaştırma ya da daha düşük öncelikli işleç ya da
normalde noktalı virgül gibi bir ifadeyi sonlandırın. Eğer bayraklar içerir
"PARSE_OPTIONAL" ifadesi isteğe bağlıdır, aksi takdirde zorunludur. o
dinamik ayrıştırıcı durumunun ("PL_parser" ve diğerleri) olduğundan emin olmak arayan kişiye bağlıdır.
ayrıştırılacak kodun kaynağını ve sözlüksel olanı yansıtacak şekilde doğru şekilde ayarlanmış
ifade için bağlam.

İfadeyi temsil eden op ağacı döndürülür. İsteğe bağlı bir ifade ise
yoksa, bir boş gösterici döndürülür, aksi takdirde işaretçi boş olmaz.

Ayrıştırma veya derlemede bir hata oluşursa, çoğu durumda geçerli bir işlem ağacı
neyse döndü. Hata, ayrıştırıcı durumuna yansıtılır ve normalde
tüm derlemeyi kapsayan en üst ayrıştırma düzeyinde tek bir istisnada
meydana gelen hatalar. Ancak bazı derleme hataları bir istisna atar
hemen.

OP * parse_arithexpr(U32 bayrakları)

ayrıştırma_barestmt
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Süslenmemiş tek bir Perl ifadesini ayrıştırın. Bu normal bir zorunluluk olabilir
deyim veya derleme zamanı etkisi olan bir bildirim. Hiçbirini içermez
etiket veya başka bir ek. Dinamik olmasını sağlamak arayan kişiye kalmıştır.
ayrıştırıcı durumu ("PL_parser" ve diğerleri), kaynağın kaynağını yansıtacak şekilde doğru bir şekilde ayarlanmıştır.
ayrıştırılacak kod ve ifadenin sözcüksel bağlamı.

İfadeyi temsil eden op ağacı döndürülür. Bu bir boş gösterici olabilir, eğer
ifade boştur, örneğin aslında bir alt program tanımıysa
(derleme zamanı yan etkileri olan). Null değilse, doğrudan ops olacak
ifadeyi uygulamak, "newSTATEOP" a geçmek için uygundur. O olmaz
normalde bir "sonraki durum" veya eşdeğer bir işlem içerir (bir
kapsam tamamen ifadenin içinde yer alır).

Ayrıştırma veya derlemede bir hata oluşursa, çoğu durumda geçerli bir işlem ağacı (çoğu
muhtemelen null) yine de döndürülür. Hata, ayrıştırıcı durumuna yansıtılır,
normalde, en üst ayrıştırma düzeyinde tek bir istisna ile sonuçlanır.
oluşan tüm derleme hataları. Ancak bazı derleme hataları
hemen bir istisna atmak.

The bayraklar parametre gelecekte kullanılmak üzere ayrılmıştır ve her zaman sıfır olmalıdır.

OP * parse_barestmt(U32 bayrakları)

ayrıştırma_blok
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Tek bir tam Perl kod bloğunu ayrıştırın. Bu, bir açma ayracı, bir
ifadeler dizisi ve bir kapanış ayracı. Blok bir sözlük oluşturur
kapsam, bu nedenle "benim" değişkenlerim ve çeşitli derleme zamanı efektleri içinde bulunabilir
o. Dinamik ayrıştırıcı durumunun ("PL_parser") sağlandığından emin olmak arayan kişinin sorumluluğundadır.
et al) ayrıştırılacak kodun kaynağını yansıtacak şekilde doğru şekilde ayarlanmıştır ve
ifade için sözcüksel bağlam.

Kod bloğunu temsil eden op ağacı döndürülür. Bu her zaman gerçek bir operasyondur,
asla boş gösterici. Normalde "nextstate" de dahil olmak üzere bir "lineseq" listesi olacaktır.
veya eşdeğer işlemler. Herhangi bir çalışma zamanı kapsamı oluşturmaya yönelik hiçbir işlem, aşağıdakiler tarafından dahil edilmez:
blok olmasından kaynaklanmaktadır.

Ayrıştırma veya derlemede bir hata oluşursa, çoğu durumda geçerli bir işlem ağacı (çoğu
muhtemelen null) yine de döndürülür. Hata, ayrıştırıcı durumuna yansıtılır,
normalde, en üst ayrıştırma düzeyinde tek bir istisna ile sonuçlanır.
oluşan tüm derleme hataları. Ancak bazı derleme hataları
hemen bir istisna atmak.

The bayraklar parametre gelecekte kullanılmak üzere ayrılmıştır ve her zaman sıfır olmalıdır.

OP * parse_block(U32 bayrakları)

ayrıştırma_fullexpr
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Tek bir tam Perl ifadesini ayrıştırın. Bu, tam ifade dilbilgisine izin verir,
"veya" gibi en düşük öncelikli operatörler dahil. ifade olmalıdır
bir ifadenin normalde olacağı bir belirteç tarafından takip edilir (ve böylece sonlandırılır)
tarafından sonlandırıldı: dosya sonu, parantez kapatma noktalama, noktalı virgül veya bunlardan biri
bir postfix ifade-ifade değiştiricisini işaret eden anahtar sözcükler. Eğer bayraklar
"PARSE_OPTIONAL" içeriyorsa, ifade isteğe bağlıdır, aksi takdirde
zorunlu. Dinamik ayrıştırıcı durumunun sağlandığından emin olmak arayan kişiye kalmıştır.
("PL_parser" ve diğerleri), kodun kaynağını yansıtacak şekilde doğru bir şekilde ayarlanmıştır.
ayrıştırılmış ve ifadenin sözcüksel bağlamı.

İfadeyi temsil eden op ağacı döndürülür. İsteğe bağlı bir ifade ise
yoksa, bir boş gösterici döndürülür, aksi takdirde işaretçi boş olmaz.

Ayrıştırma veya derlemede bir hata oluşursa, çoğu durumda geçerli bir işlem ağacı
neyse döndü. Hata, ayrıştırıcı durumuna yansıtılır ve normalde
tüm derlemeyi kapsayan en üst ayrıştırma düzeyinde tek bir istisnada
meydana gelen hatalar. Ancak bazı derleme hataları bir istisna atar
hemen.

OP * parse_fullexpr(U32 bayrakları)

ayrıştırma_fullstmt
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Tek bir tam Perl ifadesini ayrıştırın. Bu normal bir zorunluluk ifadesi olabilir
veya derleme zamanı etkisi olan ve isteğe bağlı etiketler içerebilen bir bildirim.
Dinamik ayrıştırıcı durumunun ("PL_parser" ve diğerleri) olduğundan emin olmak arayan kişiye kalmıştır.
ayrıştırılacak kodun kaynağını ve sözcüksel bilgiyi yansıtacak şekilde doğru şekilde ayarlanmıştır.
açıklama için bağlam.

İfadeyi temsil eden op ağacı döndürülür. Bu bir boş gösterici olabilir, eğer
ifade boştur, örneğin aslında bir alt program tanımıysa
(derleme zamanı yan etkileri olan). Null değilse, bir sonucu olacaktır
Normalde bir "nextstate" veya eşdeğer bir işlem içeren "newSTATEOP" çağrısı.

Ayrıştırma veya derlemede bir hata oluşursa, çoğu durumda geçerli bir işlem ağacı (çoğu
muhtemelen null) yine de döndürülür. Hata, ayrıştırıcı durumuna yansıtılır,
normalde, en üst ayrıştırma düzeyinde tek bir istisna ile sonuçlanır.
oluşan tüm derleme hataları. Ancak bazı derleme hataları
hemen bir istisna atmak.

The bayraklar parametre gelecekte kullanılmak üzere ayrılmıştır ve her zaman sıfır olmalıdır.

OP * parse_fullstmt(U32 bayrakları)

ayrıştırma_etiketi
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Bir Perl'nin önüne ekleyebilecek türden, muhtemelen isteğe bağlı olan tek bir etiketi ayrıştırın
Beyan. Dinamik ayrıştırıcı durumunun sağlandığından emin olmak arayan kişiye kalmıştır.
("PL_parser" ve diğerleri), kodun kaynağını yansıtacak şekilde doğru bir şekilde ayarlanmıştır.
ayrıştırıldı. Eğer bayraklar "PARSE_OPTIONAL" içeriyorsa, etiket isteğe bağlıdır, aksi takdirde
bu zorunludur.

Etiketin adı yeni bir skaler biçiminde döndürülür. isteğe bağlı ise
etiket yok, bir boş gösterici döndürülür.

Ayrıştırmada yalnızca etiketin zorunlu olması durumunda meydana gelebilecek bir hata oluşursa, bir
yine de geçerli etiket döndürülür. Hata, ayrıştırıcı durumuna yansıtılır,
normalde, en üst ayrıştırma düzeyinde tek bir istisna ile sonuçlanır.
oluşan tüm derleme hataları.

SV * parse_label(U32 bayrakları)

ayrıştırma_listexpr
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Bir Perl listesi ifadesini ayrıştırın. Bu, aşağıdakilere kadar öncelik operatörlerini içerebilir:
virgül operatörü. İfade takip edilmeli (ve dolayısıyla sonlandırılmalıdır)
"veya" gibi düşük öncelikli bir mantık operatörü veya
normalde noktalı virgül gibi bir ifadeyi sonlandırın. Eğer bayraklar içerir
"PARSE_OPTIONAL" ifadesi isteğe bağlıdır, aksi takdirde zorunludur. o
dinamik ayrıştırıcı durumunun ("PL_parser" ve diğerleri) olduğundan emin olmak arayan kişiye bağlıdır.
ayrıştırılacak kodun kaynağını ve sözlüksel olanı yansıtacak şekilde doğru şekilde ayarlanmış
ifade için bağlam.

İfadeyi temsil eden op ağacı döndürülür. İsteğe bağlı bir ifade ise
yoksa, bir boş gösterici döndürülür, aksi takdirde işaretçi boş olmaz.

Ayrıştırma veya derlemede bir hata oluşursa, çoğu durumda geçerli bir işlem ağacı
neyse döndü. Hata, ayrıştırıcı durumuna yansıtılır ve normalde
tüm derlemeyi kapsayan en üst ayrıştırma düzeyinde tek bir istisnada
meydana gelen hatalar. Ancak bazı derleme hataları bir istisna atar
hemen.

OP * parse_listexpr(U32 bayrakları)

ayrıştırma_stmtseq
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Sıfır veya daha fazla Perl ifadesi dizisini ayrıştırın. Bunlar normal zorunluluk olabilir
isteğe bağlı etiketler veya derleme zamanı olan bildirimler dahil olmak üzere ifadeler
etkisi veya bunların herhangi bir karışımı. İfade dizisi, bir kapanış ayracı olduğunda sona erer.
veya yeni bir ifadenin geçerli olarak sahip olabileceği bir yerde dosya sonuyla karşılaşıldı
başladı. Dinamik ayrıştırıcı durumunun sağlandığından emin olmak arayan kişiye kalmıştır.
("PL_parser" ve diğerleri), kodun kaynağını yansıtacak şekilde doğru bir şekilde ayarlanmıştır.
ayrıştırılmış ve ifadeler için sözcüksel bağlam.

İfade sırasını temsil eden op ağacı döndürülür. Bu boş olabilir
işaretçi, ifadelerin tümü boşsa, örneğin hiçbir ifade yoksa
veya yalnızca alt program tanımları varsa (derleme zamanı tarafı olan)
Etkileri). Null değilse, normalde aşağıdakileri içeren bir "lineseq" listesi olacaktır.
"nextstate" veya eşdeğer işlemler.

Ayrıştırma veya derlemede bir hata oluşursa, çoğu durumda geçerli bir işlem ağacı
neyse döndü. Hata, ayrıştırıcı durumuna yansıtılır ve normalde
tüm derlemeyi kapsayan en üst ayrıştırma düzeyinde tek bir istisnada
meydana gelen hatalar. Ancak bazı derleme hataları bir istisna atar
hemen.

The bayraklar parametre gelecekte kullanılmak üzere ayrılmıştır ve her zaman sıfır olmalıdır.

OP * parse_stmtseq(U32 bayrakları)

ayrıştırma_termexpr
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Bir Perl terim ifadesini ayrıştırın. Bu, aşağıdakilere kadar öncelik operatörlerini içerebilir:
atama operatörleri İfade takip edilmelidir (ve dolayısıyla sonlandırılmalıdır)
ya bir virgül ya da daha düşük öncelikli işleç ya da normalde
noktalı virgül gibi bir ifadeyi sonlandırın. Eğer bayraklar "PARSE_OPTIONAL" içerir
o zaman ifade isteğe bağlıdır, aksi takdirde zorunludur. o kadar
dinamik ayrıştırıcı durumunun ("PL_parser" ve diğerleri) doğru olduğundan emin olmak için arayan
ayrıştırılacak kodun kaynağını ve sözcük bağlamını yansıtacak şekilde ayarlanır.
ifadesi.

İfadeyi temsil eden op ağacı döndürülür. İsteğe bağlı bir ifade ise
yoksa, bir boş gösterici döndürülür, aksi takdirde işaretçi boş olmaz.

Ayrıştırma veya derlemede bir hata oluşursa, çoğu durumda geçerli bir işlem ağacı
neyse döndü. Hata, ayrıştırıcı durumuna yansıtılır ve normalde
tüm derlemeyi kapsayan en üst ayrıştırma düzeyinde tek bir istisnada
meydana gelen hatalar. Ancak bazı derleme hataları bir istisna atar
hemen.

OP * parse_termexpr(U32 bayrakları)

PL_ayrıştırıcı
Şu anda ayrıştırma işleminin durumunu kapsayan bir yapıya işaretçi
devam etmekte. İşaretçi, iç içe geçmiş bir ayrıştırma gerçekleştirmek için yerel olarak değiştirilebilir.
bir dış ayrıştırmanın durumuna müdahale ediyor. "PL_parser"ın bireysel üyeleri
kendi belgeleri var.

PL_parser->tampon
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Şu anda lexed metin parçasının sonuna doğrudan işaretçi, sonuna
lexer arabelleği. Bu, "SvPVX(PL_parser->linestr) +'ya eşittir
SvCUR(PL_parser->linestr)". Bir "NUL" karakteri (sıfır sekizli) her zaman şurada bulunur:
arabelleğin sonu ve arabellek içeriğinin bir parçası olarak sayılmaz.

PL_parser->bufptr
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Lexer arabelleği içindeki geçerli sözcük konumunu gösterir. karakterler
bu noktanın etrafında, tarafından sınırlandırılan aralık içinde serbestçe incelenebilir.
"SvPVX("PL_parser->linestr")" ve "PL_parser->bufend". tamponun sekizlileri
tarafından belirtildiği gibi, UTF-8 veya Latin-1 olarak yorumlanması amaçlanabilir.
"lex_bufutf8".

Lexing kodu (Perl çekirdeğinde olsun ya da olmasın) bu işaretçiyi
tükettiği karakterlerdir. Ayrıca bazı muhasebe işlemleri yapması bekleniyor.
ne zaman bir yeni satır karakteri tüketilirse. Bu hareket daha rahat olabilir
yeni satırları uygun şekilde işleyen "lex_read_to" işlevi tarafından gerçekleştirilir.

Tamponun sekizlilerinin yorumlanması, hafifçe kullanılarak soyutlanabilir.
üst düzey işlevler "lex_peek_unichar" ve "lex_read_unichar".

PL_parser->linestart
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Lexer arabelleği içindeki geçerli satırın başlangıcına işaret eder. Bu kullanışlı
hangi sütunda bir hata oluştuğunu belirtmek için, başka bir şey değil. Bu olmalı
yeni satır tüketen herhangi bir sözcük kodu tarafından güncellenir; "lex_read_to" işlevi
bu ayrıntıyı ele alır.

PL_parser->linestr
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Şu anda metnin değerlendirildiği öbeği içeren skaler tampon
şu anda lexed ediliyor. Bu her zaman bir düz dize skaleridir ("SvPOK"
doğru). Normal skaler yöntemlerle skaler olarak kullanılması amaçlanmamıştır; Bunun yerine
arabelleğe doğrudan aşağıda açıklanan işaretçi değişkenleriyle bakın.

Sözlük, "PL_parser->linestr" içindeki şeylere çeşitli "char*" işaretçileri tutar
tampon. "PL_parser->linestr" yeniden tahsis edilirse, bu işaretçilerin tümü
güncellenecek. Bunu manuel olarak yapmaya çalışmayın, bunun yerine "lex_grow_linestr" kullanın.
arabelleği yeniden tahsis etmeniz gerekiyorsa.

Tampondaki metin öbeğinin içeriği genellikle tam olarak bir tam satırdır.
giriş, yeni satır sonlandırıcıya kadar ve dahil, ancak bazı durumlarda
başka türlü. Tamponun sekizlilerinin şu şekilde yorumlanması amaçlanabilir:
UTF-8 veya Latin-1. "lex_bufutf8" işlevi size hangisi olduğunu söyler. Kullanmayın
bu skaler üzerindeki "SvUTF8" bayrağı, onunla aynı fikirde olmayabilir.

Tamponun doğrudan incelenmesi için, "PL_parser->bufend" değişkeni şunu gösterir:
tamponun sonu. Mevcut lexing pozisyonu ile işaret edilir
"PL_parser->bufptr". Bu işaretçilerin doğrudan kullanımı genellikle
skalerin normal skaler yöntemlerle incelenmesi.

Yerel ayar ile ilgili fonksiyonlar ve makrolar


DECLARATION_FOR_LC_NUMERIC_MANIPULATION
Bu makro bir ifade olarak kullanılmalıdır. Özel bir değişken bildirir (ki
ad bir alt çizgi ile başlar), bu da diğer makrolar tarafından ihtiyaç duyulan
Bölüm. Bunu doğru bir şekilde dahil etmemek, bir sözdizimi hatasına yol açmalıdır. İçin
C89 C derleyicileriyle uyumluluk, herhangi bir işlemden önce bir bloğa yerleştirilmelidir.
yürütülebilir ifadeler

geçersiz DECLARATION_FOR_LC_NUMERIC_MANIPULATION

RESTORE_LC_NUMERIC
Bu, makrolardan biriyle birlikte kullanılır.
"STORE_LC_NUMERIC_SET_TO_NEEDED" ve "STORE_LC_NUMERIC_FORCE_TO_UNDERLYING"

"LC_NUMERIC" durumunu düzgün bir şekilde geri yüklemek için.

Beyan etmek için "DECLARATION_FOR_LC_NUMERIC_MANIPULATION" çağrısı yapılmış olmalıdır.
derleme zamanında bu makro ve iki "MAĞAZA" tarafından kullanılan özel bir değişken.
Bu makro, bir ifade olarak değil, tek bir ifade olarak çağrılmalıdır.
boş argüman listesi, şöyle:

{
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
Kendi ID’n ile mağazalarını oluştur
RESTORE_LC_NUMERIC();
Kendi ID’n ile mağazalarını oluştur
}

geçersiz RESTORE_LC_NUMERIC()

MAĞAZA_LC_NUMERIC_FORCE_TO_UNDERLYING
Bu, yerel ayarı zorlamak için "LC_NUMERIC" yerel ayar farkında olan XS kodu tarafından kullanılır
"LC_NUMERIC" kategorisi için Perl'in düşündüğü geçerli temel yerel ayardır.
(Perl yorumlayıcısı, altta yatan yerel ayarın gerçekte ne olduğu konusunda yanlış olabilir.
bazı C veya XS kodları C kitaplığı işlevini çağırdıysa yerel ayar(3) onun arkasında
geri; bu makroyu çağırmadan önce "sync_locale" çağırmak, Perl'in kayıtlarını güncelleyecektir.)

Beyan etmek için "DECLARATION_FOR_LC_NUMERIC_MANIPULATION" çağrısı yapılmış olmalıdır.
derleme zamanında bu makro tarafından kullanılan özel bir değişken. Bu makro olmalı
bir ifade değil, tek bir ifade olarak adlandırılır, ancak boş bir argüman listesiyle,
bunun gibi:

{
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
Kendi ID’n ile mağazalarını oluştur
STORE_LC_NUMERIC_FORCE_TO_UNDERLYING();
Kendi ID’n ile mağazalarını oluştur
RESTORE_LC_NUMERIC();
Kendi ID’n ile mağazalarını oluştur
}

Özel değişken, geçerli yerel ayar durumunu kaydetmek için kullanılır, böylece
"RESTORE_LC_NUMERIC" için gerekli eşleştirme çağrısı onu geri yükleyebilir.

geçersiz STORE_LC_NUMERIC_FORCE_TO_UNDERLYING()

MAĞAZA_LC_NUMERIC_SET_TO_NEEDED
Bu, "LC_NUMERIC" yerel ayar farkında olan XS veya C kodunu sarmaya yardımcı olmak için kullanılır.
Bu yerel ayar kategorisi genellikle geriye dönük olarak Perl tarafından C yerel ayarına ayarlanır.
uyumluluk ve kayan nokta değerlerini okuyan çoğu XS kodunun başa çıkabilmesi nedeniyle
yalnızca ondalık sayı tabanı karakterinin bir nokta olmasıyla.

Bu makro, farkında olmak için mevcut "LC_NUMERIC" durumunun doğru şekilde ayarlandığından emin olur.
Perl programından XS veya C koduna yapılan çağrı,
bir "yerel ayarı kullan" kapsamı; veya arama dışarıdan geliyorsa yerel ayarı yok saymak için
böyle bir kapsam.

Bu makro, C veya XS kodunu sarmanın başlangıcıdır; sarma sonu tarafından yapılır
işlemden sonra "RESTORE_LC_NUMERIC" makrosunu çağırıyor. Aksi halde devlet
diğer XS kodunu olumsuz etkileyecek şekilde değiştirilebilir.

Beyan etmek için "DECLARATION_FOR_LC_NUMERIC_MANIPULATION" çağrısı yapılmış olmalıdır.
derleme zamanında bu makro tarafından kullanılan özel bir değişken. Bu makro olmalı
bir ifade değil, tek bir ifade olarak adlandırılır, ancak boş bir argüman listesiyle,
bunun gibi:

{
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
Kendi ID’n ile mağazalarını oluştur
STORE_LC_NUMERIC_SET_TO_NEEDED();
Kendi ID’n ile mağazalarını oluştur
RESTORE_LC_NUMERIC();
Kendi ID’n ile mağazalarını oluştur
}

geçersiz STORE_LC_NUMERIC_SET_TO_NEEDED()

senkronizasyon_locale
Programın yerel ayarının değiştirilmesinden XS kodu ile kaçınılmalıdır. Yine de, belirli
"Gtk" gibi XS'den çağrılan Perl olmayan kitaplıklar bunu yapar. Bu olduğunda, Perl
yerel ayarın değiştiği söylenmelidir. önce bunu yapmak için bu işlevi kullanın.
Perl'e geri dönüyor.

geçersiz sync_locale()

Büyülü fonksiyonlar


mg_clear
SV'nin temsil ettiği büyülü bir şeyi temizleyin. Bkz. "sv_magic".

int mg_clear(SV* sv)

mg_copy Büyüyü bir SV'den diğerine kopyalar. Bkz. "sv_magic".

int mg_copy(SV *sv, SV *nsv, const char *anahtar,
I32 klen)

mg_find SV ile eşleşen tür için sihirli işaretçiyi bulur. Bkz. "sv_magic".

MAGIC* mg_find(const SV* sv, int türü)

mg_findext
"SV" için verilen "vtbl" ile "type" sihirli işaretçisini bulur. Görmek
"sv_magicext".

MAGIC* mg_findex(const SV* sv, int türü,
sabit MGVTBL *vtbl)

mg_free SV tarafından kullanılan herhangi bir sihirli depolama alanını boşaltın. Bkz. "sv_magic".

int mg_free(SV* sv)

mg_free_type
Herhangi bir büyü türünü kaldırın Nasıl SV'den sv. Bkz. "sv_magic".

void mg_free_type(SV *sv, int nasıl)

mg_get SV'den bir değer alınmadan önce sihir yapın. SV türü >= olmalıdır
SVt_PVMG. Bkz. "sv_magic".

int mg_get(SV* sv)

mg_uzunluk
KULLANIMDAN KALDIRILDI! Bu işlevin Perl'in gelecekteki bir sürümünden kaldırılması planlanmaktadır.
Yeni kod için kullanmayın; mevcut koddan kaldırın.

SV'nin uzunluğunu bayt cinsinden raporlar, varsa uzunluk büyüsünü çağırır, ancak
sv'de UTF8 bayrağını ayarlamayın. Eğer yoksa 'al' sihrine geri dönecek
'uzunluk' büyüsü, ancak 'al' büyüsü olarak adlandırılıp adlandırılmadığına dair hiçbir belirti yok. Bilişim Teknoloji
sv'nin bir PVMG veya üstü olduğunu varsayar. Kullanmak sv_len() yerine.

U32 mg_uzunluk(SV* sv)

mg_büyülü
Bir SV'nin büyülü durumunu açar. Bkz. "sv_magic".

geçersiz mg_magical(SV* sv)

mg_set SV'ye bir değer atandıktan sonra sihir yapın. Bkz. "sv_magic".

int mg_set(SV* sv)

SvGETMAGIC
Bir SV'de "get" büyüsü varsa "mg_get" öğesini çağırır. Örneğin, bu arayacak
Bağlı bir değişkende "FETCH". Bu makro, argümanını bir kereden fazla değerlendirir.

geçersiz SvGETMAGIC(SV* sv)

SvLOCK Uygun bir modül varsa, sv'de elde edilecek karşılıklı bir dışlama kilidini düzenler.
yüklendi.

geçersiz SvLOCK(SV* sv)

SvSETMAGIC
'Ayarlama' büyüsü varsa, bir SV'de "mg_set" öğesini çağırır. Bu gerekli sonra
$| gibi sihirli bir değişken olması durumunda bir skaleri değiştirmek veya bağlı bir değişken
("MAĞAZA" olarak adlandırılır). Bu makro, argümanını bir kereden fazla değerlendirir.

geçersiz SvSETMAGIC(SV* sv)

SvSetMagicSV
"SvSetSV" gibi, ancak daha sonra gerekli olan herhangi bir set sihri yapar.

geçersiz SvSetMagicSV(SV* dsv, SV* ssv)

SvSetMagicSV_nsteal
"SvSetSV_nosteal" gibi, ancak daha sonra gerekli olan herhangi bir set sihri yapar.

geçersiz SvSetMagicSV_nosteal(SV* dsv, SV* ssv)

SvSetSV dsv, ssv ile aynı değilse "sv_setsv"yi çağırır. Argümanları şundan daha fazla değerlendirebilir:
bir Zamanlar. Hedef SV'de 'set' büyüsünü işlemez.

geçersiz SvSetSV(SV* dsv, SV* ssv)

SvSetSV_nosteal
dsv, ssv ile aynı değilse, "sv_setsv"nin yıkıcı olmayan bir sürümünü çağırır. Mayıs
argümanları bir kereden fazla değerlendirin.

geçersiz SvSetSV_nosteal(SV* dsv, SV* ssv)

SvSHARE Uygun bir modül yüklenmişse, sv'nin iş parçacıkları arasında paylaşılmasını düzenler.

geçersiz SvSHARE(SV* sv)

SvUNLOCK
Uygun bir modül yüklenmişse, sv'de karşılıklı bir dışlama kilidi açar.

geçersiz SvUNLOCK(SV* sv)

Bellek Yönetim


XSUB yazıcısının arabirimini C "memcpy" işlevine kopyalayın. "src" kaynaktır,
"hedef" hedeftir, "nitemler" öğe sayısıdır ve "tür" ise
tip. Çakışan kopyalarda başarısız olabilir. Ayrıca bkz. "Taşı".

void Copy(void* src, void* hedef, int nitems, tür)

CopyD "Kopyala" gibi ama hedef döndürür. Derleyicileri kuyruk çağrısı yapmaya teşvik etmek için kullanışlıdır
optimize et.

void * CopyD(void* src, void* hedef, int nitems, tür)

XSUB yazıcısının arabirimini C "memmove" işlevine taşıyın. "src" kaynaktır,
"hedef" hedeftir, "nitemler" öğe sayısıdır ve "tür" ise
tip. Üst üste binen hareketler yapabilir. Ayrıca bkz. "Kopyala".

void Move(void* src, void* hedef, int nitems, tür)

MoveD "Taşı" gibi ama hedef döndürür. Derleyicileri kuyruk çağrısı yapmaya teşvik etmek için kullanışlıdır
optimize et.

void * MoveD(void* src, void* hedef, int nitems, tür)

Newx XSUB yazıcısının C "malloc" işlevine arabirimi.

Bununla elde edilen bellek BİR TEK "Safefree" ile özgürleşin.

5.9.3 olarak, Yenix() ve arkadaşlar yaşlıların yerini alır Yeni() API ve ilkini düşürür
parametre, x, arayanların kendilerini tanımlamasına izin veren bir hata ayıklama yardımı. Bu yardım
yerini yeni bir derleme seçeneği olan PERL_MEM_LOG almıştır (bkz. "PERL_MEM_LOG"
perlhack ipuçları). Eski API, destekleyen XS modüllerinde kullanım için hala oradadır.
eski perller.

void Newx(void* ptr, int nitems, type)

Newxc XSUB-yazarının C "malloc" işlevine yönelik arabirimi, cast ile. Ayrıca bakınız
"Newks".

Bununla elde edilen bellek BİR TEK "Safefree" ile özgürleşin.

geçersiz Newxc(void* ptr, int nitems, type, cast)

Newxz XSUB-yazarının C "malloc" işlevine arabirimi. Ayrılan bellek
"memzero" ile sıfırlanmıştır. Ayrıca bkz. "Newx".

Bununla elde edilen bellek BİR TEK "Safefree" ile özgürleşin.

geçersiz Newxz(void* puan, int öğeler, tür)

Zehir ZehirIle(0xEF) boş belleğe erişimi yakalamak için.

void Poison(void* hedef, int nitems, type)

Zehirsiz
ZehirIle(0xEF) boş belleğe erişimi yakalamak için.

void PoisonFree(void* hedef, int nitems, type)

zehirYeni
ZehirIle(0xAB) ayrılmış ancak başlatılmamış belleğe erişimi yakalamak için.

void PoisonNew(void* hedef, int nitems, type)

ZehirIle
Belleği bir bayt deseni (tekrar tekrarlanan bir bayt) ile doldurun.
umarım başlatılmamış belleğe erişme girişimlerini yakalar.

void PoisonWith(void* hedef, int nitems, type,
U8 bayt)

XSUB yazıcısının C "realloc" işlevine yönelik arabirimini yenileyin.

Bununla elde edilen bellek BİR TEK "Safefree" ile özgürleşin.

void Renew(void* ptr, int nitems, type)

Renewc XSUB-yazarının C "realloc" işlevine yönelik arabirimi, cast ile.

Bununla elde edilen bellek BİR TEK "Safefree" ile özgürleşin.

void Renewc(void* ptr, int nitems, type, cast)

güvenli ücretsiz
XSUB-yazarının C "ücretsiz" işlevine arabirimi.

Bu gerekir BİR TEK "Newx" ve arkadaşları kullanılarak elde edilen bellekte kullanılabilir.

Void Safefree(void* ptr)

savepv Perl'in "strdup()" versiyonu. Yeni tahsis edilen bir dizgeye bir işaretçi döndürür.
"pv"nin bir kopyasıdır. Dizenin boyutu "strlen()" tarafından belirlenir;
gömülü "NUL" karakterleri içermeyebileceği ve sonunda "NUL" olması gerektiği anlamına gelir.
Yeni dize için ayrılan bellek, "Safefree()" ile serbest bırakılabilir.
fonksiyonu.

Bazı platformlarda, örneğin Windows, bir iş parçacığının sahip olduğu tüm ayrılmış bellek,
bu iş parçacığı sona erdiğinde serbest bırakılır. Yani bunun olmaması gerekiyorsa, yapmanız gerekir
"savesharedpv" gibi paylaşılan hafıza işlevlerini kullanın.

karakter* savepv(const karakter* pv)

savepvn Perl'in "strndup()" varsa ne olacağına dair sürümü. Bir işaretçiye bir işaretçi döndürür
"pv"den gelen ilk "len" baytın bir kopyası olan yeni tahsis edilmiş dize,
artı bir "NUL" baytı. Yeni dize için ayrılan bellek serbest bırakılabilir
"Safefree()" işleviyle.

Bazı platformlarda, örneğin Windows, bir iş parçacığının sahip olduğu tüm ayrılmış bellek,
bu iş parçacığı sona erdiğinde serbest bırakılır. Yani bunun olmaması gerekiyorsa, yapmanız gerekir
"savesharedpvn" gibi paylaşılan hafıza işlevlerini kullanın.

char* savepvn(const char* pv, I32 len)

savepvs "savepvn" gibi, ancak "NUL" ile sonlandırılmış bir dize alır.
dizi/uzunluk çifti.

char* savepvs(const char* s)

savesharedpv
Yinelenen dizeyi bellekte tahsis eden bir "savepv()" sürümü
Konular arasında paylaşıldı.

char* savesharedpv(const char*pv)

savesharedpvn
Yinelenen dizeyi bellekte tahsis eden bir "savepvn()" sürümü
Konular arasında paylaşıldı. (NULL işaretçisinin olmadığı belirli bir farkla
kabul edilebilir)

char* savesharedpvn(const char *const pv,
sabit STRLEN len)

savesharedpvs
Yinelenen dizeyi bellekte tahsis eden bir "savepvs()" sürümü
Konular arasında paylaşıldı.

char* savesharedpvs(const char* s)

savesharedsvpv
Yinelenen dizeyi bellekte tahsis eden bir "savesharedpv()" sürümü
Konular arasında paylaşılır.

karakter* savesharedsvpv(SV *sv)

tasarrufvpv
Dizenin kopyalanmasını sağlayan "savepv()"/"savepvn()" sürümü
"SvPV()" kullanılarak SV'de geçirildi

Bazı platformlarda, örneğin Windows, bir iş parçacığının sahip olduğu tüm ayrılmış bellek,
bu iş parçacığı sona erdiğinde serbest bırakılır. Yani bunun olmaması gerekiyorsa, yapmanız gerekir
"savesharedsvpv" gibi paylaşılan hafıza işlevlerini kullanın.

karakter* kaydedervpv(SV* sv)

YapıKopyası
Bu, bir yapıyı diğerine kopyalamak için mimariden bağımsız bir makrodur.

void StructCopy(type *src, type *hedef, type)

Zero C "memzero" işlevine XSUB yazıcı arabirimi. "hedef"
hedef, "nitemler" öğe sayısıdır ve "tür" türdür.

void Zero(void* hedef, int nitems, type)

ZeroD "Sıfır" gibi ama hedef döndürür. Derleyicileri kuyruk çağrısı yapmaya teşvik etmek için kullanışlıdır
optimize et.

void * ZeroD(void* hedef, int nitems, tür)

Diğer fonksiyonlar


dump_c_backtrace
C geri izini verilen fp'ye atar.

Geri izleme alınabiliyorsa true, değilse false döndürür.

bool dump_c_backtrace(PerlIO* fp, int maksimum_derinlik,
int atlama)

fbm_derleme
Kullanarak üzerinde hızlı arama yapmak için dizeyi analiz eder. fbm_instr() --
Boyer-Moore algoritması.

void fbm_compile(SV* sv, U32 bayrakları)

fbm_instr
"big" ve "bigend" ile sınırlandırılmış dizedeki SV'nin konumunu döndürür. Bilişim Teknoloji
dize bulunamazsa "NULL" döndürür. "sv" olmak zorunda değil
fbm_compiled, ancak arama o zaman o kadar hızlı olmayacak.

char* fbm_instr(imzasız karakter* büyük,
imzasız char* bigend, SV* littlestr,
U32 bayrakları)

foldEQ s1 ve s2 dizelerinin başındaki len baytları aynı durumdaysa true değerini döndürür.
duyarsızca; aksi halde yanlış. Büyük harf ve küçük harf ASCII aralığı bayt eşleşmesi
kendileri ve karşıt durumdaki meslektaşları. Muhafazasız ve ASCII olmayan aralık
baytlar yalnızca kendileri ile eşleşir.

I32 katEQ(sabit char* a, const char* b, I32 len)

FoldEQ_locale
s1 ve s2 dizelerinin baştaki len baytları aynı durumdaysa true döndürür.
geçerli yerel ayarda duyarsızca; aksi halde yanlış.

I32 FoldEQ_locale(const karakter* a, const karakter* b,
I32 uzunluk)

form Sprintf tarzı bir format kalıbı ve geleneksel (SV olmayan) argümanlar alır ve
biçimlendirilmiş dizeyi döndürür.

(char *) Perl_form(pTHX_ const karakter* pat, ...)

bir dizgenin (char *) gerekli olduğu herhangi bir yerde kullanılabilir:

char * s = Perl_form("%d.%d",büyük,küçük);

Tek bir özel arabellek kullanır, bu nedenle birden çok dizeyi biçimlendirmek istiyorsanız
önceki dizeleri açıkça kopyalayın (ve işiniz bittiğinde kopyaları serbest bırakın).

char* formu(const char* pat, ...)

getcwd_sv
sv'yi mevcut çalışma dizini ile doldurun

int getcwd_sv(SV*sv)

get_c_backtrace_dump
Bir SV'ye |derinlik| dökümü döndürür arama yığınının çerçeveleri, |atla|
en içtekiler. 20 derinlik genellikle yeterlidir.

Eklenen çıktı şöyle görünür:

... 1 10e004812:0082 Perl_croak util.c:1716 /usr/bin/Perl 2
10df8d6d2:1d72 perl_parse perl.c:3975 /usr/bin/Perl Kendi ID’n ile mağazalarını oluştur

Alanlar sekmeyle ayrılmıştır. İlk sütun derinliktir (sıfır
en içteki atlanmayan çerçeve). Hex:offset'te, hex, programın
sayaç S_parse_body içindeydi ve :offset (eksik olabilir) ne kadar olduğunu söyler
S_parse_body içinde program sayacı vardı.

util.c:1716, kaynak kod dosyası ve satır numarasıdır.

The /usr/bin/Perl açıktır (umarım).

Bilinmeyenler "-"dir. Bilinmeyenler ne yazık ki oldukça kolay olabilir: eğer platform
bilgilerin alınmasını desteklemiyor; ikili dosyada hata ayıklama eksikse
bilgi; optimize edici, örneğin satır içi yaparak kodu dönüştürdüyse.

SV* get_c_backtrace_dump(int maksimum_derinlik, int atlama)

ibcmp Bu, (! katEQ())

I32 ibcmp(sabit char* a, const char* b, I32 len)

ibcmp_locale
Bu, (! FoldEQ_locale())

I32 ibcmp_locale(const karakter* a, const karakter* b,
I32 uzunluk)

is_safe_syscall
Verilen "pv"nin herhangi bir dahili "NUL" karakteri içermediğini test edin. Eğer o
yapmazsa, "errno"yu ENOENT olarak ayarlayın, isteğe bağlı olarak uyarır ve FALSE döndürür.

Ad güvenliyse DOĞRU döndürün.

Tarafından kullanılan IS_SAFE_SYSCALL() makro.

bool is_safe_syscall(const char *pv, STRLEN len,
const char *ne,
const karakter *op_name)

memEQ İki arabelleği test edin (bunlar gömülü "NUL" karakterleri içerebilir,
eşit. "len" parametresi karşılaştırılacak bayt sayısını belirtir. İadeler
eşitse sıfır, eşit değilse sıfır değil.

bool memEQ(char* s1, karakter* s2, STRLEN len)

memNE İki arabelleği test edin (bunlar gömülü "NUL" karakterleri içerebilir,
eşit değildir. "len" parametresi karşılaştırılacak bayt sayısını belirtir. İadeler
eşit değilse sıfır, eşitse sıfır değil.

bool memNE(char* s1, karakter* s2, STRLEN len)

karışıklık Bir sprintf tarzı biçim kalıbı ve argüman listesi alın. Bunlar oluşturmak için kullanılır
bir dize mesajı. Mesaj yeni bir satırla bitmiyorsa, o zaman
açıklandığı gibi, koddaki mevcut konumun bir göstergesiyle genişletildi
"mess_sv" için.

Normalde, ortaya çıkan mesaj yeni bir ölümlü SV'de döndürülür. küresel sırasında
yok etme, bu işlevin kullanımları arasında tek bir SV paylaşılabilir.

SV * karışıklık(const char *pat, ...)

mess_sv Kullanıcıya yönelik bir mesajı, mevcut durumun bir göstergesini içerecek şekilde genişletir.
mesaj zaten tamamlanmış görünmüyorsa, koddaki konumu.

"basemsg" ilk mesaj veya nesnedir. Referans ise kullanılacaktır.
olduğu gibi ve bu işlevin sonucu olacaktır. Aksi takdirde bir dize olarak kullanılır,
ve zaten yeni bir satırla bitiyorsa, tamamlanmış kabul edilir ve sonuç
bu işlevin aynı dize olacaktır. Mesaj bir ile bitmiyorsa
newline, ardından "at foo.pl line 37" gibi bir segment eklenecek ve muhtemelen
mevcut yürütme durumunu gösteren diğer maddeler. Sonuç mesajı
nokta ve yeni satır ile bitecektir.

Normalde, ortaya çıkan mesaj yeni bir ölümlü SV'de döndürülür. küresel sırasında
yok etme, bu işlevin kullanımları arasında tek bir SV paylaşılabilir. "tüketmek" ise
doğruysa, işlevin değiştirmesine ve geri dönmesine izin verilir (ancak gerekli değildir)
Yeni bir SV tahsis etmek yerine "basemsg".

SV * mess_sv(SV *basemsg, bool tüketmek)

my_snprintf
Varsa ve standartlara uygunsa C kitaplığı "snprintf" işlevi (kullanımlar
"vsnprintf", aslında). Ancak, "vsnprintf" mevcut değilse,
maalesef arabelleği aşabilecek güvenli olmayan "vsprintf" kullanın (bir
taşma kontrolü, ancak bu çok geç olabilir). Bunun yerine "sv_vcatpvf" kullanmayı düşünün veya
"vsnprintf" alınıyor.

int my_snprintf(char *tampon, const Size_t len,
const char *formatı, ...)

my_sprintf
C kitaplığı "sprintf", gerekirse geri döneceğinden emin olmak için sarılır.
arabelleğe yazılan dizenin uzunluğu. Yalnızca nadir ANSI öncesi sistemler,
sarmalayıcı işlevi - genellikle bu doğrudan "sprintf" çağrısıdır.

int my_sprintf(char *tampon, const karakter *pat, ...)

my_strlcat
Varsa C kitaplığı "strlcat" veya bunun bir Perl uygulaması. Bu
C "NUL" ile sonlandırılan dizelerde çalışır.

"my_strlcat()", "src" dizesini "dst"nin sonuna ekler. En fazla eklenir
"size - strlen(dst) - 1" karakter. "Boyut" olmadıkça "NUL" -sona erer
0 veya orijinal "dst" dizesi "boyut"tan daha uzundu (pratikte bu
"boyut"un yanlış olduğu veya "dst"nin bir
uygun "NUL" ile sonlandırılmış dize).

"Boyut" un hedef arabelleğin tam boyutu olduğunu ve sonucun
yer varsa "NUL" olarak sonlandırılır. "NUL" için o odaya dikkat edin
"boyut"a dahil edilmelidir.

Size_t my_strlcat(char *dst, const char *src,
Size_t boyutu)

my_strlcpy
Varsa C kitaplığı "strlcpy" veya bunun bir Perl uygulaması. Bu
C "NUL" ile sonlandırılan dizelerde çalışır.

"my_strlcpy()", "src" dizesinden "dst"ye "size - 1" karaktere kadar kopyalar,
"NUL" - "boyut" 0 değilse sonucu sonlandırma.

Size_t my_strlcpy(char *dst, const char *kaynak,
Size_t boyutu)

my_vsnprintf
Varsa ve standartlara uygunsa C kitaplığı "vsnprintf". Ancak, eğer
"vsnprintf" mevcut değil, maalesef güvenli olmayan "vsprintf" kullanacak
arabelleği taşabilir (bir taşma kontrolü vardır, ancak bu çok fazla olabilir
geç). Bunun yerine "sv_vcatpvf" kullanmayı veya "vsnprintf" almayı düşünün.

int my_vsnprintf(char *tampon, const Size_t len,
const char *formatı, va_list ap)

PERL_SYS_INIT
Çalıştırmak için gerekli C çalışma zamanı ortamının sisteme özel ayarlanmasını sağlar
Perl tercümanları. Bu, herhangi bir Perl oluşturmadan önce yalnızca bir kez çağrılmalıdır.
tercümanlar.

geçersiz PERL_SYS_INIT(int *argc, char*** argv)

PERL_SYS_INIT3
Çalıştırmak için gerekli C çalışma zamanı ortamının sisteme özel ayarlanmasını sağlar
Perl tercümanları. Bu, herhangi bir Perl oluşturmadan önce yalnızca bir kez çağrılmalıdır.
tercümanlar.

geçersiz PERL_SYS_INIT3(int *argc, char*** argv,
karakter*** ortam)

PERL_SYS_TERM
Perl'i çalıştırdıktan sonra C çalışma zamanı ortamının sisteme özel olarak temizlenmesini sağlar
tercümanlar. Bu, kalan Perl'i serbest bıraktıktan sonra yalnızca bir kez çağrılmalıdır.
tercümanlar.

geçersiz PERL_SYS_TERM()

quadmath_format_needed
quadmath_format_needed() biçim dizesi şurada görünüyorsa true değerini döndürür.
en az bir Q ön eki olmayan %[efgaEFGA] biçim belirteci veya aksi takdirde false döndürür.

Biçim belirteci algılaması, tam printf sözdizimi algılaması değildir, ancak
en yaygın vakaları yakalamalıdır.

true döndürülürse, bu argümanlar meli teorik olarak işlenecek
quadmath_snprintf(), ancak bu tür birden fazla biçim belirteci olması durumunda (bkz.
"quadmath_format_single") ve bunun ötesinde başka bir şey varsa (hatta
sadece tek bir bayt), onlar Amerika’ya vize ile ya da Meksika üzerinden geldikten sonra ilticaya başvuran kişileri, herhangi bir suça karışmadıkları sürece mahkeme kararı olmadan sınır dışı (deport) ettiremez. işlenecek çünkü quadmath_snprintf() olan çok
katı, yalnızca bir biçim belirtimini kabul eder ve başka hiçbir şeyi kabul etmez. Bu durumda, kod
muhtemelen başarısız olmalı.

bool quadmath_format_needed(const char* formatı)

quadmath_format_single
quadmath_snprintf() biçim dizesi konusunda çok katıdır ve başarısız olur,
biçim geçersizse -1 döndürülür. Tam olarak bir format spesifikasyonunu kabul eder.

quadmath_format_single() amaçlanan tek özelliğin aklı başında görünüp görünmediğini kontrol eder: başlar
"%" ile, yalnızca bir "%" içerir, "[efgaEFGA]" ile biter ve önünde "Q" vardır. Bu
tam bir "printf sözdizimi denetimi" değildir, yalnızca temel bilgilerdir.

Geçerliyse biçimi, değilse NULL döndürür.

quadmath_format_single() eksik "Q" eklenebilir ve eklenecektir, eğer
gerekli. Bu durumda, biçimin değiştirilmiş kopyasını döndürür, hangi the
arayan irade gerek için ücretsiz.

Ayrıca bkz. "quadmath_format_needed".

const karakter* quadmath_format_single(const karakter* biçimi)

READ_XDIGIT
Bir ASCII aralığı onaltılı basamağının değerini döndürür ve dize işaretçisini ilerletir.
Davranış yalnızca isXDIGIT(*str) doğru olduğunda iyi tanımlanır.

U8 READ_XDIGIT(karakter dizisi*)

strEQ Eşit olup olmadıklarını görmek için iki diziyi test edin. Doğru veya yanlış döndürür.

bool strEQ(karakter* s1, karakter* s2)

strGE İlk "s1"in şundan büyük veya ona eşit olup olmadığını görmek için iki diziyi test edin.
ikincisi, "s2". Doğru veya yanlış döndürür.

bool strGE(karakter* s1, karakter* s2)

strGT İlk "s1"in ikinci "s2"den büyük olup olmadığını görmek için iki diziyi test edin.
Doğru veya yanlış döndürür.

bool strGT(karakter* s1, karakter* s2)

strLE İlk "s1"in ikinciden küçük veya ona eşit olup olmadığını görmek için iki diziyi test edin,
"s2". Doğru veya yanlış döndürür.

bool strLE(char* s1, karakter* s2)

strLT İlk "s1"in ikinci "s2"den küçük olup olmadığını görmek için iki diziyi test edin.
Doğru veya yanlış döndürür.

bool strLT(char* s1, karakter* s2)

strNE Farklı olup olmadıklarını görmek için iki diziyi test edin. Doğru veya yanlış döndürür.

bool strNE(char* s1, karakter* s2)

strnEQ Eşit olup olmadıklarını görmek için iki diziyi test edin. "len" parametresi,
karşılaştırılacak bayt sayısı. Doğru veya yanlış döndürür. ("strncmp" için bir sarmalayıcı).

bool strnEQ(char* s1, karakter* s2, STRLEN len)

strnNE Farklı olup olmadıklarını görmek için iki diziyi test edin. "len" parametresi,
karşılaştırılacak bayt sayısı. Doğru veya yanlış döndürür. ("strncmp" için bir sarmalayıcı).

bool strnNE(char* s1, karakter* s2, STRLEN len)

sv_destroyable
Paylaşım olmadığında nesnenin yok edilebileceğini bildiren kukla rutin
modül mevcut. Tek SV argümanını yok sayar ve 'true' değerini döndürür. Şunun için var:
NULL işlev işaretçisi için test yapmaktan kaçının ve potansiyel olarak altında uyarabileceğinden
bir miktar katılık.

bool sv_destroyable(SV *sv)

sv_nosharing
Mevcut bir paylaşım modülü olmadığında bir SV'yi "paylaşan" kukla rutin. Veya
"kilitler". Veya "kilidini açar". Başka bir deyişle, tek SV argümanını yok sayar.
NULL işlev işaretçisinin test edilmesini önlemek için ve potansiyel olarak
bir miktar katılık altında uyarın.

geçersiz sv_nosharing(SV *sv)

vmess "pat" ve "args", sprintf tarzı bir biçim kalıbı ve kapsüllenmiş argümandır
liste. Bunlar bir dize mesajı oluşturmak için kullanılır. Mesaj bitmezse
yeni bir satırla, mevcut durumun bir göstergesiyle genişletilecektir.
"mess_sv" için açıklandığı gibi koddaki konum.

Normalde, ortaya çıkan mesaj yeni bir ölümlü SV'de döndürülür. küresel sırasında
yok etme, bu işlevin kullanımları arasında tek bir SV paylaşılabilir.

SV * vmess(const char *pat, va_list *args)

MRO fonksiyonlar


Bu işlevler, Perl sınıflarının yöntem çözümleme sırası ile ilgilidir.

mro_get_linear_isa
Verilen zula için mro doğrusallaştırmasını döndürür. Varsayılan olarak, bu olacak
için başka bir MRO geçerli olmadığı sürece "mro_get_linear_isa_dfs" ne döndürürse
zula. Dönüş değeri, salt okunur bir AV*'dir.

saklamayı planlıyorsanız, dönüş değerindeki "SvREFCNT_inc()"den siz sorumlusunuz.
herhangi bir yerde yarı kalıcı olarak (aksi takdirde altından silinebilir)
bir dahaki sefere önbellek geçersiz kılınır).

AV* mro_get_linear_isa(HV* saklama)

mro_method_changed_in
Verilen zulanın herhangi bir alt sınıfında yöntemi önbelleğe almayı geçersiz kılar, böylece bunlar
buradaki değişiklikleri fark edebilir.

İdeal olarak, dışındaki perl kaynağındaki tüm "PL_sub_generation++" örnekleri mro.c
buna yapılan çağrılarla değiştirilmelidir.

Perl, bir yöntemin yeniden tanımlanabileceği yaygın yolların çoğunu otomatik olarak işler.
Ancak, bir yöntemi saklamadan değiştirmenin birkaç yolu vardır.
önbellek kodu fark ediyor, bu durumda daha sonra bu yöntemi çağırmanız gerekir:

1) XS kodundan zula HV girişlerini doğrudan manipüle etmek.

2) Sırayla bir zula girişine salt okunur bir skaler sabite bir referans atama
sabit bir alt program oluşturmak için (sabit.pm'nin yaptığı gibi).

Bu aynı yöntem, saf Perl'den şu şekilde elde edilebilir:
"mro::method_changed_in(sınıf adı)".

void mro_method_changed_in(HV* zulası)

mro_register
Özel bir mro eklentisi kaydeder. Ayrıntılar için perlmroapi'ye bakın.

geçersiz mro_register(const struct mro_alg *mro)

çoklu arama fonksiyonlar


dÇOKLU
Çoklu arama için yerel değişkenler bildirin. Perlcall'da "HAFİF GERİ ARAMALAR"a bakın.

dÇOKLU;

ÇOKLU
Hafif bir geri arama yapın. Perlcall'da "HAFİF GERİ ARAMALAR"a bakın.

ÇOKLU;

POP_MULTICALL
Hafif bir geri arama için kapatma braketi. "HAFİF GERİ ARAMALAR" bölümüne bakın.
perlcall.

POP_MULTICALL;

PUSH_MULTICALL
Hafif bir geri arama için açma braketi. "HAFİF GERİ ARAMALAR" bölümüne bakın.
perlcall.

PUSH_MULTICALL;

Sayısal fonksiyonlar


grok_bin
ikili bir sayıyı temsil eden bir dizeyi sayısal forma dönüştürür.

girişte başlama ve * len taranacak dizeyi verin, *bayraklar dönüşüm bayrakları verir,
ve sonuç NULL veya bir NV'ye işaretçi olmalıdır. Tarama işlemin sonunda durur.
dize veya ilk geçersiz karakter. "PERL_SCAN_SILENT_ILLDIGIT" ayarlanmadıkça
in *bayraklar, geçersiz bir karakterle karşılaşmak da bir uyarıyı tetikleyecektir. Açık
dönüş * len taranan dizinin uzunluğuna ayarlanır ve *bayraklar çıktı verir
bayraklar.

Değer <= "UV_MAX" ise UV olarak döndürülür, çıktı bayrakları açıktır,
ve hiçbir şey yazılmamış *sonuç. Değer > UV_MAX ise "grok_bin" döndürür
UV_MAX, çıktı bayraklarında "PERL_SCAN_GREATER_THAN_UV_MAX" değerini ayarlar ve
değer *sonuç (veya değer atılırsa sonuç NULL'dur).

İkili sayının önüne isteğe bağlı olarak "0b" veya "b" eklenebilir.
"PERL_SCAN_DISALLOW_PREFIX" ayarlandı *bayraklar girişte. Eğer
"PERL_SCAN_ALLOW_UNDERSCORES" ayarlandı *bayraklar o zaman ikili sayı '_' kullanabilir
Rakamları ayırmak için karakterler.

UV grok_bin(const char* başlangıç, STRLEN* len_p,
I32* işaretleri, NV *sonuç)

grok_hex
onaltılık bir sayıyı temsil eden bir dizgiyi sayısal forma dönüştürür.

girişte başlama ve *len_p taranacak dizeyi verin, *bayraklar dönüşüm bayrakları verir,
ve sonuç NULL veya bir NV'ye işaretçi olmalıdır. Tarama işlemin sonunda durur.
dize veya ilk geçersiz karakter. "PERL_SCAN_SILENT_ILLDIGIT" ayarlanmadıkça
in *bayraklar, geçersiz bir karakterle karşılaşmak da bir uyarıyı tetikleyecektir. Açık
dönüş * len taranan dizinin uzunluğuna ayarlanır ve *bayraklar çıktı verir
bayraklar.

Değer <= UV_MAX ise UV olarak döndürülür, çıktı bayrakları açıktır ve
hiçbir şey yazılmamış *sonuç. Değer > UV_MAX ise "grok_hex" döndürür
UV_MAX, çıktı bayraklarında "PERL_SCAN_GREATER_THAN_UV_MAX" değerini ayarlar ve
değer *sonuç (veya değer atılırsa sonuç NULL'dur).

Onaltılı sayı, isteğe bağlı olarak "0x" veya "x" ile ön eklenebilir.
"PERL_SCAN_DISALLOW_PREFIX" ayarlandı *bayraklar girişte. Eğer
"PERL_SCAN_ALLOW_UNDERSCORES" ayarlandı *bayraklar o zaman onaltılık sayı '_' kullanabilir
Rakamları ayırmak için karakterler.

UV grok_hex(const char* başlangıç, STRLEN* len_p,
I32* işaretleri, NV *sonuç)

grok_infnan
için yardımcı grok_numarası(), "sonsuz" veya "bir değil" yazımının çeşitli yollarını kabul eder.
sayı" ve aşağıdaki bayrak kombinasyonlarından birini döndürür:

IS_NUMBER_INFINITE
IS_NUMBER_NAN
IS_NUMBER_INFINITE | IS_NUMBER_NEG
IS_NUMBER_NAN | IS_NUMBER_NEG
0

muhtemelen IS_NUMBER_TRAILING ile |-ed.

Bir sonsuz veya bir sayı olmayan tanınırsa, *sp bir baytı gösterir.
tanınan dizenin sonunu geçmiş. Tanıma başarısız olursa, sıfır
döndü ve *sp hareket etmeyecek.

int grok_infnan(const char** sp, const char *gönder)

grok_number
Aynı grok_number_flags() bayraklar sıfıra ayarlanmış.

int grok_number(const char *pv, STRLEN len,
UV *değerp)

grok_number_flags
Bir sayıyı tanır (veya tanımaz). Sayının türü döndürülürse (0 ise
tanınmadı), aksi takdirde IS_NUMBER_IN_UV'nin bit-OR'lu bir birleşimidir,
IS_NUMBER_GREATER_THAN_UV_MAX, IS_NUMBER_NOT_INT, IS_NUMBER_NEG,
IS_NUMBER_INFINITY, IS_NUMBER_NAN (perl.h'de tanımlanmıştır).

Sayının değeri bir UV'ye sığabiliyorsa, *valuep'de döndürülür.
IS_NUMBER_IN_UV, *valuep'nin geçerli olduğunu gösterecek şekilde ayarlanacaktır, IS_NUMBER_IN_UV
*valuep geçerli olmadığı sürece asla ayarlanmaz, ancak *valuep atanmış olabilir
IS_NUMBER_IN_UV dönüşte ayarlanmamasına rağmen işlem sırasında. değerp ise
NULL, IS_NUMBER_IN_UV, valuep'nin NULL olmadığı durumlarla aynı durumlar için ayarlanacaktır,
ancak hiçbir gerçek atama (veya SEGV) gerçekleşmeyecektir.

Sondaki ondalık sayılar görülüyorsa IS_NUMBER_NOT_INT, IS_NUMBER_IN_UV ile ayarlanır
(bu durumda *valuep, bir tamsayıya kesilen gerçek değeri verir) ve
Sayı negatifse IS_NUMBER_NEG (bu durumda *değerp mutlak değeri tutar
değer). IS_NUMBER_IN_UV, e notasyonu kullanıldıysa veya sayı daha büyükse ayarlanmaz
bir UV'den daha iyidir.

"bayraklar" yalnızca "PERL_SCAN_TRAILING"e izin verir, bu da sayısal olmayan sonlara izin verir
aksi takdirde başarılı bir metin grok, sonuçta "IS_NUMBER_TRAILING" ayarlanıyor.

int grok_number_flags(const char *pv, STRLEN len,
UV *valuep, U32 bayrakları)

grok_numeric_radix
Sayısal bir ondalık ayırıcı (radix) için tarayın ve atlayın.

bool grok_numeric_radix(const karakter **sp,
const karakter *gönder)

grok_oct
sekizli bir sayıyı temsil eden bir dizgiyi sayısal forma dönüştürür.

girişte başlama ve * len taranacak dizeyi verin, *bayraklar dönüşüm bayrakları verir,
ve sonuç NULL veya bir NV'ye işaretçi olmalıdır. Tarama işlemin sonunda durur.
dize veya ilk geçersiz karakter. "PERL_SCAN_SILENT_ILLDIGIT" ayarlanmadıkça
in *bayraklar, 8 veya 9 ile karşılaşmak da bir uyarıyı tetikleyecektir. dönüşte * len is
taranan dizinin uzunluğuna ayarlayın ve *bayraklar çıkış bayrakları verir.

Değer <= UV_MAX ise UV olarak döndürülür, çıktı bayrakları açıktır ve
hiçbir şey yazılmamış *sonuç. Değer > UV_MAX ise "grok_oct" döndürür
UV_MAX, çıktı bayraklarında "PERL_SCAN_GREATER_THAN_UV_MAX" değerini ayarlar ve
değer *sonuç (veya değer atılırsa sonuç NULL'dur).

"PERL_SCAN_ALLOW_UNDERSCORES" ayarlanmışsa *bayraklar o zaman sekizlik sayı kullanabilir
Rakamları ayırmak için '_' karakterleri.

UV grok_oct(const char* başlangıç, STRLEN* len_p,
I32* işaretleri, NV *sonuç)

isinfnan
Perl_isinfnan() NV bağımsız değişkeni ikisinden biriyse true değerini döndüren yardımcı program işlevidir.
bir sonsuzluk veya bir NaN, aksi takdirde yanlış. Daha ayrıntılı olarak test etmek için şunu kullanın: Perl_isinf()
ve Perl_isnan().

Bu aynı zamanda mantıksal tersi Perl_isfinite().

bool isinfnan(NV nv)

Perl_signbit
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Bir NV'deki işaret biti ayarlanmışsa sıfır olmayan bir tamsayı ve değilse 0 döndürün.

Configure, bu sistemin bir işaret biti() NV'lerimizle çalışacak, o zaman
biz sadece perl.h'deki #define ile kullanıyoruz. Aksi takdirde, bu konuda geri çekilin
uygulama. Bu işlevin ana kullanımı -0.0'ı yakalamaktır.

Notları yapılandır: Bu işleve düz yerine 'Perl_signbit' adı verilir.
'signbit' çünkü bir sistemi hayal etmek kolaydır. işaret biti() işlev veya
özel NV'ler seçimimizle çalışmayan makro. yapmamalıyız
sadece signbit'i Perl_signbit olarak yeniden tanımlayın ve standart sistem başlıklarının
mutlu ol. Ayrıca, bu bağlamsız bir işlevdir (pTHX_ yok) çünkü Perl_signbit()
genellikle perl.h'de sistemin basit bir makro çağrısı olarak yeniden tanımlanır. işaret biti().
Kullanıcılar her zaman aramalı Perl_signbit().

int Perl_signbit(NV f)

tarama_bin
Geriye dönük uyumluluk için. Bunun yerine "grok_bin" kullanın.

NV scan_bin(const char* başlangıç, STRLEN len,
STRLEN* boşver)

tarama_hex
Geriye dönük uyumluluk için. Bunun yerine "grok_hex" kullanın.

NV scan_hex(const char* başlangıç, STRLEN len,
STRLEN* boşver)

tarama_okt
Geriye dönük uyumluluk için. Bunun yerine "grok_oct" kullanın.

NV scan_oct(const char* başlangıç, STRLEN len,
STRLEN* boşver)

Eski geriye uygunluk fonksiyonlar


Bunlardan bazıları da kullanımdan kaldırılmıştır. Bunları derlenmiş Perl'inizden şu şekilde hariç tutabilirsiniz:
bu seçeneği Yapılandırmaya ekleme: "-Accflags='-DNO_MATHOMS'"

özel_op_desc
Belirli bir özel operasyonun açıklamasını döndürün. Bu, bir zamanlar OP_DESC tarafından kullanıldı
makro, ancak artık değil: yalnızca uyumluluk için tutulmuştur ve
Kullan

const char *custom_op_desc(const OP *o)

özel_op_adı
Belirli bir özel operasyon için adı döndürün. Bu, bir zamanlar OP_NAME makrosu tarafından kullanıldı,
ancak artık değil: yalnızca uyumluluk için saklanmıştır ve kullanılmamalıdır.

const char *custom_op_name(const OP *o)

gv_fetchmethod
"gv_fetchmethod_autoload" bölümüne bakın.

GV* gv_fetchmethod(HV* zula, const char* adı)

is_utf8_char
KULLANIMDAN KALDIRILDI! Bu işlevin Perl'in gelecekteki bir sürümünden kaldırılması planlanmaktadır.
Yeni kod için kullanmayın; mevcut koddan kaldırın.

Geçerli bir UTF-8 karakterinde rastgele sayıda bayt başlayıp başlamadığını test eder. Not
bir DEĞİŞMEZ (yani EBCDIC olmayan makinelerde ASCII) karakterinin geçerli bir UTF-8 olduğunu
karakter. UTF-8 karakterindeki gerçek bayt sayısı, aşağıdaki durumlarda döndürülür:
geçerlidir, aksi takdirde 0.

Bu işlev, hatalı biçimlendirilmiş girişin
giriş arabelleğinin sonunun ötesinde okumaya neden olur. Bunun yerine "isUTF8_CHAR" kullanın.

STRLEN is_utf8_char(sabit U8 *s)

is_utf8_char_buf
Bu, "isUTF8_CHAR" makrosu ile aynıdır.

STRLEN is_utf8_char_buf(const U8 *tampon,
const U8 *tampon_end)

paket_kedi
Motor uygulayan ambalaj() Perl işlevi. Not: next_in_list parametreleri ve
bayraklar kullanılmaz. Bu çağrı kullanılmamalıdır; bunun yerine paket listesini kullanın.

void pack_cat(SV *cat, const char *pat,
const char *patent, SV **yalvarma listesi,
SV **son liste, SV ***sonraki_in_list,
U32 bayrakları)

pad_compname_type
Konumdaki sözcük değişkeninin türünü arar po şu anda-
derleme pedi. Değişken yazılırsa, bulunduğu sınıfın zulası
yazılan döndürülür. Değilse, "NULL" döndürülür.

HV * pad_compname_type(PADOFFSET po)

sv_2pvbyte_nolen
SV'nin bayt kodlu gösterimine bir işaretçi döndürün. SV'ye neden olabilir
yan etki olarak UTF-8'den düşürülecek.

Genellikle "SvPVbyte_nolen" makrosu aracılığıyla erişilir.

karakter* sv_2pvbyte_nolen(SV* sv)

sv_2pvutf8_nolen
SV'nin UTF-8 kodlu gösterimine bir işaretçi döndürün. SV'ye neden olabilir
yan etki olarak UTF-8'e yükseltilecek.

Genellikle "SvPVutf8_nolen" makrosu aracılığıyla erişilir.

karakter* sv_2pvutf8_nolen(SV* sv)

sv_2pv_nolen
"sv_2pv()" gibi, ancak uzunluğu da döndürmez. genellikle
bunun yerine makro sarmalayıcı "SvPV_nolen(sv)".

karakter* sv_2pv_nolen(SV* sv)

sv_catpvn_mg
"sv_catpvn" gibi, ama aynı zamanda "set" büyüsünü de yönetir.

void sv_catpvn_mg(SV *sv, const char *ptr,
STRLEN len)

sv_catsv_mg
"sv_catsv" gibi, ama aynı zamanda "set" büyüsünü de yönetir.

geçersiz sv_catsv_mg(SV *dsv, SV *ssv)

sv_force_normal
Bir SV'de çeşitli sahtekarlık türlerini geri alın: PV paylaşılan bir dizeyse,
özel kopya; eğer biz hakemsek, hakemliği bırakın; Eğer bir küreysek, bir xpvmg'ye düşürün.
Ayrıca bkz. "sv_force_normal_flags".

geçersiz sv_force_normal(SV *sv)

sv_iv ile başa çıkamayan derleyiciler için "SvIVx" makrosunun özel bir uygulaması
karmaşık makro ifadeleri. Bunun yerine her zaman makroyu kullanın.

IV sv_iv(SV* sv)

sv_nolocking
Hiçbir kilitleme modülü olmadığında bir SV'yi "kilitleyen" sahte rutin. var
NULL işlev işaretçisini test etmekten kaçınmak ve potansiyel olarak uyarabileceğinden
belirli bir katılık seviyesi altında.

"Yerini aldı" sv_nosharing().

geçersiz sv_nolocking(SV *sv)

sv_nounlocking
Hiçbir kilitleme modülü olmadığında bir SV'nin "kilidini açan" sahte rutin.
NULL işlev işaretçisinin test edilmesini önlemek için ve potansiyel olarak
bir miktar katılık altında uyarın.

"Yerini aldı" sv_nosharing().

geçersiz sv_nounlocking(SV *sv)

sv_nv ile başa çıkamayan derleyiciler için "SvNVx" makrosunun özel bir uygulaması
karmaşık makro ifadeleri. Bunun yerine her zaman makroyu kullanın.

NV sv_nv(SV* sv)

sv_pv Bunun yerine "SvPV_nolen" makrosunu kullanın

karakter* sv_pv(SV *sv)

sv_pvbyte
Bunun yerine "SvPVbyte_nolen" kullanın.

karakter* sv_pvbyte(SV *sv)

sv_pvbyten
Baş edemeyen derleyiciler için "SvPVbyte" makrosunun özel bir uygulaması
karmaşık makro ifadelerle. Bunun yerine her zaman makroyu kullanın.

char* sv_pvbyten(SV *sv, STRLEN *lp)

sv_pvn ile başa çıkamayan derleyiciler için "SvPV" makrosunun özel bir uygulaması
karmaşık makro ifadeleri. Bunun yerine her zaman makroyu kullanın.

char* sv_pvn(SV *sv, STRLEN *lp)

sv_pvutf8
Bunun yerine "SvPVutf8_nolen" makrosunu kullanın

karakter* sv_pvutf8(SV *sv)

sv_pvutf8n
Baş edemeyen derleyiciler için "SvPVutf8" makrosunun özel bir uygulaması
karmaşık makro ifadelerle. Bunun yerine her zaman makroyu kullanın.

char* sv_pvutf8n(SV *sv, STRLEN *lp)

sv_taint
Bir SV'yi lekeleyin. Bunun yerine "SvTAINTED_on" kullanın.

geçersiz sv_taint(SV* sv)

sv_unref
SV'nin RV durumunu ayarlar ve ne olursa olsun referans sayısını azaltır.
RV tarafından referans alınıyor. Bu neredeyse bir tersine çevirme olarak düşünülebilir.
"yeniSVrv". Bu, "sv_unref_flags" ve "bayrak" sıfırdır. "SvROK_off" bölümüne bakın.

geçersiz sv_unref(SV* sv)

sv_usepvn
Bir SV'ye dize değerini bulmak için "ptr" kullanmasını söyler. arayarak uygulandı
0 "bayrakları" ile "sv_usepvn_flags", bu nedenle 'set' büyüsünü işlemez. Görmek
"sv_usepvn_flags".

void sv_usepvn(SV* sv, karakter* ptr, STRLEN len)

sv_usepvn_mg
"sv_usepvn" gibi, ama aynı zamanda "set" büyüsünü de yönetir.

void sv_usepvn_mg(SV *sv, karakter *ptr, STRLEN len)

sv_uv ile başa çıkamayan derleyiciler için "SvUVx" makrosunun özel bir uygulaması
karmaşık makro ifadeleri. Bunun yerine her zaman makroyu kullanın.

UV sv_uv(SV* sv)

paketten çıkarma_str
Motor uygulayan paketini aç() Perl işlevi. Not: parametreler strbeg, new_s
ve ocnt kullanılmaz. Bu çağrı kullanılmamalıdır, bunun yerine unpackstring kullanın.

I32 unpack_str(const char *pat, const char *patend,
const char *s, const char *strbeg,
const char *strend, char **yeni_s,
I32 oknt, U32 bayrakları)

utf8_to_uvchr
KULLANIMDAN KALDIRILDI! Bu işlevin Perl'in gelecekteki bir sürümünden kaldırılması planlanmaktadır.
Yeni kod için kullanmayın; mevcut koddan kaldırın.

"s" dizesindeki ilk karakterin yerel kod noktasını döndürür.
UTF-8 kodlamasında olduğu varsayılır; "retlen", bayt cinsinden uzunluğuna ayarlanacaktır.
o karakter.

Hepsi olmasa da bazıları UTF-8 malformasyonları tespit edilir ve aslında bazıları hatalı biçimlendirilmiştir.
giriş, giriş arabelleğinin sonunun ötesinde okumaya neden olabilir, bu yüzden bu
işlev kullanımdan kaldırılmıştır. Bunun yerine "utf8_to_uvchr_buf" kullanın.

"s", tespit edilen malformasyonlardan birine işaret ediyorsa ve UTF8 uyarıları etkinleştirildiyse,
sıfır döndürülür ve *retlen ("retlen" NULL değilse) -1 olarak ayarlanır. eğer bunlar
uyarılar kapalı, iyi tanımlanmışsa hesaplanan değer (veya Unicode DEĞİŞTİRME
KARAKTER, değilse) sessizce döndürülür ve *retlen ayarlanır ("retlen" değilse)
NULL) böylece ("s" + *retlen), "s" içinde olabilecek bir sonraki olası konumdur.
hatalı biçimlendirilmemiş bir karakter başlatın. Ayrıntılar için "utf8n_to_uvchr" bölümüne bakın.
DEĞİŞTİRME KARAKTER döndürülür.

UV utf8_to_uvchr(sabit U8 *s, STRLEN *retlen)

utf8_to_uvuni
KULLANIMDAN KALDIRILDI! Bu işlevin Perl'in gelecekteki bir sürümünden kaldırılması planlanmaktadır.
Yeni kod için kullanmayın; mevcut koddan kaldırın.

"s" dizesindeki ilk karakterin Unicode kod noktasını döndürür.
UTF-8 kodlamasında olduğu varsayılır; "retlen", bayt cinsinden uzunluğuna ayarlanacaktır.
o karakter.

Hepsi olmasa da bazıları UTF-8 malformasyonları tespit edilir ve aslında bazıları hatalı biçimlendirilmiştir.
giriş, giriş arabelleğinin sonunun ötesinde okumaya neden olabilir; bu, bunun bir nedenidir.
neden bu işlev kullanımdan kaldırıldı. Diğeri, yalnızca son derece sınırlı
koşullar, Unicode'a karşı yerel kod noktasının herhangi bir ilgisini çekmeliyse
sen. Alternatifler için "utf8_to_uvuni_buf" bölümüne bakın.

"s", tespit edilen malformasyonlardan birine işaret ediyorsa ve UTF8 uyarıları etkinleştirildiyse,
sıfır döndürülür ve *retlen ("retlen" NULL'u göstermiyorsa) -1'e ayarlanır. Eğer
bu uyarılar kapalıdır, iyi tanımlanmışsa hesaplanan değer (veya Unicode
DEĞİŞTİRME KARAKTER, değilse) sessizce döndürülür ve *retlen ayarlanır (eğer değilse
"retlen" NULL değildir), bu nedenle ("s" + *retlen) "s" içindeki bir sonraki olası konumdur
bu, hatalı biçimlendirilmemiş bir karaktere başlayabilir. Ayrıntılar için bkz. "utf8n_to_uvchr"
DEĞİŞTİRME KARAKTERİ döndürüldüğünde.

UV utf8_to_uvuni(sabit U8 *s, STRLEN *retlen)

ağaç kas kütlesi inşasında ve


yenİATANMA
Bir atama işlemi oluşturur, denetler ve döndürür. sol ve krallar gibi yaşamaya tedarik etmek
atama parametreleri; bu işlev tarafından tüketilirler ve bir parçası olurlar
inşa edilmiş op ağacından.

If optik "OP_ANDASSIGN", "OP_ORASSIGN" veya "OP_DORASSIGN" ise uygun bir
koşullu opttree oluşturulur. Eğer optik bir ikili operatörün işlem kodudur,
"OP_BIT_OR" gibi, ardından ikili işlemi gerçekleştiren bir op oluşturulur
ve sonucu sol argümana atar. Her iki durumda da, eğer optik sıfır değil
sonra bayraklar etkisi yoktur.

If optik sıfır ise, düz bir skaler veya liste ataması oluşturulur. Hangi
atama türü otomatik olarak belirlenir. bayraklar sekiz bit verir
"OPf_KIDS" otomatik olarak ayarlanacak ve yukarı kaydırılacak dışında "op_flags"
sekiz bit, "op_private"nin sekiz biti, ancak 1 veya 2 değerine sahip bit
otomatik olarak gerektiği gibi ayarlanır.

OP * newASSIGNOP(I32 bayrakları, OP *sol, I32 optype,
OP * sağ)

yenİBİNOP
Herhangi bir ikili türden bir operasyon oluşturur, denetler ve döndürür. tip işlem kodudur.
bayraklar "OPf_KIDS"in ayarlanması dışında sekiz bit "op_flags" verir
otomatik olarak ve sekiz bit yukarı kaydırıldı, sekiz bit "op_private", hariç
1 veya 2 değerine sahip bit otomatik olarak gerektiği gibi ayarlanır. ilk ve son
ikili operasyonun doğrudan çocukları olmak için iki adede kadar operasyon sağlayın; tüketilirler
bu fonksiyon ile inşa edilmiş op ağacının bir parçası olun.

OP * newBINOP(I32 tipi, I32 bayrakları, OP *ilk,
OP *son)

yeniCONDOP
Bir koşullu ifade ("cond_expr") işlemi oluşturur, denetler ve döndürür. bayraklar
"OPf_KIDS"in ayarlanması dışında sekiz bit "op_flags" verir
otomatik olarak ve sekiz bit yukarı kaydırıldı, sekiz bit "op_private", hariç
1 değerine sahip bit otomatik olarak ayarlanır. ilk ifadeyi sağlar
iki dal arasında seçim yapmak ve doğru ve yalancı şubeleri tedarik etmek;
bu işlev tarafından tüketilirler ve oluşturulan op ağacının bir parçası olurlar.

OP * newCONDOP(I32 bayrakları, OP *ilk, OP *trueop,
OP *yanlış)

yeniDEFSVOP
Sözcük değişkeni olarak (eğer
geçerli kapsamda veya global $_ olarak "benim $_" olarak bildirildi.

OP * yeniDEFSVOP()

yeniFOROP
Bir "foreach" döngüsü (yineleme) ifade eden bir işlem ağacı oluşturur, denetler ve döndürür
değerler listesi aracılığıyla). Bu, yapıya izin veren ağır bir döngüdür.
döngüden "son" ve benzeri ile çıkmak.

sv isteğe bağlı olarak, sırayla her öğeye takma ad verilecek değişkeni sağlar; Eğer
null, varsayılan olarak $_'dır (sözcüksel veya genel). İfade listesini sağlar
üzerinde yinelenecek değerler. blok döngünün ana gövdesini sağlar ve hesap
isteğe bağlı olarak, gövdenin ikinci yarısı olarak çalışan bir "devam" bloğu sağlar.
Tüm bu opttree girişleri bu fonksiyon tarafından tüketilir ve
inşa edilmiş op ağacı.

bayraklar "leaveloop" işlemi için sekiz bit "op_flags" verir ve yukarı kaydırılır
sekiz bit, "leaveloop" işlemi için sekiz "op_private" biti, bunun dışında (içinde
her iki durumda da) bazı bitler otomatik olarak ayarlanacaktır.

OP * newFOROP(I32 bayrakları, OP *sv, OP *ifade, OP *blok,
OP *devamı)

yenİGİVENOP
"Verilen" bir bloğu ifade eden bir işlem ağacı oluşturur, kontrol eder ve döndürür. cond
bir sözlüksel değişkene yerel olarak atanacak ifadeyi sağlar ve
blok "verilen" yapının gövdesini sağlar; bunlar tarafından tüketiliyorlar
işlev ve inşa edilmiş op ağacının bir parçası olun. defsv_off ped ofset mi
etkilenecek olan skaler sözcük değişkeninin 0 ise, global $_
kullanılacaktır.

OP * newGIVENOP(OP *koşul, OP *blok,
PADOFFSET defsv_off)

newGVOP Gömülü bir işlem içeren her türden bir operasyon oluşturur, kontrol eder ve döndürür.
bir GV'ye referans. tip işlem kodudur. bayraklar sekiz bit "op_flags" verir.
gv operasyonun başvurması gereken GV'yi tanımlar; bu işlevi çağırmak işe yaramaz
ona yapılan herhangi bir referansın sahipliğini devretmek.

OP * newGVOP(I32 tipi, I32 bayrakları, GV *gv)

yeniLISTOP
Herhangi bir liste türünden bir işlem oluşturur, denetler ve döndürür. tip işlem kodudur.
bayraklar "OPf_KIDS"in ayarlanması dışında sekiz bit "op_flags" verir
gerekirse otomatik olarak. ilk ve son doğrudan olmak için iki operasyona kadar tedarik
listenin çocukları op; bu işlev tarafından tüketilirler ve
inşa edilmiş op ağacı.

Çoğu liste operatörü için, kontrol işlevi tüm çocuk operasyonlarının mevcut olmasını bekler.
zaten, bu nedenle "newLISTOP(OP_JOIN, ...)" (örn.) öğesini çağırmak uygun değildir. ne sen
bu durumda yapmak istediğim, OP_LIST türünde bir op oluşturmak, daha fazla çocuk eklemek
ve ardından "op_convert_list" arayın. Daha fazla bilgi için "op_convert_list" bölümüne bakın.

OP * newLISTOP(I32 tipi, I32 bayrakları, OP *ilk,
OP *son)

yeniLOGOP
Mantıksal (akış denetimi) bir işlem oluşturur, denetler ve döndürür. tip işlem kodudur.
bayraklar "OPf_KIDS"in ayarlanması dışında sekiz bit "op_flags" verir
otomatik olarak ve sekiz bit yukarı kaydırıldı, sekiz bit "op_private", hariç
1 değerine sahip bit otomatik olarak ayarlanır. ilk ifadeyi sağlar
Akışı kontrol etmek ve diğer operasyonların yan (alternatif) zincirini sağlar; onlar
bu işlev tarafından tüketilir ve oluşturulan op ağacının bir parçası olur.

OP * yeniLOGOP(I32 tipi, I32 bayrakları, OP *ilk,
OP *diğer)

yeniLOOPEX
Döngüden çıkan bir işlem ("goto" veya "last" gibi) oluşturur, kontrol eder ve döndürür.
tip işlem kodudur. etiket hedefini belirleyen parametreyi sağlar.
op; bu işlev tarafından tüketilir ve oluşturulan op ağacının bir parçası olur.

OP * newLOOPEX(I32 tipi, OP *etiket)

yeniLOOPOP
Bir döngü ifade eden bir işlem ağacı oluşturur, kontrol eder ve döndürür. Bu sadece bir döngü
op ağacından kontrol akışında; ağır döngüye sahip değil
"son" ve benzeri ile döngüden çıkmayı sağlayan yapı. bayraklar verir
bazı bitlerin ayarlanması dışında, üst düzey operasyon için sekiz bit "op_flags"
otomatik olarak gerektiği gibi. İfade ifade kontrol döngüsünü sağlar
yineleme ve blok döngünün gövdesini sağlar; bunlar tarafından tüketiliyorlar
işlev ve inşa edilmiş op ağacının bir parçası olun. hata ayıklanabilir şu anda
kullanılmamış ve her zaman 1 olmalıdır.

OP * newLOOPOP(I32 bayrakları, I32 hata ayıklanabilir, OP *ifadesi,
OP * blok)

yenİMETHOP
Değerlendirilen bir yöntem adıyla bir yöntem türü op'u oluşturur, denetler ve döndürür
işlem esnasında. tip işlem kodudur. bayraklar dışında sekiz bit "op_flags" verir
"OPf_KIDS" otomatik olarak ayarlanacak ve sekiz bit kaydırıldığında, sekiz
1 değerine sahip bitin otomatik olarak ayarlanması dışında "op_private" bitleri.
dinamik_met yöntem adını değerlendiren bir işlem sağlar; bu tarafından tüketilir
işlev ve inşa edilmiş op ağacının bir parçası olun. Desteklenen opttypes:
OP_METHOD.

OP * newMETHOP(I32 tipi, I32 bayrakları, OP *ilk)

yeniMETHOP_adlı
Sabit bir yöntem adıyla bir yöntem türü op'u oluşturur, denetler ve döndürür.
tip işlem kodudur. bayraklar sekiz bit "op_flags" verir ve yukarı kaydırılır
sekiz bit, sekiz bit "op_private". const_meth sabit bir yöntem sağlar
isim; paylaşılan bir COW dizesi olmalıdır. Desteklenen seçenekler: OP_METHOD_NAMED.

OP * newMETHOP_named(I32 tipi, I32 bayrakları,
SV *const_meth)

yeniNULLLIST
Boş bir listeyi temsil eden yeni bir "saplama" işlemi oluşturur, denetler ve döndürür
ifadesi.

OP * yeniNULLLIST()

newOP Herhangi bir temel türün (fazladan
alanlar). tip işlem kodudur. bayraklar sekiz bit "op_flags" verir ve,
sekiz bit, "op_private" nin sekiz biti yukarı kaydırıldı.

OP * newOP(I32 tipi, I32 bayrakları)

yenİPADOP
Bir referansa referans içeren herhangi bir türde bir operasyon oluşturur, kontrol eder ve döndürür.
ped öğesi. tip işlem kodudur. bayraklar sekiz bit "op_flags" verir. A
ped yuvası otomatik olarak tahsis edilir ve sv; bu fonksiyon alır
ona bir referansın mülkiyeti.

Bu işlev yalnızca, Perl itread'leri kullanmak üzere derlenmişse mevcuttur.

OP * newPADOP(I32 tipi, I32 bayrakları, SV *sv)

newPMOP Herhangi bir kalıp eşleştirme türünden bir işlem oluşturur, denetler ve döndürür. tip olduğunu
işlem kodu. bayraklar sekiz bit "op_flags" verir ve sekiz bit yukarı kaydırıldığında,
sekiz bit "op_private".

OP * yeniPMOP(I32 tipi, I32 bayrakları)

newPVOP Yerleşik bir
C düzeyi işaretçi (PV). tip işlem kodudur. bayraklar sekiz bit verir
"op_flags". pv kullanılarak tahsis edilmiş olması gereken C düzeyi işaretçisini sağlar.
"PerlMemShared_malloc"; op yok edildiğinde bellek serbest bırakılır.

OP * yeniPVOP(I32 tipi, I32 bayrakları, karakter *pv)

yeniRANGE
Alt "flip" ve "flop" işlemleriyle bir "aralık" işlemi oluşturur ve döndürür.
bayraklar "flip" op için sekiz bit "op_flags" verir ve sekiz yukarı kaydırılır
bitler, hem "flip" hem de "range" işlemleri için sekiz "op_private" biti
1 değerine sahip bit otomatik olarak ayarlanır. sol ve krallar gibi yaşamaya tedarik etmek
aralığın uç noktalarını kontrol eden ifadeler; bunlar tarafından tüketiliyorlar
işlev ve inşa edilmiş op ağacının bir parçası olun.

OP * newRANGE(I32 bayrakları, OP *sol, OP *sağ)

yeniSLICEOP
Bir "lslice" (liste dilimi) işlemi oluşturur, denetler ve döndürür. bayraklar verir
sekiz bitlik "op_flags", "OPf_KIDS"in otomatik olarak ayarlanması dışında ve,
"op_private" nin sekiz biti olan sekiz bit yukarı kaydırıldı, bunun dışında
1 veya 2 değeri otomatik olarak gerektiği gibi ayarlanır. listeval ve altindis tedarik etmek
dilim parametreleri; bu işlev tarafından tüketilirler ve
inşa edilmiş op ağacı.

OP * newSLICEOP(I32 bayrakları, OP *alt simge,
OP * liste değeri)

yenİSTATEOP
Bir durum operasyonu (COP) oluşturur. Durum operasyonu normalde bir "sonraki durum" operasyonudur, ancak
Şu anda derlenmiş kod için hata ayıklama etkinleştirilmişse "dbstate" işlemi yapın. Eyalet
op, "PL_curcop" (veya "PL_compiling") öğesinden doldurulur. Eğer etiket boş değil, o
op durumuna eklenecek bir etiketin adını sağlar; bu işlev alır
tarafından işaret edilen hafızanın mülkiyeti etiket, ve serbest bırakacaktır. bayraklar verir
durum operasyonu için sekiz bit "op_flags".

If o null, durum op döndürülür. Aksi takdirde durum op ile birleştirilir o
döndürülen bir "lineseq" liste işlemine. o bu fonksiyon tarafından tüketilir ve
döndürülen op ağacının bir parçası olur.

OP * newSTATEOP(I32 işaretleri, karakter *etiket, OP *o)

newSVOP Gömülü bir SV içeren herhangi bir türde bir operasyon oluşturur, kontrol eder ve döndürür.
tip işlem kodudur. bayraklar sekiz bit "op_flags" verir. sv SV'yi verir
op içine gömmek; bu işlev, kendisine bir başvurunun sahipliğini alır.

OP * newSVOP(I32 türü, I32 bayrakları, SV *sv)

newUNOP Herhangi bir tekli türden bir op oluşturur, denetler ve döndürür. tip işlem kodudur.
bayraklar "OPf_KIDS"in ayarlanması dışında sekiz bit "op_flags" verir
gerekirse otomatik olarak ve sekiz bit yukarı kaydırıldığında, sekiz bit
"op_private", ancak 1 değerine sahip bit otomatik olarak ayarlanır. ilk
tekli işlemin doğrudan çocuğu olmak için isteğe bağlı bir işlem sağlar; tarafından tüketilir
bu işlev ve oluşturulan op ağacının bir parçası olur.

OP * newUNOP(I32 tipi, I32 bayrakları, OP *ilk)

yeniUNOP_AUX
"newUNOP"a benzer, ancak bunun yerine op_aux ile bir UNOP_AUX yapısı oluşturur
aux'a başlatıldı

OP* newUNOP_AUX(I32 türü, I32 bayrakları, önce OP*,
UNOP_AUX_item *yardımcı)

yeniWHENOP
Bir "ne zaman" bloğunu ifade eden bir işlem ağacı oluşturur, kontrol eder ve döndürür. cond
test ifadesini sağlar ve blok yürütülecek bloğu sağlar
test doğru olarak değerlendirilirse; bu işlev tarafından tüketilirler ve bir parçası olurlar
inşa edilmiş op ağacından. cond genellikle DWIM olarak yorumlanacaktır.
$_ ile karşılaştırma ve bir "varsayılan" blok oluşturmak için boş olabilir.

OP * newWHENOP(OP *koşul, OP *blok)

yeniWHILEOP
Bir "while" döngüsü ifade eden bir işlem ağacı oluşturur, kontrol eder ve döndürür. Bu bir
"son" ile döngüden çıkmayı sağlayan yapıya sahip ağır döngü ve
benzeri.

döngü döngüde kullanmak için isteğe bağlı önceden oluşturulmuş bir "enterloop" seçeneğidir; Öyleyse
null, daha sonra uygun bir op otomatik olarak oluşturulacaktır. İfade sağlar
döngünün kontrol ifadesi. blok döngünün ana gövdesini sağlar ve hesap
isteğe bağlı olarak, gövdenin ikinci yarısı olarak çalışan bir "devam" bloğu sağlar.
Tüm bu opttree girişleri bu fonksiyon tarafından tüketilir ve
inşa edilmiş op ağacı.

bayraklar "leaveloop" işlemi için sekiz bit "op_flags" verir ve yukarı kaydırılır
sekiz bit, "leaveloop" işlemi için sekiz "op_private" biti, bunun dışında (içinde
her iki durumda da) bazı bitler otomatik olarak ayarlanacaktır. hata ayıklanabilir şu anda kullanılmıyor
ve her zaman 1 olmalıdır. has_my döngü gövdesini zorlamak için true olarak sağlanabilir
kendi kapsamına alınmalıdır.

OP * newWHILEOP(I32 bayrakları, I32 hata ayıklanabilir,
LOOP *döngü, OP *ifade, OP *blok,
OP *devam, I32 has_my)

ağaç hile fonksiyonlar


allocopstash
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Yalnızca iş parçacıklı yapılar altında kullanılabilir, bu işlev şurada bir giriş ayırır:
Kendisine iletilen zula için "PL_stashpad".

PADOFFSET alloccopsash(HV *hv)

blok_son
Derleme zamanı kapsam çıkışını işler. zemin tarafından döndürülen savestack dizinidir
"block_start" ve seq bloğun gövdesidir. Bloğu döndürür, muhtemelen
değiştirilmiş.

OP * block_end(I32 kat, OP *seq)

blok_başlangıç
Derleme zamanı kapsam girişini işler. Blok çıkışında ipuçlarının geri yüklenmesini düzenler
ve ayrıca sözcüksel değişkenlerin kapsamını doğru yapmak için ped sıra numaralarını işler.
"block_end" ile kullanım için bir savestack dizini döndürür.

int blok_başlangıç(int dolu)

ck_entersub_args_list
Bir "entersub" işlem ağacının bağımsız değişkenler bölümünün varsayılan düzeltmesini gerçekleştirir. Bu
bağımsız değişken operasyonlarının her birine liste bağlamı uygulamaktan oluşur. bu
"&" ile işaretlenmiş bir çağrıda veya bir yöntem çağrısında veya bir çağrıda kullanılan standart muamele
bir altyordam referansı veya arananın bulunamadığı herhangi bir başka çağrı aracılığıyla
derleme zamanında tanımlanan veya arananın prototipi olmayan bir çağrı.

OP * ck_entersub_args_list(OP *entersuop)

ck_entersub_args_proto
Bir "entersub" işlem ağacının argümanlar bölümünün düzeltmesini, bir
alt program prototipi Bu, ops argümanında çeşitli değişiklikler yapar,
"refgen" operasyonlarını eklemeye kadar bağlamı uygulamak ve sayıyı kontrol etmek ve
prototip tarafından yönlendirildiği gibi sözdizimsel argüman türleri. bu standart
bir alt program aramasında kullanılan, arananın bulunabileceği "&" ile işaretlenmemiş işlem
derleme zamanında tanımlanır ve bir prototipi vardır.

protosv çağrıya uygulanacak altyordam prototipini sağlar. bir olabilir
dize değeri kullanılacak normal tanımlı skaler. Alternatif olarak,
kolaylık, bu bir alt program nesnesi ("SV*" ye dönüştürülmüş bir "CV*") olabilir.
hangi bir prototip var. Sağlanan prototip, hangi biçimde olursa olsun,
op ağacı tarafından başvurulan gerçek aranan ile eşleşmesi için.

Ops argümanı prototiple aynı fikirde değilse, örneğin bir
kabul edilemez sayıda argüman, yine de geçerli bir işlem ağacı döndürülür. Hata
ayrıştırıcı durumuna yansıtılır ve normalde tek bir istisna ile sonuçlanır.
meydana gelen tüm derleme hatalarını kapsayan en üst düzey ayrıştırma. İçinde
hata mesajı, aranan kişi tarafından tanımlanan adla anılır. isim gv
parametre.

OP * ck_entersub_args_proto(OP *entersubop,
GV *namegv, SV *protosv)

ck_entersub_args_proto_or_list
Bir "entersub" işlem ağacının argümanlar bölümünün düzeltmesini,
bir alt program prototipi veya varsayılan liste bağlamı işlemeyi kullanma. bu
"&" ile işaretlenmemiş bir alt program çağrısında kullanılan standart işlem;
callee derleme zamanında tanımlanabilir.

protosv çağrıya uygulanacak alt program prototipini sağlar veya
prototip olmadığı gerçeği. Normal bir skaler olabilir, bu durumda
tanımlanmışsa, dize değeri prototip olarak kullanılacaktır ve tanımsızsa
o zaman prototip yok. Alternatif olarak, kolaylık sağlamak için bir
prototipi olan alt program nesnesi ("SV*" ye dönüştürülmüş bir "CV*")
varsa kullanılacaktır. Sağlanan prototip (veya eksikliği),
hangi formda olursa olsun, op tarafından referans verilen gerçek aranan ile eşleşmesi gerekmez
ağaç.

Ops argümanı prototiple aynı fikirde değilse, örneğin bir
kabul edilemez sayıda argüman, yine de geçerli bir işlem ağacı döndürülür. Hata
ayrıştırıcı durumuna yansıtılır ve normalde tek bir istisna ile sonuçlanır.
meydana gelen tüm derleme hatalarını kapsayan en üst düzey ayrıştırma. İçinde
hata mesajı, aranan kişi tarafından tanımlanan adla anılır. isim gv
parametre.

OP * ck_entersub_args_proto_or_list(OP *entersubop,
GV *isim,
SV *protosv)

cv_const_sv
"cv" satır içi için uygun bir sabit alt ise, sabit değeri döndürür
alt tarafından döndürülür. Aksi takdirde, NULL döndürür.

Sabit sub'lar "newCONSTSUB" ile veya "Constant" bölümünde açıklandığı gibi oluşturulabilir.
Perlsub'da "İşlevler".

SV* cv_const_sv(const CV *const özgeçmiş)

cv_get_call_checker
Bir çağrıyı düzeltmek için kullanılacak işlevi alır. cv. özellikle,
işlev, bir alt program çağrısı için bir "entersub" işlem ağacına uygulanır, işaretlenmez
aranan kişinin derleme zamanında şu şekilde tanımlanabileceği "&" ile cv.

C düzeyi işlev işaretçisi şurada döndürülür: *ckfun_pve bunun için bir SV argümanı
geri döndü *ckobj_p. Fonksiyonun şu şekilde çağrılması amaçlanmıştır:

entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));

Bu çağrıda, entersubop değiştirilebilecek "entersub" işlemine yönelik bir işaretçidir
kontrol fonksiyonu ile ve isim gv kullanılması gereken adı sağlayan bir GV'dir
gerekirse "entersub" işleminin arananına başvurmak için kontrol işleviyle
herhangi bir teşhis yayar. Kontrol işlevinin standart dışı durumlarda uygulanmasına izin verilir.
farklı bir alt yordam çağrısı veya bir yöntem çağrısı gibi durumlar.

Varsayılan olarak, işlev Perl_ck_entersub_args_proto_or_list'tir ve SV
parametre cv kendisi. Bu, standart prototip işlemeyi uygular. Olabilir
belirli bir alt program için "cv_set_call_checker" tarafından değiştirildi.

geçersiz cv_get_call_checker(CV *cv,
Perl_call_checker *ckfun_p,
SV **ckobj_p)

cv_set_call_checker
"cv_set_call_checker_flags"ın orijinal biçimi, onu geçen
Geriye dönük uyumluluk için "CALL_CHECKER_REQUIRE_GV" işareti.

geçersiz cv_set_call_checker(CV *cv,
Perl_call_checker eğlenceli,
SV *ckobj)

cv_set_call_checker_flags
Bir aramayı düzeltmek için kullanılacak işlevi ayarlar. cv. Özellikle,
işlev, bir alt program çağrısı için bir "entersub" işlem ağacına uygulanır, işaretlenmez
aranan kişinin derleme zamanında şu şekilde tanımlanabileceği "&" ile cv.

C düzeyi işlev işaretçisi şurada sağlanır: eğlenceve bunun için bir SV argümanı
içinde sağlanan ckobj. Fonksiyon şu şekilde tanımlanmalıdır:

STATİK OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)

Bu şekilde çağrılması amaçlanmıştır:

entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);

Bu çağrıda, entersubop değiştirilebilecek "entersub" işlemine yönelik bir işaretçidir
kontrol fonksiyonu ile ve isim gv tarafından kullanılması gereken adı sağlar.
herhangi bir şey yayması gerekiyorsa, "entersub" işleminin arananına başvurmak için işlevi kontrol edin.
teşhis. Kontrol işlevinin standart dışı durumlarda uygulanmasına izin verilir.
farklı bir alt yordam çağrısı veya bir yöntem çağrısı gibi durumlar.

isim gv aslında bir GV olmayabilir. Verimlilik için, Perl bir CV veya başka bir SV'yi geçebilir
yerine. Geçilen her şey "cv_name" için ilk argüman olarak kullanılabilir. Sen
içine "CALL_CHECKER_REQUIRE_GV" ekleyerek perl'i bir GV'yi geçmeye zorlayabilir bayraklar.

Belirli bir CV için geçerli ayar "cv_get_call_checker" ile alınabilir.

geçersiz cv_set_call_checker_flags(
CV *cv, Perl_call_checker ckfun, SV *ckobj,
U32 bayrakları
)

BAĞLANTI LİSTESİ
Bir opttree'nin kökü verildiğinde, ağacı "op_next" kullanarak yürütme sırasına göre bağlayın
işaretçiler ve yürütülen ilk işlemi döndürür. Bu zaten yapıldıysa,
yeniden yapılmaz ve "o->op_next" döndürülür. "o->op_next" zaten değilse
seti, o en az bir "UNOP" olmalıdır.

OP* BAĞLANTI LİSTESİ(OP *o)

yeniCONSTSUB
"newCONSTSUB_flags" bölümüne bakın.

CV* newCONSTSUB(HV* zula, const char* adı, SV* sv)

yeniCONSTSUB_flags
Uygun olan Perl "sub FOO () { 123 }" ile eşdeğer bir sabit alt oluşturur
derleme zamanında satır içi için.

Şu anda "bayraklar" için tek yararlı değer SVf_UTF8'dir.

Yeni oluşturulan alt program, SV'de geçirilen bir referansın sahipliğini alır.

SV için NULL iletmek, "sub BAR () {}" ile eşdeğer bir sabit alt oluşturur;
yıkıcı olarak kullanılırsa çağrılmaz, ancak bir çağrının ek yükünü bastırır
"OTOMATİK YÜKLE" seçeneğine. (Ancak bu form, derleme zamanında satır içi kullanıma uygun değildir.)

CV* newCONSTSUB_flags(HV* stash, const karakter* adı,
STRLEN len, U32 bayrakları, SV* sv)

newXS "xsubpp" tarafından XSUB'ları Perl alt birimleri olarak bağlamak için kullanılır. Dosya statik olması gerekiyor
olarak doğrudan kullanıldığı için depolama özgeçmiş(), bir kopya yapılmadan.

OpHAS_SIBLING
o'nun bir kardeşi varsa true döndürür

bool OpHAS_SIBLING(OP *o)

OpLASTSIB_set
O'yu başka kardeşi yok olarak işaretler. "PERL_OP_PARENT" derlemelerinde o olarak işaretler
belirtilen ebeveyne sahip olmak. Ayrıca bkz. "OpMORESIB_set" ve "OpMAYBESIB_set". için
daha yüksek seviyeli arayüz, bkz. "op_sibling_splice".

void OpLASTSIB_set(OP *o, OP *üst)

OpMAYBESİB_set
sib olup olmamasına bağlı olarak koşullu olarak "OpMORESIB_set" veya "OpLASTSIB_set" yapar.
boş olmayan. Daha yüksek seviyeli bir arayüz için bkz. "op_sibling_splice".

void OpMAYBESİB_set(OP *o, OP *sib, OP *üst)

OpMORESIB_set
o'nun kardeşini sıfır olmayan sib değerine ayarlar. Ayrıca bkz. "OpLASTSIB_set" ve
"OpMAYBESİB_set". Daha yüksek seviyeli bir arayüz için bkz. "op_sibling_splice".

geçersiz OpMORESIB_set(OP *o, OP *sib)

SİPARİŞ
o'nun kardeşini veya kardeş yoksa NULL'u döndürür

OP* OPSIBLING(OP *o)

işlem_append_elem
Doğrudan bir liste tipi operasyonda bulunan operasyon listesine bir öğe ekleyin,
uzatılmış listeyi döndürür. ilk liste tipi operasyondur ve son Opsiyon mu
listeye ekleyin. optik liste için amaçlanan işlem kodunu belirtir. Eğer ilk
zaten doğru türde bir liste değil, bir listeye yükseltilecek. Eğer ikisinden biri
ilk or son null, diğeri değişmeden döndürülür.

OP * op_append_elem(I32 optype, OP *ilk, OP *son)

işlem_ek_listesi
Doğrudan iki liste tipi operasyonda bulunan operasyon listelerini birleştirin,
birleşik listeyi döndürür. ilk ve son birleştirilecek liste tipi işlemlerdir.
optik liste için amaçlanan işlem kodunu belirtir. Eğer ikisinden biri ilk or son değil
zaten doğru türden bir liste, bir listeye yükseltilecektir. Eğer ikisinden biri ilk
or son null, diğeri değişmeden döndürülür.

OP * op_append_list(I32 optype, OP *ilk, OP *son)

OP_SINIF
Sağlanan OP'nin sınıfını döndürün: yani, *OP yapılarından hangisini kullanır.
Çekirdek operasyonlar için bu, şu anda bilgileri PL_opargs'tan alıyor, bu da
kullanılan türü her zaman doğru bir şekilde yansıtır. Özel işlemler için tür döndürülür
kayıt ve doğru olduğundan emin olmak kayıt ağacına bağlıdır. bu
döndürülen değer, op.h'deki OA_* sabitlerinden biri olacaktır.

U32 OP_SINIF(OP *o)

op_contextualize
Bir ifadeyi temsil eden bir işlem ağacına sözdizimsel bir bağlam uygular. o operasyon mu
ağaç ve bağlam belirtmek için "G_SCALAR", "G_ARRAY" veya "G_VOID" olmalıdır.
uygulanacak bağlam. Değiştirilen op ağacı döndürülür.

OP * op_contextualize(OP *o, I32 bağlamı)

op_convert_list
dönüştürür o zaten değilse, bir liste op'una dönüştürün ve ardından onu
Belirtilen tip, kontrol işlevini çağırarak, gerekirse bir hedef tahsis ederek,
ve katlama sabitleri.

Liste tipi bir operasyon genellikle "newLISTOP" aracılığıyla her seferinde bir çocuk oluşturulur,
"op_prepend_elem" ve "op_append_elem". Sonra nihayet geçilir
"op_convert_list" doğru tür yapmak için.

OP * op_convert_list(I32 tipi, I32 bayrakları, OP *o)

OP_DESC Sağlanan OP'nin kısa bir açıklamasını döndürür.

const karakter * OP_DESC(OP *o)

op_free Bir op serbest bırakın. Bunu yalnızca, bir işlem artık herhangi bir opttree ile bağlantılı olmadığında kullanın.

geçersiz op_free(OP *o)

op_linklist
Bu işlev, "LINKLIST" makrosunun uygulamasıdır. Olmamalı
doğrudan aradı.

OP* op_linklist(OP *o)

işlem_değeri
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Değer ("değiştirilebilir") bağlamını bir operasyona ve alt öğelerine yaymak. tip
kabaca yapacak olan op türüne bağlı olarak bağlam türünü temsil eder.
"local()" OP_NULL ile temsil edilse de, op türü olmadığı için değiştirme
kendi başına (değer op üzerindeki bir bayrakla işaretlenir).

Bu işlev, "$x+1" gibi değiştirilemeyen şeyleri algılar ve
onlar için hatalar. Örneğin, "$x+1 = 2", bir op ile çağrılmasına neden olur.
OP_ADD türünde ve OP_SASSIGN'in bir "tür" bağımsız değişkeni.

Ayrıca, değer bağlamında özel olarak davranması gereken şeyleri işaretler, örneğin
$x içindeki bir referansı canlandırması gerekebilecek "$$x = 5".

OP * op_lvalue(OP *o, I32 tipi)

OP_NAME Sağlanan OP'nin adını döndürür. Çekirdek operasyonlar için bu, adı şuradan arar:
op_type; op_ppaddr'dan özel işlemler için.

const karakter * OP_NAME(OP *o)

op_null Artık gerekli olmadığında, ancak yine de diğerinden bağlantılı olduğunda bir op'u nötralize eder.
operasyon.

geçersiz op_null(OP *o)

op_parent
Bir ebeveyni varsa, o'nun ebeveyn OP'sini döndürür. Aksi takdirde NULL döndürür. Bu
işlev yalnızca "-DPERL_OP_PARENT" ile oluşturulmuş perllerde kullanılabilir.

OP* op_parent(OP *o)

operasyon_prepend_elem
Doğrudan bir liste tipi operasyonda bulunan operasyonlar listesinin başına bir öğe ekleyin,
uzatılmış listeyi döndürür. ilk listenin başına ekleme seçeneğidir ve son
liste tipi op. optik liste için amaçlanan işlem kodunu belirtir. Eğer son
zaten doğru türde bir liste değil, bir listeye yükseltilecek. Eğer ikisinden biri
ilk or son null, diğeri değişmeden döndürülür.

OP * op_prepend_elem(I32 optype, OP *ilk, OP *son)

op_scope
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Çalışma zamanında dinamik bir kapsam için bazı ek işlemlerle bir işlem ağacını tamamlar
yaratılacak. Orijinal operasyonlar yeni dinamik kapsamda çalışır ve ardından,
normal olarak çıkmaları şartıyla, kapsam çözülecektir. Ek işlemler
dinamik kapsamı oluşturmak ve gevşetmek için kullanılan normalde bir "giriş"/"ayrıl" olacaktır
çift, ancak operasyonlar olmayacak kadar basitse, bunun yerine bir "kapsam" operasyonu kullanılabilir.
tam dinamik kapsam yapısına ihtiyaç duyar.

OP * op_scope(OP *o)

op_sibling_splice
Mevcut bir op_sibling zincirinin yapısını düzenlemek için genel bir işlev
düğümler. Perl düzeyine benzeterek ekleme() işlevi, silmenizi sağlar
sıfır veya daha fazla sıralı düğüm, bunları sıfır veya daha fazla farklı düğümle değiştirme.
Ana düğümde gerekli op_first/op_last temizliğini gerçekleştirir ve
çocuklar üzerinde op_sibling manipülasyonu. Son silinen düğüm olarak işaretlenecek
op_sibling/op_sibparent veya op_moresib alanını şu şekilde güncelleyerek son düğüm olarak
uygun.

op_next'in değiştirilmediğini ve düğümlerin serbest bırakılmadığını unutmayın; bu
arayan kişinin sorumluluğundadır. Ayrıca boş bir liste için yeni bir liste oluşturmaz.
liste vb; gibi üst düzey işlevleri kullanın op_append_elem() bunun için.

ebeveyn, kardeş zincirin ebeveyn düğümüdür. NULL olarak geçebilir, eğer
ekleme, zincirdeki ilk veya son işlemi etkilemez.

start, eklenecek ilk düğümden önceki düğümdür. Onu takip eden düğüm(ler)
silinecek ve ondan sonra ops eklenecektir. NULL ise, ilk düğüm
sonrası silinir ve düğümler en başa eklenir.

del_count silinecek düğüm sayısıdır. Sıfırsa, hiçbir düğüm silinmez. eğer -1
veya kalan çocukların sayısından büyük veya ona eşit, kalan tüm çocuklar
silindi.

insert, düğümlerin yerine eklenecek bir düğüm zincirinin ilkidir. Eğer
NULL, hiçbir düğüm eklenmedi.

Silinen işlemler zincirinin başı döndürülür veya hiçbir işlem silinmemişse NULL döndürülür.

Örneğin:

dönüşten önce eylem
------ ----- ----- -------

PP
ekleme(P, A, 2, XYZ) | | M.Ö
ABCD AXYZD

PP
ekleme(P, BOŞ, 1, XY) | | A
ABCD XYBCD

PP
ekleme(P, BOŞ, 3, BOŞ) | | ABC
ABCD D

PP
ekleme(P, B, 0, XY) | | HÜKÜMSÜZ
ABCD ABXYCD

"op_sibparent" ve "op_moresib" öğelerinin alt düzey doğrudan manipülasyonu için bkz.
"OpMORESIB_set", "OpLASTSIB_set", "OpMAYBESİB_set".

OP* op_sibling_splice(OP *üst, OP *başlangıç,
int del_count, OP* ekleme)

OP_TYPE_IS
Verilen OP bir NULL işaretçisi değilse ve verilen türden ise true döndürür.

Bu makronun olumsuzlanması, "OP_TYPE_ISNT" yanı sıra mevcuttur
NULL işaretçi kontrolünü ortadan kaldıran "OP_TYPE_IS_NN" ve "OP_TYPE_ISNT_NN".

bool OP_TYPE_IS(OP *o, Optype tipi)

OP_TYPE_IS_OR_WAS
Verilen OP bir NULL işaretçi değilse ve verilen türdeyse true döndürür
veya OP_NULL türünde bir OP ile değiştirilmeden önce kullanılırdı.

Bu makronun olumsuzlaması, "OP_TYPE_ISNT_AND_WASNT" yanı sıra kullanılabilir
NULL'u ortadan kaldıran "OP_TYPE_IS_OR_WAS_NN" ve "OP_TYPE_ISNT_AND_WASNT_NN"
işaretçi kontrolü.

bool OP_TYPE_IS_OR_WAS(OP *o, Optype tipi)

rv2cv_op_cv
Çalışma zamanında bir alt yordamı tanımlaması beklenen bir işlemi inceler ve
derleme zamanında hangi alt yordamı tanımladığını belirlemeye çalışır. Bu
normalde bir prototipin oluşturulup oluşturulamayacağını belirlemek için Perl derlemesi sırasında kullanılır.
bir işlev çağrısına uygulanır. cvp op, normalde bir "rv2cv" olarak kabul ediliyor mu?
op. Belirlenebilirse, tanımlanan alt programa bir işaretçi döndürülür.
statik olarak ve belirlemek mümkün değilse bir boş gösterici döndürülür.
statik olarak.

Şu anda, RV'nin "rv2cv" olması durumunda alt program statik olarak tanımlanabilir.
uygun bir "gv" veya "const" op tarafından sağlanır. Bir "gv" işlemi
GV'nin CV yuvası doluysa uygundur. Aşağıdaki durumlarda bir "const" işlemi uygundur:
sabit değer, CV'ye işaret eden bir RV olmalıdır. Bu sürecin detayları değişebilir
Perl'in gelecekteki sürümlerinde. "rv2cv" işlemi "OPpENTERSUB_AMPER" bayrağına sahipse
ayarlandığında alt programı statik olarak tanımlama girişiminde bulunulmaz: bu işaret
bir alt program çağrısında derleme zamanı büyüsünü bastırmak ve kullanmaya zorlamak için kullanılır
varsayılan çalışma zamanı davranışı.

If bayraklar "RV2CVOPCV_MARK_EARLY" bitine sahipse, ardından bir GV'nin işlenmesi
referans değiştirilir. Bir GV incelendiyse ve CV yuvasının olduğu tespit edildiyse
boşsa, "gv" işlemi "OPpEARLY_CV" bayrağına sahiptir. op değilse
optimize edilir ve CV yuvası daha sonra bir alt programla doldurulur.
prototip, bu bayrak sonunda "kontrol etmek için çok erken çağrıldı" uyarısını tetikler
prototip".

If bayraklar "RV2CVOPCV_RETURN_NAME_GV" bitine sahipse, ardından bir
alt yordama işaretçi, en fazla değeri veren GV'ye bir işaretçi döndürür.
bu bağlamda alt program için uygun ad. Normalde bu sadece
Altyordamın "CvGV"si, ancak anonim ("CvANON") bir altyordam için
bir GV aracılığıyla atıfta bulunulursa, referans alınan GV olacaktır. Ortaya çıkan "GV*"
iade edilmek üzere "CV*" ye aktarılır. Hiçbiri yoksa, her zamanki gibi bir boş gösterici döndürülür.
statik olarak belirlenebilir alt program.

CV * rv2cv_op_cv(OP *cvop, U32 bayrakları)

Paketlemek ve açmak


paket listesi
Motor uygulayan ambalaj() Perl işlevi.

geçersiz paket listesi(SV *cat, const char *pat,
const char *patent, SV **yalvarma listesi,
SV **son liste)

paketini açmak
Motoru uygulayan paketini aç() Perl işlevi.

pat..patend şablonunu kullanarak, bu işlev s..strend dizesini bir
perl argümanına (@_) ittiği ölümlü SV'lerin sayısı (böylece
buna yapılan çağrıdan önce bir "PUTBACK" ve ardından "SPAGAIN" yayınlamanız gerekecektir.
işlev). İtilen öğelerin sayısını döndürür.

Eğilim ve patent işaretçileri, sonuncuyu takip eden baytı göstermelidir.
her dizenin karakteri.

Bu işlev, Perl argüman yığınındaki değerlerini döndürmesine rağmen,
bu yığından herhangi bir parametre alın (ve bu nedenle özellikle yapmanıza gerek yok)
örneğin "call_pv"den farklı olarak, çağırmadan önce bir PUSHMARK).

I32 unpackstring(const char *pat,
const char *patend, const char *s,
const char *strend, U32 bayrakları)

ped Veri yapılar


CVPADLIST
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

CV'lerde CvPADLIST(cv) bir PADLIST'e işaret edecek şekilde ayarlanmış olabilir. Bu CV'ler
Sözcüksel değişkenleri depolayan ve geçici ve iş parçacığı başına işlem kodunu içeren karalama defteri
değerleri.

Bu amaçlar için "formatlar" bir tür CV'dir; eval""ler de öyledir (olmamaları dışında
istendiğinde çağrılabilir ve her zaman değerlendirme"" yürütüldükten sonra atılır).
Gerekli dosyalar, herhangi bir dış sözcük kapsamı olmadan yalnızca değerlendirmelerdir.

XSUB'ların bir CvPADLIST'i yoktur. dXSTARG, PL_curpad'den değerler alır, ancak bu
gerçekten arayanlar pedi (her entersub tarafından tahsis edilen bir yuva). Yapma
CV bir XSUB ise ("CvISXSUB()" tarafından belirlendiği gibi) CvPADLIST'i alın veya ayarlayın, CvPADLIST
yuva, XSUB'larda farklı bir dahili amaç için yeniden kullanılır.

PADLIST, pedlerin depolandığı bir C dizisine sahiptir.

PADLIST'in 0. girişi, "isimleri" veya
bunun yerine sözlükler için "statik tip bilgisi". Bireysel unsurlar bir
PADNAMELIST, PADNAME'lerdir. Gelecekteki yeniden düzenleme işlemleri, PADNAMELIST'in
PADLIST dizisinde saklanıyor, bu yüzden ona güvenmeyin. "PadlistNAMES" bölümüne bakın.

Bir PADLIST'in CvDEPTH'inci girişi, yığın çerçevesi olan bir PAD'dir (bir AV).
CV'deki bu özyineleme derinliği. Bir çerçeve AV'nin 0. yuvası, bir AV'dir.
@_. Diğer girişler, değişkenler ve işlem hedefleri için depolamadır.

PADNAMELIST üzerinde yineleme, tüm olası pad öğeleri üzerinde yinelenir. Ped yuvaları
hedefler için (SVs_PADTMP) ve GV'ler sonunda &PL_padname_undef "adları"na sahip olurken,
sabitler için yuvaların &PL_padname_const "adları" vardır (bkz. pad_alloc()). o
&PL_padname_undef ve &PL_padname_const bir uygulama detayı olarak kullanılır
değişikliğe tabidir. Bunları test etmek için "!PadnamePV(name)" ve "PadnamePV(name)" kullanın.
&& !PadnameLEN(ad)" sırasıyla.

Yalnızca benim/bizim değişken yuvalarımız geçerli adlar alır. Geri kalanlar operasyon hedefleri/GV'ler/sabitlerdir
derleme zamanında statik olarak tahsis edilen veya çözülen. bunlar yok
çalışma zamanında Perl kodundan eval"" ile aranabilecekleri adlar
benim/değişkenlerimizin olabileceği yol. "Ad" ile aranamayacakları için, yalnızca
derleme zamanında tahsis edilen dizinleri (genellikle PL_op->op_targ içindedir),
onlar için bir SV adını boşa harcamak mantıklı değil.

PADNAMELIST içindeki ped adları, değişkenin adını tutan PV'lerine sahiptir.
COP_SEQ_RANGE_LOW ve _HIGH alanları bir aralık oluşturur (düşük+1..yüksek dahil)
adın geçerli olduğu cop_seq numaraları. Derleme sırasında bu alanlar
çeşitli aşamaları belirtmek için özel PERL_PADSEQ_INTRO değerini basılı tutun:

COP_SEQ_RANGE_LOW _HIGH
----------------- -----
PERL_PADSEQ_INTRO 0 değişkeni henüz tanıtılmadı:
{ benim ($x
kapsamda geçerli-seq# PERL_PADSEQ_INTRO değişkeni:
{ benim ($x)
geçerli-seq# geçerli-seq# kapsam derlemesi tamamlandı:
{ benim ($x) }

Yazılan sözlükler için PadnameTYPE türü zulaya işaret eder. "Bizim" sözlüklerimiz için,
PadnameOURSTASH, ilişkili globalin zulasını işaret eder (böylece yinelenen
Aynı paketteki "bizim" bildirimlerimiz tespit edilebilir). PadnameGEN bazen
derleme sırasında nesil numarasını saklamak için kullanılır.

Pad isminde PadnameOUTER ayarlanmışsa, AV çerçevesindeki bu yuva bir
"Dışarıdan" bir sözlük için REFCNT'ed referans. Bu tür girişler bazen
'sahte' olarak anılır. Bu durumda, ad için 'düşük' ve 'yüksek' kullanılmaz.
baştan sona kapsamda olduğu için bir cop_seq aralığı saklayın. Bunun yerine 'yüksek' mağazalar
gerçek sözlük hakkında bilgi içeren bazı bayraklar (anon'da ilan edildi mi ve
birden çok kez başlatılabilir mi?) ve sahte ANON'lar için 'düşük'
sözcük değerinin depolandığı ebeveyn pedi içindeki dizini içerir,
klonlamayı daha hızlı yapın.

'Ad' '&' ise, PAD'deki karşılık gelen giriş, bir CV'yi temsil eden bir CV'dir.
olası kapanma

Formatların anon subs olarak ele alındığını ve yazma işlemi her yapıldığında klonlandığını unutmayın.
çağrılır (gerekirse).

SVs_PADSTALE bayrağı, sözlükte her seferinde temizlenir. benim() yürütülür ve
kapsam çıkışında ayarlayın. Bu, '$x Değişkeni mevcut değil' uyarısının
gibi değerlendirmelerde oluşturulan

{ benim $x = 1; sub f { değerlendirme '$x'} } f();

Durum değişkenleri için, SVs_PADSTALE 'henüz başlatılmamış' anlamına gelecek şekilde aşırı yüklenmiştir, ancak bu
dahili durum ayrı bir ped girişinde saklanır.

PADLIST * CvPADLIST(CV *cv)

PadARRAY
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Pad girişlerinin C dizisi.

SV ** PadARRAY(PAD pedi)

PadlistARRAY
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Pedleri içeren bir padlistin C dizisi. Yalnızca sayılarla abone olun >=
1, 0. girişin kullanılabilir kalması garanti edilmediğinden.

PAD ** PadlistARRAY(PADLIST padlist)

PadlistMAX
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Pad listesindeki son tahsis edilen alanın dizini. Son pedin
daha erken bir yuvada olmak. Bu durumda onu izleyen tüm girişler NULL olacaktır.

SSize_t PadlistMAX(PADLIST padlist)

PadlistNAMES
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Ped girişleriyle ilişkili adlar.

PADNAMELIST * PadlistNAMES(PADLIST padlist)

PadlistNAMESARRAY
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Pad adlarının C dizisi.

PADNAME ** PadlistNAMESARRAY(PADLIST padlist)

PadlistNAMESMAX
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Son ped adının dizini.

SSize_t PadlistNAMESMAX(PADLIST padlist)

PadlistREFCNT
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Padlistin referans sayısı. Şu anda bu her zaman 1.

U32 PadlistREFCNT(PADLIST padlist)

PadMAX NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Son ped girişinin dizini.

SSize_t PadMAX(PAD pedi)

AdLEN
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Adın uzunluğu.

STRLEN AdLEN(PADNAME pn)

PadnamelistARRAY
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Pad adlarının C dizisi.

PADNAME ** PadnamelistARRAY(PADNAMELIST pnl)

PadnamelistMAX
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Son ped adının dizini.

SSize_t PadnamelistMAX(PADNAMELIST pnl)

İsim listesiREFCNT
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Ped adı listesinin referans sayısı.

SSize_t PadnamelistREFCNT(PADNAMELIST pnl)

İsim listesiREFCNT_dec
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Ped adı listesinin referans sayısını düşürür.

geçersiz PadnamelistREFCNT_dec(PADNAMELIST pnl)

Takma adPV
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Pad name yapısında saklanan isim. Bu, bir hedef yuva için NULL döndürür.

karakter * PadnamePV(PADNAME pn)

Tam AdREFCNT
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Ped adının referans sayısı.

SSize_t PadnameREFCNT(PADNAME pn)

Tam AdREFCNT_dec
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Ped adının referans sayısını düşürür.

geçersiz PadnameREFCNT_dec(PADNAME pn)

Takma adSV
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Pad adını ölümlü bir SV olarak döndürür.

SV * PadnameSV(PADNAME pn)

Ad UTF8
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

PadnamePV'nin UTF8'de olup olmadığı. Şu anda, bu her zaman doğrudur.

bool PadnameUTF8(PADNAME pn)

pad_add_name_pvs
Tam olarak "pad_add_name_pvn" gibi, ancak yerine bir hazır bilgi dizesi alır
dizi/uzunluk çifti.

PADOFFSET pad_add_name_pvs(const char *name, U32 bayrakları,
HV *tipi, HV *stash)

pad_findmy_pvs
Tam olarak "pad_findmy_pvn" gibi, ancak bir dizge yerine değişmez bir dize alır.
dizi/uzunluk çifti.

PADOFFSET pad_findmy_pvs(const char *isim, U32 bayrakları)

pad_new Şu anda derlenmekte olan için global değişkenleri güncelleyen yeni bir padlist oluşturun.
yeni padliste işaret etmek için padlist. Aşağıdaki bayraklar birlikte VEYA'lanabilir:

padnew_CLONE bu ped klonlanmış bir CV içindir
padnew_SAVE eski globalleri kaydetme yığınına kaydet
padnew_SAVESUB ayrıca sub başlangıcı için ekstra şeyler kaydeder

PADLIST * pad_new(int işaretleri)

PL_compppad
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Derleme sırasında, bu, pedin değerler bölümünü içeren diziye işaret eder.
şu anda derlenen kod için. (Çalışma zamanında bir CV, bu tür birçok değere sahip olabilir
diziler; derleme zamanında yalnızca bir tane oluşturulur.) Çalışma zamanında, bu şuna işaret eder:
şu anda- için ped için şu anda ilgili değerleri içeren dizi
yürütme kodu.

PL_comppad_adı
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Derleme sırasında, bu, pad'in adlar bölümünü içeren diziye işaret eder.
şu anda derlenen kod için.

PL_curpad
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Doğrudan "PL_comppad" dizisinin gövdesine işaret eder. (Yani, bu
"PAD_ARRAY(PL_comppad)".)

Tercüman Başına Değişkenler


PL_modglobal
"PL_modglobal", uzantılar tarafından kullanım için genel amaçlı, yorumlayıcı global HV'dir
bilgileri tercüman bazında tutması gerekir. Bir tutam da olabilir
uzantıların birbirleri arasında veri paylaşmaları için bir sembol tablosu olarak kullanılabilir. Bu bir
sahibi olan uzantının paket adının ön ekine sahip anahtarları kullanmak iyi bir fikirdir.
verileri.

HV* PL_modglobal

PL_na Önemsemediğinde tipik olarak "SvPV" ile kullanılan bir uygunluk değişkeni
dizenin uzunluğu hakkında. Bir bildirimde bulunmak genellikle daha verimlidir.
yerel değişken ve bunun yerine bunu kullanın veya "SvPV_nolen" makrosunu kullanın.

STRLEN PL_na

PL_opfreehook
"NULL" olmadığında, bu değişkenin işaret ettiği işlev her seferinde çağrılır.
OP, argüman olarak karşılık gelen OP ile serbest bırakılır. Bu, uzantıların
bir OP'ye yerel olarak ekledikleri herhangi bir ekstra özelliği serbest bırakın. Ayrıca garantilidir
önce ebeveyn OP için, sonra çocukları için ateş etmek.

Bu değişkeni değiştirdiğinizde, bu değişkeni saklamak için iyi bir uygulama olarak kabul edilir.
muhtemelen daha önce takılmış kanca ve kendi içinizde hatırlarsınız.

Perl_ophook_t PL_opfreehook

PL_peepp
Altyordam başına gözetleme deliği iyileştiricisinin işaretçisi. Bu, elde edilen bir işlevdir
Perl altyordamının derlenmesinin sonunda çağrılır (veya eşdeğerde bağımsız
Perl kodunun bir parçası) bazı operasyonların düzeltmelerini gerçekleştirmek ve küçük ölçekli gerçekleştirmek için
optimizasyonlar. İşlev, derlenen her alt program için bir kez çağrılır,
ve tek parametre olarak, giriş noktası olan op'a bir işaretçi iletilir
alt yordam. İşlem ağacını yerinde değiştirir.

Gözetleme deliği iyileştirici asla tamamen değiştirilmemelidir. Bunun yerine, kod ekleyin
mevcut optimize ediciyi sararak. Bunu yapmanın temel yolu şurada görülebilir:
Perlguts'ta "Derleme geçişi 3: gözetleme deliği optimizasyonu". Yeni kod isterse
sadece en üstte değil, altyordamın yapısı boyunca operasyonlarda çalışın
düzeyde, "PL_rpeepp" kancasını sarmak muhtemelen daha uygun olacaktır.

peep_t PL_peepp

PL_rpeepp
Özyinelemeli gözetleme deliği iyileştiricisinin işaretçisi. Bu çağrılan bir işlevdir
Perl altyordamının (veya eşdeğerde bağımsız parçanın) derlenmesinin sonunda
Perl kodu) bazı operasyonların düzeltmelerini gerçekleştirmek ve küçük ölçekli gerçekleştirmek için
optimizasyonlar. İşlev, bağlantılı her işlem zinciri için bir kez çağrılır.
"op_next" alanları; her bir yan zinciri işlemek için özyinelemeli olarak çağrılır. Bu
tek parametre olarak, zincirin başındaki operasyona bir işaretçi iletilir.
İşlem ağacını yerinde değiştirir.

Gözetleme deliği iyileştirici asla tamamen değiştirilmemelidir. Bunun yerine, kod ekleyin
mevcut optimize ediciyi sararak. Bunu yapmanın temel yolu şurada görülebilir:
Perlguts'ta "Derleme geçişi 3: gözetleme deliği optimizasyonu". Yeni kod isterse
boyunca değil, yalnızca bir alt yordamın en üst seviyesindeki operasyonlarda çalışın.
"PL_peepp" kancasını sarmak muhtemelen daha uygun olacaktır.

peep_t PL_rpeepp

PL_sv_no
Bu "yanlış" SV'dir. "PL_sv_yes" bölümüne bakın. Buna her zaman &PL_sv_no olarak bakın.

SV PL_sv_no

PL_sv_undef
Bu "undef" SV'dir. Bunu her zaman &PL_sv_undef olarak adlandırın.

SV PL_sv_undef

PL_sv_yes
Bu "gerçek" SV'dir. "PL_sv_no" bölümüne bakın. Buna her zaman &PL_sv_yes olarak bakın.

SV PL_sv_yes

regexp fonksiyonlar


Bir SV'den REGEXP almak için SvRX Kolaylık makrosu. Bu yaklaşık olarak eşdeğerdir
aşağıdaki snippet'e:

eğer (SvMAGICAL(sv))
mg_get(sv);
eğer (SvROK(sv))
sv = MUTABLE_SV(SvRV(sv));
eğer (SvTYPE(sv) == SVt_REGEXP)
dönüş (REGEXP*) sv;

Bir REGEXP* bulunamazsa NULL döndürülür.

REGEXP * SvRX(SV *sv)

SvRXOK SV'nin (ya da referans verdiğinin) bir boolean olup olmadığını gösteren bir boole döndürür.
REGEXP.

REGEXP* ile daha sonra bir şeyler yapmak istiyorsanız, bunun yerine SvRX'i kullanın ve kontrol edin.
BOŞ.

bool SvRXOK(SV* sv)

Yığın hile Makrolar


dMARK XSUB için bir yığın işaretleyici değişkeni "işareti" bildirin. "MARK" bölümüne bakın ve
"dORIGMARK".

dMARK;

DORİGMARK
XSUB için orijinal yığın işaretini kaydeder. "ORIGMARK" bölümüne bakın.

DORİGMARK;

dSP, "SP" aracılığıyla erişilebilen, XSUB için Perl'in yığın işaretçisinin yerel bir kopyasını bildirir
makro. "SP"ye bakın.

dSP;

EXTEND Bir XSUB'un dönüş değerleri için argüman yığınını genişletmek için kullanılır. Bir kez kullanıldı,
yığının üzerine itilecek en az "nitemler" için yer olduğunu garanti eder.

geçersiz EXTEND(SP, SSsize_t öğe)

XSUB için MARK Yığın işaretleyici değişkeni. "dMARK" bölümüne bakın.

mPUSHi Yığın üzerine bir tamsayı itin. Yığında bu öğe için yer olmalıdır. Yapmak
"TARG" kullanmayın. Ayrıca bkz. "PUSHi", "mXPUSHi" ve "XPUSHi".

geçersiz mPUSHi(IV iv)

mPUSHn Yığının üzerine bir duble itin. Yığında bu öğe için yer olmalıdır. Yapmak
"TARG" kullanmayın. Ayrıca bkz. "PUSHn", "mXPUSHn" ve "XPUSHn".

geçersiz mPUSHn(NV nv)

mPUSHp Yığın üzerine bir dize itin. Yığında bu öğe için yer olmalıdır. bu
"len", dizenin uzunluğunu belirtir. "TARG" kullanmaz. Ayrıca bkz. "PUSHp",
"mXPUSHp" ve "XPUSHp".

geçersiz mPUSHp(char* str, STRLEN len)

mPUSH'lar Bir SV'yi yığının üzerine itin ve SV'yi ölüme götürür. Yığın için yer olmalıdır
bu öğe. "TARG" kullanmaz. Ayrıca bkz. "PUSH'lar" ve "mXPUSH'lar".

geçersiz mPUSH'lar(SV* sv)

mPUSHu İşaretsiz bir tamsayı yığının üzerine itin. Yığın bunun için yer olmalı
öğe. "TARG" kullanmaz. Ayrıca bkz. "PUSHu", "mXPUSHu" ve "XPUSHu".

geçersiz mPUSHu(UV uv)

mXPUSHi Gerekirse yığını genişleterek yığının üzerine bir tamsayı itin. kullanmaz
"TARG". Ayrıca bkz. "XPUSHi", "mPUSHi" ve "PUSHi".

geçersiz mXPUSHi(IV iv)

mXPUSHn Gerekirse yığını uzatarak yığının üzerine bir duble itin. kullanmaz
"TARG". Ayrıca bkz. "XPUSHn", "mPUSHn" ve "PUSHn".

geçersiz mXPUSHn(NV nv)

mXPUSHp Gerekirse yığını genişleterek yığının üzerine bir dize itin. "len"
dizenin uzunluğunu gösterir. "TARG" kullanmaz. Ayrıca bkz. "XPUSHp",
"mPUSHp" ve "PUSHp".

geçersiz mXPUSHp(char* str, STRLEN len)

mXPUSH'lar Bir SV'yi yığının üzerine itin, gerekirse yığını genişletin ve SV'yi ölümcül hale getirin.
"TARG" kullanmaz. Ayrıca bkz. "XPUSH'lar" ve "mPUSH'lar".

geçersiz mXPUSH'lar(SV* sv)

mXPUSHu Gerekirse yığını genişleterek, işaretsiz bir tamsayı yığının üzerine itin. Yapmak
"TARG" kullanmayın. Ayrıca bkz. "XPUSHu", "mPUSHu" ve "PUSHu".

geçersiz mXPUSHu(UV uv)

ORİJMARK
XSUB için orijinal yığın işareti. Bkz. "dORIGMARK".

POPi Yığından bir tamsayı çıkar.

IV Popi

POPl Yığından uzun süre çıkar.

uzun POPl

POPn Yığından iki kat atlar.

NV POPn

POPp Yığından bir dize çıkarır.

karakter* POPp

POPpbyteks
Baytlardan, yani < 256 karakterden oluşması gereken bir dizeyi yığından çıkarır.

karakter* POPpbytex

POPpx Yığından bir dize çıkarır. POPp ile aynıdır. için iki isim var
tarihsel nedenler.

karakter* POPpx

POP'lar Yığından bir SV çıkarır.

SV* POP'lar

PUSHi Yığın üzerine bir tamsayı itin. Yığında bu öğe için yer olmalıdır.
'Ayarlama' sihrini işler. "TARG" kullanır, bu nedenle "dTARGET" veya "dXSTARG" çağrılmalıdır.
ilan et. Listeleri döndürmek için birden fazla "TARG" yönelimli makro çağırmayın.
XSUB'lar - bunun yerine "mPUSHi" bölümüne bakın. Ayrıca bkz. "XPUSHi" ve "mXPUSHi".

geçersiz PUSHi(IV iv)

itme işareti
Geri aramadaki bağımsız değişkenler için parantez açma. "GERİ ALMA" ve perlcall'a bakın.

geçersiz PUSHMARK(SP)

PUSHölümlü
Yığına yeni bir ölümlü SV itin. Yığında bu öğe için yer olmalıdır.
"TARG" kullanmaz. Ayrıca bkz. "PUSH'lar", "XPUSHmortal" ve "XPUSH'lar".

geçersiz PUSHmortal()

PUSHn Yığın üzerine bir duble itin. Yığında bu öğe için yer olmalıdır. kulplar
'set' büyüsü. "TARG" kullanır, bu nedenle bildirmek için "dTARGET" veya "dXSTARG" çağrılmalıdır.
BT. XSUB'lardan listeleri döndürmek için birden fazla "TARG" yönelimli makro çağırmayın - bkz.
Bunun yerine "mPUSHn". Ayrıca bkz. "XPUSHn" ve "mXPUSHn".

geçersiz PUSHn(NV nv)

PUSHp Yığın üzerine bir dize itin. Yığında bu öğe için yer olmalıdır. bu
"len", dizenin uzunluğunu belirtir. 'Ayarlama' sihrini işler. "TARG" kullanır, bu nedenle
Bunu bildirmek için "dTARGET" veya "dXSTARG" çağrılmalıdır. birden fazla arama
XSUB'lardan listeleri döndürmek için "TARG" odaklı makrolar - bunun yerine "mPUSHp" konusuna bakın. Görmek
ayrıca "XPUSHp" ve "mXPUSHp".

geçersiz PUSHp(char* str, STRLEN len)

PUSH'ler Bir SV'yi yığının üzerine itin. Yığında bu öğe için yer olmalıdır. Değil
'set' büyüsünü idare edin. "TARG" kullanmaz. Ayrıca bkz. "PUSHmortal", "XPUSH'lar" ve
"XPUSHölümlü".

geçersiz PUSH'ler(SV* sv)

PUSHu İşaretsiz bir tamsayı yığının üzerine itin. Yığın bunun için yer olmalı
öğe. 'Ayarlama' sihrini işler. "TARG" kullanır, bu nedenle "dTARGET" veya "dXSTARG" olmalıdır
ilan etmeye çağırdı. Listeleri döndürmek için birden fazla "TARG" yönelimli makro çağırmayın
XSUB'lardan - bunun yerine "mPUShu" bölümüne bakın. Ayrıca bkz. "XPUSHu" ve "mXPUSHu".

geçersiz PUSHu(UV uv)

PUTBACK XSUB bağımsız değişkenleri için kapanış braketi. Bu genellikle "xsubpp" tarafından gerçekleştirilir. Görmek
"PUSHMARK" ve diğer kullanımlar için perlcall.

GERİ KOY;

SP Yığın işaretçisi. Bu genellikle "xsubpp" tarafından gerçekleştirilir. "dSP" ve "SPAGAIN" bölümüne bakın.

SPAGAIN Yığın işaretçisini yeniden getirin. Geri aramadan sonra kullanılır. Perlcall'a bakın.

İSPANYA;

XPUSHi Yığın üzerine bir tamsayı itin, gerekirse yığını genişletin. 'Ayarla' kolları
büyü. "TARG" kullanır, bu nedenle bunu bildirmek için "dTARGET" veya "dXSTARG" çağrılmalıdır. Yapmak
XSUB'lardan listeleri döndürmek için birden fazla "TARG" yönelimli makro çağırmayın - bkz.
Bunun yerine "mXPUSHi". Ayrıca bkz. "PUSHi" ve "mPUSHi".

geçersiz XPUSHi(IV iv)

XPUSÖlümlü
Gerekirse yığını genişleterek yeni bir ölümlü SV'yi yığının üzerine itin. Değil
"TARG" kullanın. Ayrıca bkz. "XPUSH'lar", "PUSHmortal" ve "PUSH'lar".

geçersiz XPUSHmortal()

XPUSHn Gerekirse yığını uzatarak yığının üzerine bir çift itin. 'Ayarla' kolları
büyü. "TARG" kullanır, bu nedenle bunu bildirmek için "dTARGET" veya "dXSTARG" çağrılmalıdır. Yapmak
XSUB'lardan listeleri döndürmek için birden fazla "TARG" yönelimli makro çağırmayın - bkz.
Bunun yerine "mXPUSHn". Ayrıca bkz. "PUSHn" ve "mPUSHn".

geçersiz XPUSHn(NV nv)

XPUSHp Gerekirse yığını genişleterek yığının üzerine bir dize itin. "len"
dizenin uzunluğunu gösterir. 'Ayarlama' sihrini işler. "TARG" kullanır, bu nedenle
Bunu bildirmek için "dTARGET" veya "dXSTARG" çağrılmalıdır. birden fazla arama
XSUB'lardan listeleri döndürmek için "TARG" odaklı makrolar - bunun yerine "mXPUSHp" bölümüne bakın. Görmek
ayrıca "PUSHp" ve "mPUSHp".

geçersiz XPUSHp(char* str, STRLEN len)

XPUSH'ler Gerekirse yığını genişleterek yığının üzerine bir SV itin. işlemez
'set' büyüsü. "TARG" kullanmaz. Ayrıca bkz. "XPUSHmortal", "PUSH'lar" ve
"PUSHmortal".

geçersiz XPUSH'ler(SV* sv)

XPUSHu İşaretsiz bir tamsayı yığının üzerine itin, gerekirse yığını genişletin.
'Ayarlama' sihrini işler. "TARG" kullanır, bu nedenle "dTARGET" veya "dXSTARG" çağrılmalıdır.
ilan et. Listeleri döndürmek için birden fazla "TARG" yönelimli makro çağırmayın.
XSUB'lar - bunun yerine "mXPUSHu" bölümüne bakın. Ayrıca bkz. "PUSHu" ve "mPUSHu".

geçersiz XPUSHu(UV uv)

XSGERİ DÖNÜŞ
Yığındaki öğelerin sayısını gösteren XSUB'dan dönüş. Bu genellikle
"xsubpp" tarafından işlenir.

geçersiz XSRETURN(int nitems)

XSRETURN_BOŞ
Hemen bir XSUB'dan boş bir liste döndürün.

XSRETURN_BOŞ;

XSRETURN_IV
Hemen bir XSUB'dan bir tamsayı döndürün. "XST_mIV" kullanır.

geçersiz XSRETURN_IV(IV iv)

XSRETURN_NO
Hemen bir XSUB'dan &PL_sv_no döndürün. "XST_mNO" kullanır.

XSRETURN_NO;

XSRETURN_NV
Hemen bir XSUB'dan bir double döndürün. "XST_mNV" kullanır.

geçersiz XSRETURN_NV(NV nv)

XSRETURN_PV
Derhal bir XSUB'dan bir dizenin bir kopyasını döndürün. "XST_mPV" kullanır.

geçersiz XSRETURN_PV(char* str)

XSRETURN_UNDEF
Hemen bir XSUB'dan &PL_sv_undef döndürün. "XST_mUNDEF" kullanır.

XSRETURN_UNDEF;

XSRETURN_UV
Hemen bir XSUB'dan bir tamsayı döndürün. "XST_mUV" kullanır.

geçersiz XSRETURN_UV(IV uv)

XSRETURN_EVET
Hemen bir XSUB'dan &PL_sv_yes döndürün. "XST_mYES" kullanır.

XSRETURN_EVET;

XST_mIV Yığın üzerinde belirtilen "pos" konumuna bir tamsayı yerleştirin. değer
yeni bir ölümlü SV'de saklanır.

geçersiz XST_mIV(int konum, IV iv)

XST_mNO &PL_sv_no'yu yığında belirtilen "konum" konumuna yerleştirin.

geçersiz XST_mNO(int konum)

XST_mNV Yığın üzerinde belirtilen "konum" konumuna bir çift yerleştirin. değer
yeni bir ölümlü SV'de saklanır.

geçersiz XST_mNV(int konum, NV nv)

XST_mPV Bir dizenin bir kopyasını yığında belirtilen "konum" konumuna yerleştirin. bu
değer yeni bir ölümlü SV'de saklanır.

geçersiz XST_mPV(int konum, karakter* dizgi)

XST_mUNDEF
&PL_sv_undef'i yığında belirtilen "konum" konumuna yerleştirin.

geçersiz XST_mUNDEF(int konum)

XST_mEVET
&PL_sv_yes öğesini yığında belirtilen "konum" konumuna yerleştirin.

geçersiz XST_mYES(int konum)

SV Bayraklar


svtype Perl türleri için bir bayrak listesi. Bunlar dosyada bulunur sv.h "svtype" içinde
Sıralama. Bu bayrakları "SvTYPE" makrosu ile test edin.

Türler şunlardır:

SVt_NULL
SVt_IV
SVt_NV
SVt_RV
SVt_PV
SVt_PVIV
SVt_PVNV
SVt_PVMG
SVt_INVLIST
SVt_REGEXP
SVt_PVGV
SVt_PVLV
SVt_PVAV
SVt_PVHV
SVt_PVCV
SVt_PVFM
SVt_PVIO

Bunlar en kolay aşağıdan yukarıya açıklanır.

SVt_PVIO, G/Ç nesneleri içindir, formatlar için SVt_PVFM, alt rutinler için SVt_PVCV,
Karmalar için SVt_PVHV ve diziler için SVt_PVAV.

Diğerleri skaler tiplerdir, yani bir "$" ile bağlanabilen şeylerdir.
değişken. Bunlar için, dahili tipler çoğunlukla
Perl dili.

Bu nedenle, "SvTYPE(sv) < SVt_PVAV" öğesinin kontrol edilmesi, bir şey olup olmadığını görmenin en iyi yoludur.
bir skalerdir.

SVt_PVGV bir typeglob'u temsil eder. Eğer !SvFAKE(sv), o zaman gerçek, zorlanamaz
tip küresi. SvFAKE(sv) ise, bir typeglob'un skalerdir
atandı. Tekrar atamak, typeglob olmasını durduracaktır. SVt_PVLV
perde arkasında başka bir skalere atanan bir skaleri temsil eder. Bu
örneğin, "substr" dönüş değeri için ve bağlı karma ve dizi öğeleri için kullanılır.
Typeglob dahil herhangi bir skaler değeri tutabilir. SVt_REGEXP normal içindir
ifade. SVt_INVLIST, yalnızca Perl çekirdeğinin dahili kullanımı içindir.

SVt_PVMG, "normal" bir skaleri temsil eder (bir typeglob, normal ifade veya
temsilci). Çoğu skaler bir PVMG'nin tüm iç alanlarına ihtiyaç duymadığından,
mümkün olduğunda daha küçük yapılar ayırarak bellekten tasarruf edin. Diğer tüm türler
daha az dahili alana sahip daha basit SVt_PVMG biçimleri.
SVt_NULL yalnızca undef tutabilir. SVt_IV undef, bir tamsayı veya bir referans tutabilir.
(SVt_RV, geriye dönük uyumluluk için var olan SVt_IV için bir takma addır.) SVt_NV
bunlardan herhangi birini veya bir çift tutabilir. SVt_PV yalnızca undef veya bir dize tutabilir.
SVt_PVIV, SVt_PV ve SVt_IV'nin bir üst kümesidir. SVt_PVNV benzerdir. SVt_PVMG olabilir
SVt_PVNV'nin tutabileceği her şeyi tutun, ancak kutsanabilir, ancak kutsanması gerekmez veya
büyülü.

SVt_INVLIST
Skaler için bayrak yazın. Bkz. "svtype".

SVt_IV Skaler için bayrak yazın. Bkz. "svtype".

SVt_NULL
Skaler için bayrak yazın. Bkz. "svtype".

SVt_NV Skaler için bayrak yazın. Bkz. "svtype".

SVt_PV Skaler için tip bayrak. Bkz. "svtype".

SVt_PVAV
Diziler için bayrak yazın. Bkz. "svtype".

SVt_PVCV
Alt programlar için bayrak yazın. Bkz. "svtype".

SVt_PVFM
Biçimler için bayrak yazın. Bkz. "svtype".

SVt_PVGV
Typeglob'lar için bayrak yazın. Bkz. "svtype".

SVt_PVHV
Karmalar için bayrak yazın. Bkz. "svtype".

SVt_PVIO
G/Ç nesneleri için bayrak yazın. Bkz. "svtype".

SVt_PVIV
Skaler için bayrak yazın. Bkz. "svtype".

SVt_PVLV
Skaler için bayrak yazın. Bkz. "svtype".

SVt_PVMG
Skaler için bayrak yazın. Bkz. "svtype".

SVt_PVNV
Skaler için bayrak yazın. Bkz. "svtype".

SVt_REGEXP
Normal ifadeler için bayrak yazın. Bkz. "svtype".

SV hile fonksiyonlar


boolSV "b" gerçek bir değerse gerçek bir SV, "b" 0 ise yanlış bir SV döndürür.

Ayrıca bkz. "PL_sv_yes" ve "PL_sv_no".

SV * boolSV(boolb)

croak_xs_usage
xsubs için kullanım mesajını yaymak için özel bir "croak()" çeşidi

croak_xs_usage(cv, "eee_yow");

"cv" den paket adını ve alt program adını hesaplar ve ardından aramalar
"şaka()". Dolayısıyla, "cv" &ouch::awk ise, "croak"ı şu şekilde çağırır:

Perl_croak(aTHX_ "Kullanım: %"SVf"::%"SVf"(%s)", "ah" "awk",
"eee_yow");

geçersiz croak_xs_usage(const CV *const cv,
const char *const parametreleri)

get_sv Belirtilen Perl skalerinin SV'sini döndürür. "bayraklar", "gv_fetchpv"ye geçirilir.
"GV_ADD" ayarlanmışsa ve Perl değişkeni yoksa yaratılacaktır.
"bayraklar" sıfırsa ve değişken yoksa NULL döndürülür.

NOT: bu işlevin perl_ biçimi kullanımdan kaldırılmıştır.

SV* get_sv(const char *name, I32 bayrakları)

yeniRV_inc
Bir SV için bir RV sarmalayıcısı oluşturur. Orijinal SV için referans sayısı
arttı.

SV* yeniRV_inc(SV* sv)

yeniSVpadname
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Pad adını içeren yeni bir SV oluşturur.

SV* yeniSVpadadı(PADNAME *pn)

yeniSVpvn_utf8
Yeni bir SV oluşturur ve bir dize kopyalar ("NUL" ("\0") karakterleri içerebilir)
bunun içine. utf8 doğruysa, yeni SV'de "SvUTF8_on" öğesini çağırır. olarak uygulandı
"newSVpvn_flags" etrafına sarıcı.

SV* newSVpvn_utf8(NULLOK const karakter* s, STRLEN len,
U32 UTF8)

SvCUR SV'deki dizenin uzunluğunu döndürür. Bkz. "SvLEN".

STRLEN SvCUR(SV* sv)

SvCUR_set
SV'deki dizenin geçerli uzunluğunu ayarlayın. Bkz. "SvCUR" ve
"SvIV_set".

geçersiz SvCUR_set(SV* sv, STRLEN len)

SvEND Dizedeki son karakterden hemen sonraki noktaya bir işaretçi döndürür.
Genellikle sonunda bir "NUL" karakterinin olduğu SV'de (Perl
skaler kesin olarak gerektirmez). Bkz. "SvCUR". Karaktere şu şekilde erişin:
*(SvEND(sv)).

Uyarı: "SvCUR", "SvLEN"e eşitse, "SvEND" ayrılmamışı gösterir.
bellek.

karakter* SvEND(SV* sv)

SvGAMAGIC
SV sihir alırsa veya aşırı yüklenirse true döndürür. Her ikisi de doğruysa, o zaman
skaler aktif veridir ve her veri girişinde yeni bir değer döndürme potansiyeline sahiptir.
erişilir. Bu nedenle, mantıksal olarak kullanıcı başına yalnızca bir kez okumaya dikkat etmelisiniz.
işlem ve bu döndürülen değerle çalışın. İkisi de doğru değilse, o zaman skaler
değer yazılmadıkça değişemez.

U32 SvGAMAGIC(SV* sv)

SvGROW SV'deki karakter arabelleğini, belirtilenler için yer olacak şekilde genişletir.
bayt sayısı (sondaki fazladan bir "NUL" karakteri için yer ayırmayı unutmayın).
Gerekirse genişletmeyi gerçekleştirmek için "sv_grow"u çağırır. için bir işaretçi döndürür
karakter arabelleği. SV, >= SVt_PV türünde olmalıdır. Bir alternatif aramaktır
SV türünden emin değilseniz "sv_grow".

karakter * SvGROW(SV* sv, STRLEN len)

SvIOK SV'nin bir tamsayı içerip içermediğini gösteren bir U32 değeri döndürür.

U32 SvIOK(SV* sv)

SvIOKp SV'nin bir tamsayı içerip içermediğini gösteren bir U32 değeri döndürür. kontrol eder
özel ayar. Bunun yerine "SvIOK" kullanın.

U32 SvIOKp(SV* sv)

SvIOK_notUV
SV'nin işaretli bir tamsayı içerip içermediğini gösteren bir boole döndürür.

bool SvIOK_notUV(SV* sv)

SvIOK_off
Bir SV'nin IV durumunu ayarlar.

geçersiz SvIOK_off(SV* sv)

SvIOK_on
Bir SV'ye bunun bir tamsayı olduğunu söyler.

geçersiz SvIOK_on(SV* sv)

Yalnızca SvIOK_
Bir SV'ye bunun bir tamsayı olduğunu söyler ve diğer tüm OK bitlerini devre dışı bırakır.

geçersiz SvIOK_only(SV* sv)

SvIOK_only_UV
Bir SV'ye bunun işaretsiz bir tamsayı olduğunu söyler ve diğer tüm OK bitlerini devre dışı bırakır.

geçersiz SvIOK_only_UV(SV* sv)

SvIOK_UV
SV'nin olması gereken bir tamsayı içerip içermediğini gösteren bir boole döndürür
imzasız olarak yorumlanır. Değeri aralık içinde olan negatif olmayan bir tam sayı
Hem IV hem de UV'nin her ikisi de SvUOK veya SVIOK olarak işaretlenebilir.

bool SvIOK_UV(SV* sv)

SvIsCOW SV'nin Yazma Üzerine Kopyalama olup olmadığını belirten bir U32 değeri döndürür (ya paylaşılan karma
anahtar skaler veya 5.9.0 COW için yapılandırılmışsa tam Copy On Write skaler).

U32 SvIsCOW(SV* sv)

SvIsCOW_shared_hash
SV'nin Yazma Üzerine Kopyalama paylaşılan karma anahtarı olup olmadığını belirten bir boole döndürür
skaler.

bool SvIsCOW_shared_hash(SV* sv)

SvIV Verilen SV'yi bir tamsayıya zorlar ve döndürür. Bir sürüm için "SvIVx"e bakın
bu, sv'yi yalnızca bir kez değerlendirmeyi garanti eder.

IV SvIV(SV* sv)

SvIVX Kontroller veya dönüştürmeler olmadan SV'nin IV yuvasındaki ham değeri döndürür. Sadece
SvIOK'un doğru olduğundan emin olduğunuzda kullanın. Ayrıca bkz. "SvIV()".

IV SvIVX(SV* sv)

SvIVx Verilen SV'yi bir tamsayıya zorlar ve döndürür. "sv" değerlendirme garantisi
sadece bir kere. Bunu yalnızca "sv" yan etkileri olan bir ifadeyse kullanın, aksi takdirde
daha verimli "SvIV" kullanın.

IV SvIVx(SV* sv)

SvIV_nomg
"SvIV" gibi ama sihri işlemez.

IV SvIV_nomg(SV* sv)

SvIV_set
IV işaretçisinin değerini sv'de val olarak ayarlayın. Aynı işlemi gerçekleştirmek mümkün
"SvIVX"e bir değer ataması ile bu makronun işlevi. Gelecekteki Perls ile,
ancak, değer yerine "SvIV_set" kullanmak daha verimli olacaktır.
"SvIVX"e atama.

geçersiz SvIV_set(SV* sv, IV değeri)

SvLEN Herhangi bir parçayı içermeyen SV'deki dize arabelleğinin boyutunu döndürür
"SvOOK" ile ilişkilendirilebilir. Bkz. "SvCUR".

STRLEN SvLEN(SV* sv)

SvLEN_set
SV'deki dizenin gerçek uzunluğunu ayarlayın. Bkz. "SvIV_set".

geçersiz SvLEN_set(SV* sv, STRLEN len)

SvMAGIC_set
MAGIC işaretçisinin sv içindeki değerini val olarak ayarlayın. Bkz. "SvIV_set".

geçersiz SvMAGIC_set(SV* sv, MAGIC* val)

SvNIOK SV'nin bir sayı, tam sayı veya tam sayı içerip içermediğini gösteren bir U32 değeri döndürür.
çift.

U32 SvNIOK(SV* sv)

SvNIOKp SV'nin bir sayı, tam sayı veya tam sayı içerip içermediğini gösteren bir U32 değeri döndürür.
çift. kontrol eder özel ayar. Bunun yerine "SvNIOK" kullanın.

U32 SvNIOKp(SV* sv)

SvNIOK_kapalı
Bir SV'nin NV/IV durumunu ayarlar.

geçersiz SvNIOK_off(SV* sv)

SvNOK SV'nin bir çift içerip içermediğini gösteren bir U32 değeri döndürür.

U32 SvNOK(SV* sv)

SvNOKp SV'nin bir çift içerip içermediğini gösteren bir U32 değeri döndürür. kontrol eder
özel ayar. Bunun yerine "SvNOK" kullanın.

U32 SvNOKp(SV* sv)

SvNOK_kapalı
Bir SV'nin NV durumunu ayarlar.

geçersiz SvNOK_off(SV* sv)

SvNOK_on
Bir SV'ye bunun bir double olduğunu söyler.

geçersiz SvNOK_on(SV* sv)

Yalnızca SvNOK_
Bir SV'ye bunun bir double olduğunu söyler ve diğer tüm OK bitlerini devre dışı bırakır.

geçersiz SvNOK_only(SV* sv)

SvNV Verilen SV'yi iki katına zorlayın ve döndürün. olan bir sürüm için "SvNVx"e bakın.
sv'yi yalnızca bir kez değerlendirmeyi garanti eder.

NV SvNV(SV* sv)

SvNVX Kontroller veya dönüştürmeler olmadan SV'nin NV yuvasındaki ham değeri döndürür. Sadece
SvNOK'un doğru olduğundan emin olduğunuzda kullanın. Ayrıca bkz. "SvNV()".

NV SvNVX(SV* sv)

SvNVx Verilen SV'yi iki katına zorlar ve döndürür. Yalnızca "sv"yi değerlendirme garantisi
bir Zamanlar. Bunu yalnızca "sv" yan etkileri olan bir ifadeyse kullanın, aksi takdirde
daha verimli "SvNV".

NV SvNVx(SV* sv)

SvNV_nomg
"SvNV" gibi ama sihri işlemez.

NV SvNV_nomg(SV* sv)

SvNV_set
NV işaretçisinin değerini sv'de val olarak ayarlayın. Bkz. "SvIV_set".

geçersiz SvNV_set(SV* sv, NV değeri)

SvOK Değerin tanımlanıp tanımlanmadığını gösteren bir U32 değeri döndürür. Bu sadece
skalerler için anlamlıdır.

U32 SvOK(SV* sv)

SvOOK Dize arabelleğine yönelik işaretçinin ofset olup olmadığını gösteren bir U32 döndürür. Bu
hack, bir işlemin başlangıcından itibaren karakterlerin kaldırılmasını hızlandırmak için dahili olarak kullanılır.
SvPV. SvOOK true olduğunda, tahsis edilen dize arabelleğinin başlangıcı
aslında SvPVX'ten önce "SvOOK_offset()" bayt. Bu ofset, eskiden
SvIVX, ancak şimdi arabelleğin yedek parçası içinde saklanıyor.

U32 SvOOK(SV* sv)

SvOOK_offset
içine okur len SvPVX'ten tahsis edilenin gerçek başlangıcına kadar olan mahsup
etkin bir şekilde kaldırmak için "sv_chop" kullanılmışsa sıfır olmayan arabellek
arabelleğin başlangıcından itibaren karakterler. Bir makro olarak uygulanan,
Adresi len"STRLEN" türünde olmalıdır. değerlendirir sv birden fazla.
Setler len "SvOOK(sv)" yanlışsa 0'a.

geçersiz SvOOK_offset(NN SV*sv, STRLEN len)

SvPOK SV'nin bir karakter dizisi içerip içermediğini gösteren bir U32 değeri döndürür.

U32 SvPOK(SV* sv)

SvPOKp SV'nin bir karakter dizisi içerip içermediğini gösteren bir U32 değeri döndürür. Çekler
the özel ayar. Bunun yerine "SvPOK" kullanın.

U32 SvPOKp(SV* sv)

SvPOK_kapalı
Bir SV'nin PV durumunu ayarlar.

geçersiz SvPOK_off(SV* sv)

SvPOK_on
Bir SV'ye bunun bir dize olduğunu söyler.

geçersiz SvPOK_on(SV* sv)

Yalnızca SvPOK_
Bir SV'ye bunun bir dize olduğunu söyler ve diğer tüm OK bitlerini devre dışı bırakır. Ayrıca dönecek
UTF-8 durumu kapalı.

geçersiz SvPOK_only(SV* sv)

SvPOK_only_UTF8
Bir SV'ye bunun bir dize olduğunu söyler ve diğer tüm OK bitlerini devre dışı bırakır ve
UTF-8 durumu olduğu gibi.

geçersiz SvPOK_only_UTF8(SV* sv)

SvPV SV'deki dizeye bir işaretçi veya eğer
SV bir dize içermez. SV, dizi haline getirilmiş sürümü önbelleğe alabilir.
"SvPOK". 'Al' sihrini işler. "len" değişkeni, uzunluğuna ayarlanacaktır.
dize (bu bir makrodur, bu nedenle &len kullanmayın). Bir sürüm için ayrıca bkz. "SvPVx"
bu, sv'yi yalnızca bir kez değerlendirmeyi garanti eder.

"SvPV()" dönüş değerinin şuna eşit olduğuna dair bir garanti olmadığını unutmayın.
"SvPVX(sv)" veya "SvPVX(sv)" geçerli veriler içeriyor veya art arda
"SvPV(sv)", her seferinde aynı işaretçi değerini döndürür. Bu yol nedeniyle
aşırı yükleme ve Yazma Üzerine Kopyalama gibi şeyler işlenir. Bu durumlarda,
dönüş değeri geçici bir arabelleğe veya benzerine işaret edebilir. kesinlikle ihtiyacınız varsa
SvPVX alanının geçerli olması için (örneğin, bu alana yazmayı düşünüyorsanız), ardından bkz.
"SvPV_force".

karakter* SvPV(SV* sv, STRLEN len)

SvPVbayt
"SvPV" gibi, ancak gerekirse önce sv'yi bayt temsiline dönüştürür.

karakter* SvPVbyte(SV* sv, STRLEN len)

SvPVbytex
"SvPV" gibi, ancak gerekirse önce sv'yi bayt temsiline dönüştürür.
sv'yi yalnızca bir kez değerlendirmeyi garanti eder; aksi takdirde daha verimli "SvPVbyte" kullanın.

karakter* SvPVbytex(SV* sv, STRLEN len)

SvPVbytex_force
"SvPV_force" gibi, ancak gerekirse önce sv'yi bayt temsiline dönüştürür.
sv'yi yalnızca bir kez değerlendirmeyi garanti eder; daha verimli "SvPVbyte_force" kullanın
aksi takdirde.

char* SvPVbytex_force(SV* sv, STRLEN len)

SvPVbyte_force
"SvPV_force" gibi, ancak gerekirse önce sv'yi bayt temsiline dönüştürür.

char* SvPVbyte_force(SV* sv, STRLEN len)

SvPVbyte_nolen
"SvPV_nolen" gibi, ancak gerekirse önce sv'yi bayt temsiline dönüştürür.

karakter* SvPVbyte_nolen(SV* sv)

SvPVutf8
"SvPV" gibi, ancak gerekirse önce sv'yi utf8'e dönüştürür.

karakter* SvPVutf8(SV* sv, STRLEN len)

SvPVutf8x
"SvPV" gibi, ancak gerekirse önce sv'yi utf8'e dönüştürür. Değerlendirilecek garantiler
sv sadece bir kez; aksi takdirde daha verimli "SvPVutf8" kullanın.

karakter* SvPVutf8x(SV* sv, STRLEN len)

SvPVutf8x_force
"SvPV_force" gibi, ancak gerekirse önce sv'yi utf8'e dönüştürür. garantiler
sv'yi yalnızca bir kez değerlendirin; aksi takdirde daha verimli "SvPVutf8_force" kullanın.

char* SvPVutf8x_force(SV* sv, STRLEN len)

SvPVutf8_force
"SvPV_force" gibi, ancak gerekirse önce sv'yi utf8'e dönüştürür.

char* SvPVutf8_force(SV* sv, STRLEN len)

SvPVutf8_nolen
"SvPV_nolen" gibi, ancak gerekirse önce sv'yi utf8'e dönüştürür.

karakter* SvPVutf8_nolen(SV* sv)

SvPVX SV'deki fiziksel dizeye bir işaretçi döndürür. SV bir dize içermelidir.
5.9.3'ten önce, SV'nin türü >= olmadıkça bu makroyu yürütmek güvenli değildir.
SVt_PV.

Bu aynı zamanda otomatik olarak yüklenen bir alt programın adını bir XS AUTOLOAD'da saklamak için kullanılır.
rutin. Perlguts'ta "XSUB'larla Otomatik Yükleme" konusuna bakın.

karakter* SvPVX(SV* sv)

SvPVx "sv"yi yalnızca bir kez değerlendirmeyi garanti eden "SvPV" sürümü. Bunu yalnızca şu durumlarda kullanın:
"sv" yan etkileri olan bir ifadedir, aksi takdirde daha verimli olan "SvPV"yi kullanın.

karakter* SvPVx(SV* sv, STRLEN len)

SvPV_force
"SvPV" gibi, ancak SV'yi bir dize ("SvPOK") içermeye zorlar ve yalnızca
dize ("yalnızca SvPOK_"), kanca veya sahtekar tarafından. gideceksen güce ihtiyacın var
"SvPVX" i doğrudan güncelleyin. Süreçler sihir alır.

Rastgele bir skaleri düz bir PV'ye zorlamanın potansiyel olarak sıyıracağını unutmayın.
ondan faydalı veriler. Örneğin, SV "SvROK" ise, referans
referans sayısının azaltılmasını sağlayın ve SV'nin kendisi bir
" gibi bir değer içeren bir dize arabelleğine sahip "SvPOK" skalerDİZİ(0x1234)".

char* SvPV_force(SV* sv, STRLEN len)

SvPV_force_nomg
"SvPV_force" gibi, ancak işlem sihir almıyor.

char* SvPV_force_nomg(SV* sv, STRLEN len)

SvPV_nolen
"SvPV" gibi ama bir uzunluk değişkeni ayarlamaz.

karakter* SvPV_nolen(SV* sv)

SvPV_nomg
"SvPV" gibi ama sihri işlemez.

char* SvPV_nomg(SV* sv, STRLEN len)

SvPV_nomg_nolen
"SvPV_nolen" gibi ama büyü işlemez.

karakter* SvPV_nomg_nolen(SV* sv)

SvPV_set
Muhtemelen kullanmak istediğin şey bu değil, muhtemelen "sv_usepvn_flags" istedin.
veya "sv_setpvn" veya "sv_setpvs".

"sv" içindeki PV işaretçisinin değerini Perl'e tahsis edilen "NUL" ile sonlandırılmış olarak ayarlayın
"val" dizisi. Ayrıca bkz. "SvIV_set".

Önceki PV arabelleğini boşaltmayı unutmayın. Kontrol edilecek çok şey var. Dikkat
mevcut işaretçinin yazma üzerine kopyalama veya diğer yaramazlıklara karışmış olabileceğini, bu nedenle
"SvOOK_off(sv)" yapın ve "sv_force_normal" veya "SvPV_force" kullanın (veya SvIsCOW'u kontrol edin
flag) önce bu değişikliğin güvenli olduğundan emin olmak için. O zaman son olarak, eğer bir değilse
COW, önceki PV arabelleğini boşaltmak için "SvPV_free" arayın.

geçersiz SvPV_set(SV* sv, karakter* değer)

SvREFCNT
Nesnenin başvuru sayısının değerini döndürür.

U32 SvREFCNT(SV* sv)

SvREFCNT_dec
Verilen SV'nin referans sayısını azaltır. sv NULL olabilir.

geçersiz SvREFCNT_dec(SV* sv)

SvREFCNT_dec_NN
SvREFCNT_dec ile aynıdır, ancak yalnızca biliyorsanız kullanılabilir sv NULL değil. Bizden beri
NULL'luğu kontrol etmenize gerek yok, daha hızlı ve daha küçük.

geçersiz SvREFCNT_dec_NN(SV* sv)

SvREFCNT_inc
Verilen SV'nin referans sayısını artırarak SV'yi döndürür.

Aşağıdaki SvREFCNT_inc* makrolarının tümü, SvREFCNT_inc'in optimize edilmiş sürümleridir,
ve SvREFCNT_inc ile değiştirilebilir.

SV* SvREFCNT_inc(SV* sv)

SvREFCNT_inc_NN
SvREFCNT_inc ile aynıdır, ancak yalnızca biliyorsanız kullanılabilir sv NULL değil. Bizden beri
NULL'luğu kontrol etmenize gerek yok, daha hızlı ve daha küçük.

SV* SvREFCNT_inc_NN(SV* sv)

SvREFCNT_inc_simple
SvREFCNT_inc ile aynıdır, ancak yalnızca yan etkisi olmayan ifadelerle kullanılabilir.
Geçici bir değer saklamamız gerekmediğinden daha hızlıdır.

SV* SvREFCNT_inc_simple(SV* sv)

SvREFCNT_inc_simple_NN
SvREFCNT_inc_simple ile aynıdır, ancak yalnızca biliyorsanız kullanılabilir sv NULL değil.
NULL'luğu kontrol etmemiz gerekmediğinden, daha hızlı ve daha küçüktür.

SV* SvREFCNT_inc_simple_NN(SV* sv)

SvREFCNT_inc_simple_void
SvREFCNT_inc_simple ile aynıdır, ancak yalnızca iadeye ihtiyacınız yoksa kullanılabilir
değer. Makronun anlamlı bir değer döndürmesi gerekmez.

geçersiz SvREFCNT_inc_simple_void(SV* sv)

SvREFCNT_inc_simple_void_NN
SvREFCNT_inc ile aynıdır, ancak yalnızca dönüş değerine ihtiyacınız yoksa kullanılabilir ve
bunu biliyorsun sv NULL değil. Makronun anlamlı bir değer döndürmesi gerekmez
değer veya NULL olup olmadığını kontrol edin, böylece daha küçük ve daha hızlı olur.

geçersiz SvREFCNT_inc_simple_void_NN(SV* sv)

SvREFCNT_inc_void
SvREFCNT_inc ile aynıdır, ancak yalnızca dönüş değerine ihtiyacınız yoksa kullanılabilir.
Makronun anlamlı bir değer döndürmesi gerekmez.

geçersiz SvREFCNT_inc_void(SV* sv)

SvREFCNT_inc_void_NN
SvREFCNT_inc ile aynıdır, ancak yalnızca dönüş değerine ihtiyacınız yoksa kullanılabilir ve
bunu biliyorsun sv NULL değil. Makronun anlamlı bir değer döndürmesi gerekmez
değer veya NULL olup olmadığını kontrol edin, böylece daha küçük ve daha hızlı olur.

geçersiz SvREFCNT_inc_void_NN(SV* sv)

SvROK SV'nin bir RV olup olmadığını test eder.

U32 SvROK(SV* sv)

SvROK_kapalı
Bir SV'nin RV durumunu ayarlar.

geçersiz SvROK_off(SV* sv)

SvROK_on
Bir SV'ye bunun bir RV olduğunu söyler.

geçersiz SvROK_on(SV* sv)

SvRV, SV'yi döndürmek için bir RV'ye başvurur.

SV* SvRV(SV* sv)

SvRV_set
RV işaretçisinin değerini sv'de val olarak ayarlayın. Bkz. "SvIV_set".

geçersiz SvRV_set(SV* sv, SV* val)

SvSTASH SV'nin zulasını döndürür.

YG* SvSTASH(SV* sv)

SvSTASH_set
STASH işaretçisinin değerini sv'de val olarak ayarlayın. Bkz. "SvIV_set".

geçersiz SvSTASH_set(SV* sv, HV* val)

SvTAINT Lekeleme etkinleştirilmişse ve geçerli ifadeye bazı girdiler varsa bir SV'yi Lekeler
kusurludur - genellikle bir değişkendir, ancak muhtemelen yerel ayar gibi örtük girdiler de
ayarlar. "SvTAINT", bu kusurluluğu bir ifadenin çıktılarına yayar
karamsar bir şekilde; yani, tam olarak hangisine dikkat etmeden
çıktılar hangi girdilerden etkilenir.

geçersiz SvTAINT(SV* sv)

SvTAINTED
Bir SV'nin kusurlu olup olmadığını kontrol eder. Varsa DOĞRU, değilse YANLIŞ döndürür.

bool SvTAINTED(SV* sv)

SvTAINTED_kapalı
Bir SV'yi bozar. olmak çok bazılarını kısa devre yaptığı için bu rutine dikkat edin.
Perl'in temel güvenlik özellikleri. XS modülü yazarları bunu kullanmamalıdır
koşulsuz olarak tüm etkilerini tam olarak anlamadıkça işlev görürler.
değerini bozma. Untainting, standart perl tarzında yapılmalıdır.
doğrudan bozulmayan değişkenler yerine özenle hazırlanmış bir normal ifade.

geçersiz SvTAINTED_off(SV* sv)

SvTAINTED_on
Lekeleme etkinse bir SV'yi kusurlu olarak işaretler.

geçersiz SvTAINTED_on(SV* sv)

SvTRUE Perl'in SV'yi doğru mu yoksa yanlış mı değerlendireceğini belirten bir boole döndürür.
Yerimizi SvOK() tanımlı/tanımsız bir test için. Skaler olmadıkça 'al' sihrini işler
zaten SvPOK, SvIOK veya SvNOK (özel bayraklar değil, genel).

bool SvTRUE(SV* sv)

SvTRUE_nomg
Perl'in SV'yi doğru mu yoksa yanlış mı değerlendireceğini belirten bir boole döndürür.
Yerimizi SvOK() tanımlı/tanımsız bir test için. 'Al' büyüsünü işlemez.

bool SvTRUE_nomg(SV* sv)

SvTYPE SV'nin türünü döndürür. Bkz. "svtype".

svtype SvTYPE(SV* sv)

SvUOK SV'nin olması gereken bir tamsayı içerip içermediğini gösteren bir boole döndürür.
imzasız olarak yorumlanır. Değeri aralık içinde olan negatif olmayan bir tam sayı
Hem IV hem de UV'nin her ikisi de SvUOK veya SVIOK olarak işaretlenebilir.

bool SvUOK(SV* sv)

YÜKSELTME
Bir SV'yi daha karmaşık bir forma yükseltmek için kullanılır. gerçekleştirmek için "sv_upgrade" kullanır.
gerekirse yükseltin. Bkz. "svtype".

void SvUPGRADE(SV* sv, svtype türü)

SvUTF8 Bir SV'nin UTF-32 durumunu gösteren bir U8 değeri döndürür. Eğer işler kurulursa
bu, SV'nin UTF-8 kodlu veri içerip içermediğini gösterir. Sen
bunu kullanmalı sonra bir çağrı SvPV() veya herhangi bir çağrı olması durumunda varyantlarından biri
dize aşırı yüklemesi dahili bayrağı günceller.

Bayt pragmasını hesaba katmak istiyorsanız, bunun yerine "DO_UTF8" kullanın.

U32 SvUTF8(SV* sv)

SvUTF8_off
Bir SV'nin UTF-8 durumunu ayarlar (veriler değişmez, yalnızca bayrak değişir). Yapma
kibarca kullanın.

geçersiz SvUTF8_off(SV *sv)

SvUTF8_on
Bir SV'nin UTF-8 durumunu açın (veriler değişmez, yalnızca bayrak). Yapmak
boşuna kullanmayın.

geçersiz SvUTF8_on(SV *sv)

SvUV Verilen SV'yi işaretsiz bir tamsayıya zorlar ve onu döndürür. için bkz. "SvUVx"
sv'yi yalnızca bir kez değerlendirmeyi garanti eden sürüm.

UV SvUV(SV* sv)

SvUVX Kontroller veya dönüştürmeler olmadan SV'nin UV yuvasındaki ham değeri döndürür. Sadece
SvIOK'un doğru olduğundan emin olduğunuzda kullanın. Ayrıca bkz. "SvUV()".

UV SvUVX(SV* sv)

SvUVx Verilen SV'yi işaretsiz bir tamsayıya zorlar ve onu döndürür. garantiler
"sv"yi yalnızca bir kez değerlendirin. Bunu yalnızca "sv" kenarlı bir ifadeyse kullanın
etkiler, aksi takdirde daha verimli "SvUV" kullanın.

UV SvUVx(SV* sv)

SvUV_nomg
"SvUV" gibi ama sihri işlemez.

UV SvUV_nomg(SV* sv)

SvUV_set
UV işaretçisinin değerini sv olarak val olarak ayarlayın. Bkz. "SvIV_set".

geçersiz SvUV_set(SV* sv, UV değeri)

SvVOK SV'nin bir v-string içerip içermediğini gösteren bir boole döndürür.

bool SvVOK(SV* sv)

sv_catpvn_nomg
"sv_catpvn" gibi ama sihri işlemez.

void sv_catpvn_nomg(SV* sv, const karakter* ptr,
STRLEN len)

sv_catpv_nomg
"sv_catpv" gibi ama sihri işlemez.

void sv_catpv_nomg(SV* sv, const char* ptr)

sv_catsv_nomg
"sv_catsv" gibi ama sihri işlemez.

geçersiz sv_catsv_nomg(SV* dsv, SV* ssv)

sv_derived_from
Tam olarak "sv_derived_from_pv" gibidir, ancak "flags" parametresini almaz.

bool sv_derived_from(SV* sv, const char *const adı)

sv_derived_from_pv
Tam olarak "sv_derived_from_pvn" gibi, ancak bir yerine boş sonlandırılmış bir dize alır
dizi/uzunluk çifti.

bool sv_derived_from_pv(SV* sv,
const karakter *const adı,
U32 bayrakları)

sv_derived_from_pvn
SV'nin belirtilen sınıftan türetilmiş olup olmadığını gösteren bir boole döndürür at
the C seviye. Perl düzeyinde türetmeyi kontrol etmek için, normal bir Perl olarak "isa()"yı çağırın
yöntemi.

Şu anda "bayraklar" için tek önemli değer SVf_UTF8'dir.

bool sv_derived_from_pvn(SV* sv,
const karakter *const adı,
const STRLEN len, U32 bayrakları)

sv_derived_from_sv
Tam olarak "sv_derived_from_pvn" gibi, ancak ad dizesini bir SV biçiminde alır
dize/uzunluk çifti yerine.

bool sv_derived_from_sv(SV* sv, SV *isimlerv,
U32 bayrakları)

sv_does "sv_does_pv" gibidir, ancak bir "flags" parametresi almaz.

bool sv_does(SV* sv, const char *const adı)

sv_does_pv
"sv_does_sv" gibi, ancak SV yerine boş sonlandırılmış bir dize alır.

bool sv_does_pv(SV* sv, const char *const adı,
U32 bayrakları)

sv_does_pvn
"sv_does_sv" gibi, ancak SV yerine bir dize/uzunluk çifti alır.

bool sv_does_pvn(SV* sv, const char *const adı,
const STRLEN len, U32 bayrakları)

sv_does_sv
SV'nin belirli, adlandırılmış bir rol gerçekleştirip gerçekleştirmediğini gösteren bir boole döndürür. bu
SV, bir Perl nesnesi veya bir Perl sınıfının adı olabilir.

bool sv_does_sv(SV* sv, SV* adlarıv, U32 bayrakları)

sv_report_used
Henüz serbest bırakılmamış tüm SV'lerin içeriğini boşaltın (hata ayıklama yardımı).

geçersiz sv_report_used()

sv_setsv_nomg
"sv_setsv" gibi ama büyü işlemez.

geçersiz sv_setsv_nomg(SV* dsv, SV* ssv)

sv_utf8_upgrade_nomg
sv_utf8_upgrade gibi, ancak "sv" üzerinde sihir yapmıyor.

STRLEN sv_utf8_upgrade_nomg(NN SV *sv)

SV-Gövde Tahsis


look_like_number
Bir SV'nin içeriğinin bir sayı gibi görünüp görünmediğini (veya bir sayı olup olmadığını) test edin. "İf" ve
"Sonsuz" sayı olarak kabul edilir (bu nedenle sayısal olmayan bir uyarı vermez), hatta
eğer At() onları yakmaz. Get-sihir göz ardı edilir.

I32 look_like_number(SV *const sv)

yeniRV_noinc
Bir SV için bir RV sarmalayıcısı oluşturur. Orijinal SV için referans sayısı değil
arttı.

SV* yeniRV_noinc(SV *sabit tmpRef)

newSV Yeni bir SV oluşturur. Sıfır olmayan bir "len" parametresi, verinin bayt sayısını belirtir.
SV'nin sahip olması gereken önceden tahsis edilmiş dize alanı. Sondaki "NUL" için fazladan bir bayt
da saklıdır. (SvPOK, dize alanı olsa bile SV için ayarlanmaz.
tahsis edilmiştir.) Yeni SV için referans sayısı 1 olarak ayarlanmıştır.

5.9.3 olarak, yeniSV() eskinin yerini alır HABERSV() API ve ilk parametreyi düşürür,
x, arayanların kendilerini tanımlamasına izin veren bir hata ayıklama yardımı. Bu yardım yapıldı
yerini yeni bir derleme seçeneği olan PERL_MEM_LOG alır (bkz. "PERL_MEM_LOG"
perlhack ipuçları). Eski API, destekleyen XS modüllerinde kullanım için hala oradadır.
eski perller.

SV* yeniSV(const STRLEN len)

yeniSVhek
Karma anahtar yapısından yeni bir SV oluşturur. Bu noktayı skaler üretecek
mümkünse paylaşılan dize tablosuna. Aşağıdaki durumlarda yeni (tanımsız) bir SV döndürür:
hek NULL'dur.

SV* yeniSVhek(const HEK *const hek)

newSViv Yeni bir SV oluşturur ve içine bir tamsayı kopyalar. SV için referans sayısı
1 olarak ayarlayın.

SV* yeniSViv(const IV i)

newSVnv Yeni bir SV oluşturur ve buna bir kayan nokta değeri kopyalar. referans sayısı
SV için 1 olarak ayarlanmıştır.

SV* yeniSVnv(sabit NV n)

newSVpv Yeni bir SV oluşturur ve bir dize kopyalar ("NUL" ("\0") karakterleri içerebilir)
bunun içine. SV için referans sayısı 1'e ayarlanmıştır. "len" sıfır ise, Perl
kullanarak uzunluğu hesaplayın strlen(), (bu seçeneği kullanırsanız, bu "s"
gömülü "NUL" karakterlere sahip olamaz ve sonlandırıcı bir "NUL" bayta sahip olmalıdır).

Verimlilik için bunun yerine "newSVpvn" kullanmayı düşünün.

SV* newSVpv(const char *const s, const STRLEN len)

yeniSVpvf
Yeni bir SV oluşturur ve onu "sprintf" gibi biçimlendirilmiş dizeyle başlatır.

SV* newSVpvf(const char *const pat, ...)

yeniSVpvn
Yeni bir SV oluşturur ve içine "NUL" karakterleri içerebilecek bir dize kopyalar
("\0") ve diğer ikili veriler. SV için referans sayısı 1 olarak ayarlanmıştır. Not
"len" sıfırsa, Perl sıfır uzunluklu (Perl) bir dize oluşturacaktır. Sen
kaynak arabelleğinin en az "len" bayt uzunluğunda olmasını sağlamaktan sorumludur. Eğer
"arabellek" argümanı NULL ise yeni SV tanımsız olacaktır.

SV* newSVpvn(const char *const s, const STRLEN len)

yeniSVpvn_flags
Yeni bir SV oluşturur ve bir dize kopyalar ("NUL" ("\0") karakterleri içerebilir)
bunun içine. SV için referans sayısı 1'e ayarlanmıştır. "len" sıfır ise,
Perl, sıfır uzunlukta bir dize oluşturacaktır. olmasını sağlamaktan siz sorumlusunuz.
kaynak dizesi en az "len" bayt uzunluğundadır. "s" argümanı NULL ise, yeni
SV tanımsız olacaktır. Şu anda kabul edilen tek bayrak biti "SVf_UTF8" ve
"SVs_TEMP". "SVs_TEMP" ayarlanmışsa, sonuçta "sv_2mortal()" çağrılır
dönmeden önce. "SVf_UTF8" ayarlanmışsa, "s" UTF-8'de kabul edilir ve
Yeni SV'de "SVf_UTF8" bayrağı ayarlanacaktır. "newSVpvn_utf8()" bir kolaylıktır
olarak tanımlanan bu işlev için sarıcı

#define newSVpvn_utf8(s, len, u)
newSVpvn_flags((ler), (len), (u) ? SVf_UTF8 : 0)

SV* newSVpvn_flags(const char *const s,
sabit STRLEN len,
const U32 bayrakları)

yeniSVpvn_share
Dizedeki paylaşılan bir dizeye işaret eden SvPVX_const ile yeni bir SV oluşturur
masa. Dize tabloda zaten yoksa, önce oluşturulur.
SvIsCOW bayrağını açar (veya 5.16 ve önceki sürümlerde OKUNUR ve SAHTE). Eğer
"hash" parametresi sıfır değil, bu değer kullanılıyor; aksi takdirde karma hesaplanır.
Dizenin karması daha sonra "SvSHARED_HASH()" ile SV'den alınabilir.
makro. Buradaki fikir, dize tablosunun paylaşılan karma anahtarlar için kullanılmasıdır.
bu dizelerde SvPVX_const == HeKEY olacak ve karma arama dizeden kaçınacaktır
karşılaştırmak.

SV* newSVpvn_share(const char* s, I32 len, U32 hash)

yeniSVpv'ler
"newSVpvn" gibi, ancak bir "NUL" ile sonlandırılmış değişmez bir dize alır.
dizi/uzunluk çifti.

SV* newSVpvs(const char* s)

yeniSVpvs_flags
"newSVpvn_flags" gibi, ancak bir "NUL" ile sonlandırılmış değişmez bir dize alır.
dizi/uzunluk çifti.

SV* newSVpvs_flags(const char* s, U32 bayrakları)

yeniSVpvs_share
"newSVpvn_share" gibi, ancak bir "NUL" ile sonlandırılmış değişmez bir dize alır.
string/uzunluk çifti ve hash parametresini atlar.

SV* newSVpvs_share(const char* s)

yeniSVpv_share
"newSVpvn_share" gibi, ancak "NUL" ile sonlandırılmış bir dize alır.
dizi/uzunluk çifti.

SV* newSVpv_share(const char* s, U32 karması)

newSVrv Var olan RV "rv" için işaret edilecek yeni bir SV oluşturur. "rv" bir RV değilse
sonra bire yükseltilecektir. "Sınıf adı" boş değilse, yeni SV
Belirtilen pakette mübarek olsun. Yeni SV döndürülür ve referansı
sayım 1'dir. Referans sayısı 1, "rv"ye aittir.

SV* yeniSVrv(SV *sabit rv,
const karakter *const sınıf adı)

newSVsv Orijinal SV'nin tam bir kopyası olan yeni bir SV oluşturur. (Kullanır
"sv_setsv".)

SV* newSVsv(SV *sabit eski)

newSVuv Yeni bir SV oluşturur ve buna işaretsiz bir tamsayı kopyalar. için referans sayısı
SV 1 olarak ayarlanır.

SV* yeniSVuv(sabit UV u)

yeniSV_type
Belirtilen türde yeni bir SV oluşturur. Yeni SV için referans sayısı:
1 olarak ayarlayın.

SV* newSV_type(const svtype tipi)

sv_2bool
Bu makro yalnızca sv_true() veya makro eşdeğeri ve yalnızca
sonrakinin argümanı ne SvPOK, ne SvIOK ne de SvNOK. sv_2bool_flags ile çağırır
SV_GMAGIC bayrağı.

bool sv_2bool(SV *sabit sv)

sv_2bool_flags
Bu işlev yalnızca sv_true() ve arkadaşlar ve yalnızca ikincisi ise
argüman ne SvPOK, ne SvIOK ne de SvNOK. Bayraklar SV_GMAGIC içeriyorsa, o zaman
bir yapar mg_get() İlk.

bool sv_2bool_flags(SV *sv, I32 bayrakları)

sv_2cv Çeşitli gambitleri kullanarak bir SV'den CV almayı deneyin; ek olarak, mümkünse deneyin
*st ve *gvp'yi bununla ilişkili zula ve GV'ye ayarlayın. "lref" içindeki bayraklar
gv_fetchsv'ye geçti.

CV* sv_2cv(SV* sv, HV **sabit st, GV **sabit gvp,
sabit I32 lref)

sv_2io Çeşitli kumar oyunları kullanarak, bir SV'den bir IO almaya çalışın: IO yuvası bir GV ise; veya
bir RV isek özyinelemeli sonuç; veya adından sonra adlandırılan sembolün IO yuvası
PV, eğer biz bir diziysek.

Girilen sv'de 'Get' büyüsü yok sayılır, ancak sv ise "SvRV(sv)" üzerinde çağrılır
bir RV'dir.

GÇ* sv_2io(SV *sabit sv)

sv_2iv_flags
Gerekli herhangi bir dize dönüştürmesini yaparak bir SV'nin tamsayı değerini döndürün. Eğer
bayraklar SV_GMAGIC içerir, bir mg_get() ilk. Normalde aracılığıyla kullanılır
"SvIV(sv)" ve "SvIVx(sv)" makroları.

IV sv_2iv_flags(SV *const sv, const I32 bayrakları)

sv_2ölümlü
Mevcut bir SV'yi ölümlü olarak işaretler. SV "yakında" imha edilecek.
FREETMPS'e açık çağrı veya ifade gibi yerlerde örtülü bir çağrı ile
sınırları. SvTEMP() açık, bu da SV'nin dize arabelleğinin olabileceği anlamına gelir.
Bu SV kopyalanırsa "çalındı". Ayrıca bkz. "sv_newmortal" ve "sv_mortalcopy".

SV* sv_2mortal(SV *sabit sv)

sv_2nv_flags
Gerekli herhangi bir dize veya tamsayı dönüştürmesini yaparak bir SV'nin num değerini döndürün.
Bayraklar SV_GMAGIC içeriyorsa, mg_get() ilk. Normalde aracılığıyla kullanılır
"SvNV(sv)" ve "SvNVx(sv)" makroları.

NV sv_2nv_flags(SV *const sv, const I32 bayrakları)

sv_2pvbyte
SV'nin bayt kodlu gösterimine bir işaretçi döndürün ve *lp'yi değerine ayarlayın.
uzunluk. Yan etki olarak SV'nin UTF-8'den düşürülmesine neden olabilir.

Genellikle "SvPVbyte" makrosu aracılığıyla erişilir.

char* sv_2pvbyte(SV *sv, STRLEN *const lp)

sv_2pvutf8
SV'nin UTF-8 kodlu gösterimine bir işaretçi döndürün ve *lp'yi değerine ayarlayın.
uzunluk. Yan etki olarak SV'nin UTF-8'e yükseltilmesine neden olabilir.

Genellikle "SvPVutf8" makrosu aracılığıyla erişilir.

char* sv_2pvutf8(SV *sv, STRLEN *const lp)

sv_2pv_flags
Bir SV'nin dize değerine bir işaretçi döndürür ve *lp'yi uzunluğuna ayarlar. Eğer
bayraklar SV_GMAGIC içerir, bir mg_get() ilk. Eğer sv'yi bir dizgeye zorlar
gerekli. Normalde "SvPV_flags" makrosu aracılığıyla çağrılır. "sv_2pv()" ve
"sv_2pv_nomg" genellikle burada da biter.

char* sv_2pv_flags(SV *const sv, STRLEN *const lp,
const I32 bayrakları)

sv_2uv_flags
Gerekli herhangi bir dize dönüştürmesini yaparak bir SV'nin işaretsiz tamsayı değerini döndürün.
Bayraklar SV_GMAGIC içeriyorsa, mg_get() ilk. Normalde aracılığıyla kullanılır
"SvUV(sv)" ve "SvUVx(sv)" makroları.

UV sv_2uv_flags(SV *const sv, const I32 bayrakları)

sv_backoff
Herhangi bir dize ofsetini kaldırın. Normalde "SvOOK_off" makro sarmalayıcısını kullanmalısınız
yerine.

int sv_backoff(SV *sabit sv)

sv_bless
Belirli bir pakete bir SV'yi kutsar. SV bir RV olmalıdır. paket gerekir
zulası ile belirtilmelidir (bkz. "gv_stashpv()"). SV'nin referans sayısı
etkilenmemiş.

SV* sv_bless(SV *const sv, HV *const stash)

sv_catpv
"NUL" ile sonlandırılmış dizeyi, içindeki dizenin sonuna birleştirir.
SV. SV'nin UTF-8 durumu ayarlanmışsa, eklenen baytlar şu şekilde olmalıdır:
geçerli UTF-8. Sihri 'al' ile idare eder, ancak sihri 'ayarlama' ile ilgilenmez. "sv_catpv_mg" bölümüne bakın.

void sv_catpv(SV *const sv, const karakter* ptr)

sv_catpvf
"sprintf" gibi argümanlarını işler ve biçimlendirilmiş çıktıyı bir SV'ye ekler.
Eklenen veriler "geniş" karakterler içeriyorsa (bunlarla sınırlı olmamak üzere,
%s ile biçimlendirilmiş bir UTF-8 PV'si ve %c ile biçimlendirilmiş >255 karakterleri olan SV'ler),
orijinal SV, UTF-8'e yükseltilebilir. Sihri 'al' ama 'ayarlamayı' değil
büyü. "sv_catpvf_mg" bölümüne bakın. Orijinal SV UTF-8 ise, desen şu şekilde olmalıdır:
geçerli UTF-8; orijinal SV bayt ise, desen de olmalıdır.

void sv_catpvf(SV *const sv, const char *const pat,
...)

sv_catpvf_mg
"sv_catpvf" gibi, ama aynı zamanda "set" büyüsünü de yönetir.

geçersiz sv_catpvf_mg(SV *const sv,
const char *const pat, ...)

sv_catpvn
Dizeyi, SV'deki dizenin sonuna birleştirir. "len"
kopyalanacak bayt sayısını gösterir. SV'nin UTF-8 durumu ayarlanmışsa,
eklenen baytlar geçerli UTF-8 olmalıdır. Sihri 'al' ile idare eder, ancak sihri 'ayarlama' ile ilgilenmez.
"sv_catpvn_mg" bölümüne bakın.

void sv_catpvn(SV *dsv, const char *sstr, STRLEN len)

sv_catpvn_flags
Dizeyi, SV'deki dizenin sonuna birleştirir. "len"
kopyalanacak bayt sayısını gösterir.

Varsayılan olarak, SV'nin
UTF-8 durum seti ve aksi takdirde bir bayt dizisi. Eklenenleri zorlayabilir
"SV_CATUTF8" bayrağı sağlanarak ve bayt olarak UTF-8 olarak yorumlanacak dize
"SV_CATBYTES" bayrağını sağlayarak; SV veya eklenen dize
gerekirse UTF-8'e yükseltilir.

"flags", "SV_SMAGIC" bit setine sahipse, aşağıdaki durumlarda "dsv" üzerinde "mg_set" olur:
uygun. "sv_catpvn" ve "sv_catpvn_nomg" bu bağlamda uygulanır
fonksiyonu.

void sv_catpvn_flags(SV *const dstr,
const karakter *sstr,
sabit STRLEN len,
const I32 bayrakları)

sv_catpvs
"sv_catpvn" gibi, ancak dize/uzunluk çifti yerine değişmez bir dize alır.

geçersiz sv_catpvs(SV* sv, const char* s)

sv_catpvs_flags
"sv_catpvn_flags" gibi, ancak bir "NUL" ile sonlandırılmış değişmez bir dize alır
dizi/uzunluk çifti.

void sv_catpvs_flags(SV* sv, const char* s,
I32 bayrakları)

sv_catpvs_mg
"sv_catpvn_mg" gibi, ancak dize/uzunluk çifti yerine değişmez bir dize alır.

void sv_catpvs_mg(SV* sv, const char* s)

sv_catpvs_nomg
"sv_catpvn_nomg" gibi, ancak dize/uzunluk çifti yerine değişmez bir dize alır.

void sv_catpvs_nomg(SV* sv, const char* s)

sv_catpv_flags
"NUL" ile sonlandırılmış dizeyi, içindeki dizenin sonuna birleştirir.
SV. SV'nin UTF-8 durumu ayarlanmışsa, eklenen baytlar şu şekilde olmalıdır:
geçerli UTF-8. "flags", "SV_SMAGIC" bit setine sahipse, "mg_set"
uygunsa değiştirilmiş SV.

void sv_catpv_flags(SV *dstr, const char *sstr,
const I32 bayrakları)

sv_catpv_mg
"sv_catpv" gibi, ama aynı zamanda "set" büyüsünü de yönetir.

void sv_catpv_mg(SV *const sv, const char *const ptr)

sv_catsv
SV "ssv"deki dizeyi SV "dsv" içindeki dizenin sonuna birleştirir. Eğer
"ssv" boştur, hiçbir şey yapmaz; aksi halde yalnızca "dsv"yi değiştirir. 'al' sihrini işler
her iki SV'de de 'set' sihri yok. Bkz. "sv_catsv_mg" ve "sv_catsv_nomg".

geçersiz sv_catsv(SV *dstr, SV *sstr)

sv_catsv_flags
SV "ssv"deki dizeyi SV "dsv" içindeki dizenin sonuna birleştirir. Eğer
"ssv" boştur, hiçbir şey yapmaz; aksi halde yalnızca "dsv"yi değiştirir. "bayraklar" içeriyorsa
"SV_GMAGIC" bit seti, uygunsa her iki SV'de "mg_get" öğesini çağırır. "bayraklar" ise
"SV_SMAGIC" dahil, "mg_set" daha sonra değiştirilen SV'de çağrılır, eğer
uygun. "sv_catsv", "sv_catsv_nomg" ve "sv_catsv_mg"
bu fonksiyonun terimleri.

void sv_catsv_flags(SV *const dsv, SV *const ssv,
const I32 bayrakları)

sv_chop Dize arabelleğinin başlangıcından karakterlerin etkin bir şekilde kaldırılması.
SvPOK(sv) veya en azından SvPOKp(sv) doğru olmalı ve "ptr" bir işaretçi olmalıdır.
dize arabelleğinin içinde bir yerde. "ptr", dizinin ilk karakteri olur.
ayarlanmış dize. "OOK hack" kullanır. Dönüşte yalnızca SvPOK(sv) ve SvPOKp(sv)
OK bayrakları arasında doğru olacaktır.

Dikkat: bu işlev döndükten sonra "ptr" ve SvPVX_const(sv) artık ifade etmeyebilir
aynı veri yığınına.

Bu fonksiyonun isminin Perl'in "chop" ismiyle talihsiz benzerliği
operatör kesinlikle tesadüfidir. Bu işlev soldan çalışır; "kesmek"
sağdan çalışır.

geçersiz sv_chop(SV *const sv, const char *const ptr)

sv_clear
Bir SV'yi temizleyin: tüm yıkıcıları çağırın, vücut tarafından kullanılan tüm belleği boşaltın ve
vücudun kendisi. SV'nin kafası değil türü tüm 1'lere ayarlanmış olmasına rağmen serbest bırakıldı
böylece küresel yıkım sırasında yanlışlıkla canlı olduğu varsayılmasın
vb. Bu işlev yalnızca REFCNT sıfır olduğunda çağrılmalıdır. Çoğu zaman
bunun yerine "sv_free()" (veya onun makro sarmalayıcısı "SvREFCNT_dec") çağırmak isteyeceksiniz.

geçersiz sv_clear(SV *const orig_sv)

sv_cmp İki SV'deki dizeleri karşılaştırır. olup olmadığını gösteren -1, 0 veya 1 döndürür.
"sv1"deki dize, "sv2"deki dizeden küçük, ona eşit veya daha büyük. Dır-dir
UTF-8 ve 'bayt kullan' farkında, tutamaçlar sihir alıyor ve argümanlarını zorlayacak
gerekirse dizeler. Ayrıca bkz. "sv_cmp_locale".

I32 sv_cmp(SV *sabit sv1, SV *sabit sv2)

sv_cmp_flags
İki SV'deki dizeleri karşılaştırır. olup olmadığını gösteren -1, 0 veya 1 döndürür.
"sv1"deki dize, "sv2"deki dizeden küçük, ona eşit veya daha büyük. Dır-dir
UTF-8 ve 'bayt kullan' farkındadır ve gerekirse argümanlarını dizelere zorlar. Eğer
bayraklar SV_GMAGIC içerir, sihir alır. Ayrıca bakınız
"sv_cmp_locale_flags".

I32 sv_cmp_flags(SV *sabit sv1, SV *sabit sv2,
const U32 bayrakları)

sv_cmp_locale
İki SV'deki dizeleri yerel ayara duyarlı bir şekilde karşılaştırır. UTF-8 ve 'kullanım
baytların farkındadır, tutamaçlar sihir alır ve gerekirse argümanlarını dizelere zorlar.
Ayrıca bkz. "sv_cmp".

I32 sv_cmp_locale(SV *sabit sv1, SV *sabit sv2)

sv_cmp_locale_flags
İki SV'deki dizeleri yerel ayara duyarlı bir şekilde karşılaştırır. UTF-8 ve 'kullanım
baytların farkındadır ve gerekirse argümanlarını dizelere zorlar. bayraklar ise
SV_GMAGIC içerir, sihir alır. Ayrıca bkz. "sv_cmp_flags".

I32 sv_cmp_locale_flags(SV *sabit sv1,
SV *sabit sv2,
const U32 bayrakları)

sv_collxfrm
Bu, SV_GMAGIC bayrağıyla "sv_collxfrm_flags" öğesini çağırır. "sv_collxfrm_flags" bölümüne bakın.

char* sv_collxfrm(SV *sabit sv, STRLEN *sabit nxp)

sv_collxfrm_flags
Henüz sahip değilse, bir SV'ye Harmanla Dönüştürme büyüsü ekleyin. bayraklar ise
SV_GMAGIC içerir, get-magic'i işler.

Herhangi bir skaler değişken, skaleri içeren PERL_MAGIC_collxfrm büyüsünü taşıyabilir.
değişkenin verileri, ancak normal bir hafızanın olduğu bir formata dönüştürülmüştür.
karşılaştırma yerel ayarlara göre verileri karşılaştırmak için kullanılabilir.

char* sv_collxfrm_flags(SV *const sv,
STRLEN *sabit nxp,
I32 const bayrakları)

sv_copypv_flags
sv_copypv ve sv_copypv_nomg'un uygulanması. Çağrılar sihirli olsun iff bayrakları içerir
SV_GMAGIC.

void sv_copypv_flags(SV *const dsv, SV *const ssv,
const I32 bayrakları)

sv_copypv_nomg
sv_copypv gibi, ancak önce sihir almayı çağırmaz.

geçersiz sv_copypv_nomg(SV *sabit dsv, SV *sabit ssv)

sv_dec SV'deki değerin otomatik olarak azaltılması, aşağıdaki durumlarda dizeden sayısala dönüştürme yapılır:
gerekli. Sihir 'al' ve operatör aşırı yüklemesini yönetir.

geçersiz sv_dec(SV *const sv)

sv_dec_nomg
SV'deki değerin otomatik olarak azaltılması, aşağıdaki durumlarda dizeden sayısala dönüştürme yapılır:
gerekli. Operatör aşırı yüklemesini yönetir. 'Al' büyüsünü işlemeyi atlar.

geçersiz sv_dec_nomg(SV *const sv)

sv_eq İki SV'deki dizelerin aynı olup olmadığını gösteren bir boole döndürür. Dır-dir
UTF-8 ve 'bayt kullan' farkında, tutamaçlar sihir alıyor ve argümanlarını zorlayacak
gerekirse dizeler.

I32 sv_eq(SV* sv1, SV* sv2)

sv_eq_flags
İki SV'deki dizelerin aynı olup olmadığını gösteren bir boole döndürür. Dır-dir
UTF-8 ve 'bayt kullan' farkındadır ve gerekirse argümanlarını dizelere zorlar. Eğer
bayraklar SV_GMAGIC'i içerir, aynı zamanda get-magic'i de işler.

I32 sv_eq_flags(SV* sv1, SV* sv2, const U32 bayrakları)

sv_force_normal_flags
Bir SV'de çeşitli sahtekarlık türlerini geri alın, burada sahtecilik bir dizeden "fazla" anlamına gelir: if
PV paylaşılan bir dizedir, özel bir kopya oluşturun; eğer biz hakemsek, hakemliği bırakın; eğer
biz bir küreyiz, xpvmg'ye indiriyoruz; eğer bir kopyala-yazma skaleri isek, bu
kopyalamayı yaptığımızda yazma süresi ve ayrıca yerel olarak kullanılır; eğer bu bir vstring ise,
vstring büyüsünü bırak. "SV_COW_DROP_PV" ayarlanırsa, yazma üzerine kopyalanan bir skaler
PV arabelleğini (varsa) düşürür ve bir kopya oluşturmak yerine SvPOK_off olur.
(Bu skalerin başka bir değere ayarlanacağı yerde kullanılır.) Ayrıca,
"flags" parametresi, değerlendirme kaldırıldığında "sv_unref_flags()" öğesine iletilir.
"sv_force_normal", bu işlevi 0'a ayarlanmış bayraklarla çağırır.

Bu işlevin, bu SV'nin kullanılmak üzere olduğunu perl'e bildirmek için kullanılması bekleniyor.
yazılmalı ve herhangi bir ekstra defter tutma işlemine dikkat edilmelidir. Bu nedenle,
salt okunur değerlerde dolanıyor.

geçersiz sv_force_normal_flags(SV *const sv,
const U32 bayrakları)

sv_free Bir SV'nin referans sayısını azaltın ve sıfıra düşerse, "sv_clear" öğesini çağırın.
yıkıcıları çağırır ve vücut tarafından kullanılan tüm hafızayı boşaltır; nihayet, serbest bırakmak
SV'nin kafasının kendisi. Normalde "SvREFCNT_dec" sarmalayıcı makrosu aracılığıyla çağrılır.

geçersiz sv_free(SV *const sv)

sv_gets Dosya tanıtıcısından bir satır alın ve isteğe bağlı olarak ekleyerek SV'de saklayın
şu anda saklanan dize. "Ekle" 0 değilse, satır SV'ye eklenir.
üzerine yazmak yerine. "append", bayt ofsetine ayarlanmalıdır.
eklenen dize SV'de başlamalıdır (tipik olarak "SvCUR(sv)"
seçim).

char* sv_gets(SV *const sv, PerlIO *const fp,
I32 eki)

sv_get_backrefs
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

sv zayıf bir referansın hedefiyse, o zaman geri referansları döndürür.
sv ile ilişkili yapı; aksi halde NULL döndürün.

Boş olmayan bir sonuç döndürürken, dönüşün türü önemlidir. eğer bir
AV daha sonra AV'nin öğeleri, buna işaret eden zayıf referans RV'lerdir.
öğe. Başka bir tür ise, öğenin kendisi zayıf referanstır.

Ayrıca bakınız Perl_sv_add_backref(), Perl_sv_del_backref(), Perl_sv_kill_backrefs()

SV* sv_get_backrefs(SV *sabit sv)

sv_grow SV'deki karakter arabelleğini genişletir. Gerekirse "sv_unref" kullanır ve
SV'yi "SVt_PV" olarak yükseltir. Karakter arabelleğine bir işaretçi döndürür. Kullan
Bunun yerine "SvGROW" sarıcı.

char* sv_grow(SV *const sv, STRLEN yenilen)

sv_inc SV'deki değerin otomatik artışı, aşağıdaki durumlarda dizeden sayısala dönüştürme
gerekli. Sihir 'al' ve operatör aşırı yüklemesini yönetir.

geçersiz sv_inc(SV *const sv)

sv_inc_nomg
SV'deki değerin otomatik artışı, aşağıdaki durumlarda dizeden sayısal dönüştürmeye
gerekli. Operatör aşırı yüklemesini yönetir. 'Al' büyüsünü işlemeyi atlar.

geçersiz sv_inc_nomg(SV *const sv)

sv_insert
SV içinde belirtilen uzaklığa/uzunluğa bir dize ekler. Benzer
Perl alt dizi () işlev. Kollar sihir alır.

void sv_insert(SV *const bigstr, const STRLEN uzaklığı,
sabit STRLEN len,
const char *const küçük,
sabit STRLEN küçüklen)

sv_insert_flags
"sv_insert" ile aynıdır, ancak fazladan "bayraklar" "SvPV_force_flags"a iletilir
bu "bigstr" için geçerlidir.

void sv_insert_flags(SV *const bigstr,
const STRLEN ofset,
sabit STRLEN len,
const char *const küçük,
const STRLEN küçüklen,
const U32 bayrakları)

sv_isa SV'nin belirtilen sınıfa kutsanmış olup olmadığını gösteren bir boole döndürür.
Bu, alt türleri kontrol etmez; kalıtımı doğrulamak için "sv_derived_from" kullanın
ilişki.

int sv_isa(SV* sv, const char *const adı)

sv_isobject
SV'nin kutsanmış bir nesneye işaret eden bir RV olup olmadığını gösteren bir boole döndürür.
SV bir RV değilse veya nesne kutsanmamışsa, bu geri dönecektir.
yanlış.

int sv_isobject(SV* sv)

sv_len SV'deki dizenin uzunluğunu döndürür. Büyü ve tip zorlamayı ele alır ve
UTF8 bayrağını uygun şekilde ayarlar. Ayrıca, ham erişim sağlayan "SvCUR" bölümüne bakın.
xpv_cur yuvası.

STRLEN sv_len(SV *sabit sv)

sv_len_utf8
Geniş UTF-8 bayt sayarak bir SV'deki dizedeki karakter sayısını döndürür
tek karakter olarak. Büyü ve tip zorlamayı yönetir.

STRLEN sv_len_utf8(SV *sabit sv)

sv_magic
Bir SV'ye sihir ekler. Önce gerekirse "SVt_PVMG" yazmak için "sv"yi yükseltir, ardından
sihirli listenin başına "nasıl" türünde yeni bir sihirli öğe ekler.

İşlemin açıklaması için "sv_magicext" ("sv_magic" artık çağırır) konusuna bakın.
"name" ve "namelen" argümanlarının.

SvREADONLY SV'lere sihir eklemek ve daha fazlasını eklemek için "sv_magicext" kullanmanız gerekir.
aynı 'nasıl'ın birden fazla örneği.

void sv_magic(SV *const sv, SV *const nesnesi,
const int nasıl, const char *const adı,
const I32 adı)

sv_magicext
Bir SV'ye sihir ekler, gerekirse yükseltir. Sağlanan vtable'ı uygular ve
eklenen büyüye bir işaretçi döndürür.

"sv_magicext"in, "sv_magic"in izin vermeyeceği şeylere izin vereceğini unutmayın. İçinde
özellikle, SvREADONLY SV'lere sihir ekleyebilir ve birden fazla örneğini ekleyebilirsiniz.
aynı "nasıl".

"namlen" sıfırdan büyükse, "savepvn" kopya "ad" saklanır, eğer
"namlen" sıfır ise "ad" olduğu gibi saklanır ve - başka bir özel durum olarak - eğer
"(name && namlen == HEf_SVKEY)" ardından "name"nin bir "SV*" içerdiği varsayılır ve
artan REFCNT ile olduğu gibi saklanır.

(Bu artık "sv_magic" tarafından bir alt program olarak kullanılmaktadır.)

MAGIC * sv_magicext(SV *const sv, SV *const nesnesi,
const int nasıl,
const MGVTBL *const vtbl,
const karakter *const adı,
const I32 adı)

sv_mortalcopy
Orijinal SV'nin bir kopyası olan yeni bir SV oluşturur ("sv_setsv" kullanarak). Yeni
SV ölümlü olarak işaretlendi. Ya açık bir çağrı ile "yakında" imha edilecek
FREETMPS'e veya ifade sınırları gibi yerlerde örtülü bir çağrı ile. Görmek
ayrıca "sv_newmortal" ve "sv_2mortal".

SV* sv_mortalcopy(SV *sabit eskisv)

sv_newmortal
Ölümlü olan yeni bir boş SV oluşturur. SV'nin referans sayısı 1'e ayarlanmıştır.
"Yakında", FREETMPS'e yapılan açık bir çağrıyla ya da bir
deyim sınırları gibi yerlerde örtük çağrı. Ayrıca bkz. "sv_mortalcopy"
ve "sv_2mortal".

SV* sv_newmortal()

sv_newref
Bir SV'nin referans sayısını artırın. Bunun yerine "SvREFCNT_inc()" sarmalayıcısını kullanın.

SV* sv_newref(SV *sabit sv)

sv_pos_b2u
Offsetp tarafından gösterilen değeri, başlangıcından itibaren bir bayt sayısından dönüştürür.
dize, eşdeğer sayıda UTF-8 karakter sayısına kadar. Büyü yapar ve
zorlama Tür.

Daha uzun dizeleri doğru şekilde işleyen "sv_pos_b2u_flags" tercihini kullanın.
2Gb.

geçersiz sv_pos_b2u(SV *sabit sv, I32 *sabit ofsetp)

sv_pos_b2u_flags
Dizenin başlangıcından itibaren bir bayt sayısından ofseti bir sayıya dönüştürür
eşdeğer sayıda UTF-8 karakter. Tür zorlamayı yönetir. bayraklar geçti
"SvPV_flags" için ve genellikle işlemek için "SV_GMAGIC|SV_CONST_RETURN" olmalıdır
büyü.

STRLEN sv_pos_b2u_flags(SV *sabit sv,
STRLEN const ofset, U32 bayrakları)

sv_pos_u2b
offsetp tarafından gösterilen değeri, bir dizi UTF-8 karakterden dönüştürür.
dizenin başlangıcı, eşdeğer sayıda bayt sayısına; lenp değilse
sıfır, aynı şeyi lenp için yapar, ancak bu sefer ofsetten başlayarak, daha çok
dizenin başlangıcından daha. Büyü ve tip zorlamayı yönetir.

Daha uzun dizeleri doğru şekilde işleyen "sv_pos_u2b_flags" tercihini kullanın.
2Gb.

geçersiz sv_pos_u2b(SV *sabit sv, I32 *sabit ofsetp,
I32 *sabit uzunluk)

sv_pos_u2b_flags
Dizenin başlangıcından itibaren UTF-8 karakter sayısından ofseti bir karaktere dönüştürür.
eşdeğer bayt sayısı; lenp sıfır değilse, aynısını
lenp, ancak bu sefer başlangıcından ziyade ofsetten başlayarak
sicim. Tür zorlamayı yönetir. bayraklar "SvPV_flags"a iletilir ve genellikle
büyüyü işlemek için "SV_GMAGIC|SV_CONST_RETURN" olmalıdır.

STRLEN sv_pos_u2b_flags(SV *const sv, STRLEN uoffset,
STRLEN *const lenp, U32 bayrakları)

sv_pvbyten_force
"SvPVbytex_force" makrosu için arka uç. Bunun yerine her zaman makroyu kullanın.

char* sv_pvbyten_force(SV *const sv, STRLEN *const lp)

sv_pvn_force
Bir şekilde SV'den mantıklı bir dize alın. Özel bir uygulama
Karmaşık makro ifadeleriyle baş edemeyen derleyiciler için "SvPV_force" makrosu.
Bunun yerine her zaman makroyu kullanın.

char* sv_pvn_force(SV* sv, STRLEN* lp)

sv_pvn_force_flags
Bir şekilde SV'den mantıklı bir dize alın. "flags", "SV_GMAGIC" bit setine sahipse,
uygunsa "sv" üzerinde "mg_get" olur, aksi halde olmaz. "sv_pvn_force" ve
"sv_pvn_force_nomg" bu işlev açısından uygulanır. normalde istersin
bunun yerine çeşitli sarmalayıcı makroları kullanmak için: bkz. "SvPV_force" ve "SvPV_force_nomg"

char* sv_pvn_force_flags(SV *const sv,
STRLEN *sabit lp,
const I32 bayrakları)

sv_pvutf8n_force
"SvPVutf8x_force" makrosu için arka uç. Bunun yerine her zaman makroyu kullanın.

char* sv_pvutf8n_force(SV *const sv, STRLEN *const lp)

sv_reftype
SV'nin neye referans olduğunu açıklayan bir dize döndürür.

const char* sv_reftype(const SV *const sv, const int ob)

sv_değiştir
İlk argümanı ikincinin bir kopyası yapın, ardından orijinali silin. bu
hedef SV, kaynak SV'nin gövdesinin sahipliğini fiziksel olarak devralır ve
bayraklarını devralır; ancak hedef, sahip olduğu tüm büyüleri ve herhangi bir büyüyü de içinde tutar.
kaynak atılır. Bunun oldukça uzman bir SV kopyalama olduğunu unutmayın.
operasyon; çoğu zaman "sv_setsv" veya birçok makrodan birini kullanmak isteyeceksiniz
ön uçlar.

geçersiz sv_replace(SV *sabit sv, SV *sabit nsv)

sv_reset
"Sıfırlama" Perl işlevi için temel uygulama. Perl seviyesinin
işlevi belirsiz bir şekilde kullanımdan kaldırılmıştır.

void sv_reset(const char* s, HV *const stash)

sv_rvweaken
Bir referansı zayıflatın: bu RV'de "SvWEAKREF" bayrağını ayarlayın; atıfta bulunulan SV'yi verin
Henüz yapmadıysa "PERL_MAGIC_backref" büyüsü; ve buna bir geri referans itin
Bu sihirle ilişkili geri referanslar dizisine RV. RV ise
RV temizlendikten sonra büyülü, set sihir çağrılacak.

SV* sv_rvweaken(SV *sabit sv)

sv_setiv
Verilen SV'ye bir tamsayı kopyalar, gerekirse önce yükseltir. Değil
'set' büyüsünü ele alın. Ayrıca bkz. "sv_setiv_mg".

geçersiz sv_setiv(SV *const sv, const IV num)

sv_setiv_mg
"sv_setiv" gibi, ama aynı zamanda "set" büyüsünü de yönetir.

void sv_setiv_mg(SV *const sv, const IV i)

sv_setnv
Verilen SV'ye bir double kopyalar, gerekirse önce yükseltme yapar. işlemez
'set' büyüsü. Ayrıca bkz. "sv_setnv_mg".

geçersiz sv_setnv(SV *const sv, const NV num)

sv_setnv_mg
"sv_setnv" gibi, ama aynı zamanda "set" büyüsünü de işler.

void sv_setnv_mg(SV *const sv, const NV num)

sv_setpv
Bir dizeyi bir SV'ye kopyalar. Dize bir "NUL" karakteri ile sonlandırılmalıdır.
'Ayarlama' büyüsünü işlemez. "sv_setpv_mg" bölümüne bakın.

geçersiz sv_setpv(SV *const sv, const char *const ptr)

sv_setpvf
"sv_catpvf" gibi çalışır ancak metni eklemek yerine SV'ye kopyalar.
'Ayarlama' büyüsünü işlemez. "sv_setpvf_mg" bölümüne bakın.

void sv_setpvf(SV *const sv, const char *const pat,
...)

sv_setpvf_mg
"sv_setpvf" gibi, ama aynı zamanda "set" büyüsünü de işler.

geçersiz sv_setpvf_mg(SV *const sv,
const char *const pat, ...)

sv_setpviv
Bir tamsayıyı verilen SV'ye kopyalar ve dize değerini de günceller. Değil
'set' büyüsünü ele alın. "sv_setpviv_mg" bölümüne bakın.

geçersiz sv_setpviv(SV *const sv, const IV num)

sv_setpviv_mg
"sv_setpviv" gibi, ama aynı zamanda "set" büyüsünü de yönetir.

geçersiz sv_setpviv_mg(SV *const sv, const IV iv)

sv_setpvn
Bir dizeyi (muhtemelen gömülü "NUL" karakterleri içeren) bir SV'ye kopyalar. bu
"len" parametresi kopyalanacak bayt sayısını belirtir. "ptr" argümanı ise
NULL ise SV tanımsız hale gelir. 'Ayarlama' büyüsünü işlemez. Görmek
"sv_setpvn_mg".

void sv_setpvn(SV *const sv, const char *const ptr,
sabit STRLEN len)

sv_setpvn_mg
"sv_setpvn" gibi, ama aynı zamanda "set" büyüsünü de yönetir.

geçersiz sv_setpvn_mg(SV *const sv,
const karakter *const ptr,
sabit STRLEN len)

sv_setpvs
"sv_setpvn" gibi, ancak dize/uzunluk çifti yerine değişmez bir dize alır.

geçersiz sv_setpvs(SV* sv, const char* s)

sv_setpvs_mg
"sv_setpvn_mg" gibi, ancak bir dizi/uzunluk çifti yerine değişmez bir dize alır.

geçersiz sv_setpvs_mg(SV* sv, const char* s)

sv_setpv_mg
"sv_setpv" gibi, ama aynı zamanda 'set' sihrini de işler.

void sv_setpv_mg(SV *const sv, const char *const ptr)

sv_setref_iv
Bir tamsayıyı, isteğe bağlı olarak SV'yi kutsayarak yeni bir SV'ye kopyalar. "rv" bağımsız değişkeni
RV'ye yükseltilecektir. Bu RV, yeni SV'yi gösterecek şekilde değiştirilecektir. bu
"classname" bağımsız değişkeni kutsama paketini belirtir. "sınıf adı" olarak ayarlayın
Nimetten kaçınmak için "NULL". Yeni SV'nin referans sayısı 1 olacaktır ve
RV iade edilecektir.

SV* sv_setref_iv(SV *sabit rv,
const char *const sınıfadı,
sabit IV)

sv_setref_nv
Çifti yeni bir SV'ye kopyalar, isteğe bağlı olarak SV'yi kutsar. "rv" argümanı
bir RV'ye yükseltilebilir. Bu RV, yeni SV'yi gösterecek şekilde değiştirilecektir. bu
"classname" bağımsız değişkeni kutsama paketini belirtir. "sınıf adı" olarak ayarlayın
Nimetten kaçınmak için "NULL". Yeni SV'nin referans sayısı 1 olacaktır ve
RV iade edilecektir.

SV* sv_setref_nv(SV *sabit rv,
const char *const sınıfadı,
sabit NV nv)

sv_setref_pv
İsteğe bağlı olarak SV'yi kutsayarak bir işaretçiyi yeni bir SV'ye kopyalar. "rv" bağımsız değişkeni
RV'ye yükseltilecektir. Bu RV, yeni SV'yi gösterecek şekilde değiştirilecektir. Eğer
"pv" argümanı NULL ise, "PL_sv_undef" SV'ye yerleştirilecektir. bu
"classname" bağımsız değişkeni kutsama paketini belirtir. "sınıf adı" olarak ayarlayın
Nimetten kaçınmak için "NULL". Yeni SV'nin referans sayısı 1 olacaktır ve
RV iade edilecektir.

HV, AV, SV, CV gibi diğer Perl türleri ile kullanmayın çünkü bu nesneler
işaretçi kopyalama işlemi tarafından bozulur.

"sv_setref_pvn" dizgiyi kopyalarken bu işaretçiyi kopyalar.

SV* sv_setref_pv(SV *sabit rv,
const char *const sınıfadı,
geçersiz *sabit pv)

sv_setref_pvn
İsteğe bağlı olarak SV'yi kutsayarak bir dizeyi yeni bir SV'ye kopyalar. uzunluğu
dize "n" ile belirtilmelidir. "rv" bağımsız değişkeni bir RV'ye yükseltilecek.
Bu RV, yeni SV'yi gösterecek şekilde değiştirilecektir. "sınıf adı" bağımsız değişkeni
nimet için paketi gösterir. önlemek için "sınıf adı"nı "NULL" olarak ayarlayın.
nimet. Yeni SV'nin referans sayısı 1 olacaktır ve RV,
iade.

"sv_setref_pv" işaretçiyi kopyalarken bu dizeyi kopyalar.

SV* sv_setref_pvn(SV *sabit rv,
const char *const sınıfadı,
sabit karakter *sabit pv,
sabit STRLEN n)

sv_setref_pvs
"sv_setref_pvn" gibi, ancak bir dizi/uzunluk çifti yerine değişmez bir dize alır.

SV * sv_setref_pvs(sabit karakter* s)

sv_setref_uv
İşaretsiz bir tamsayıyı yeni bir SV'ye kopyalar, isteğe bağlı olarak SV'yi kutsar. "rv"
bağımsız değişken bir RV'ye yükseltilecek. Bu RV, yeniyi gösterecek şekilde değiştirilecek
SV. "sınıf adı" bağımsız değişkeni, kutsamanın paketini belirtir. Ayarlamak
Nimetten kaçınmak için "sınıf adı" nı "NULL" olarak değiştirin. Yeni SV'nin bir referansı olacak
1 sayısı ve RV iade edilecektir.

SV* sv_setref_uv(SV *sabit rv,
const char *const sınıfadı,
sabit UV uv)

sv_setsv
"ssv" kaynak SV'sinin içeriğini hedef SV "dsv"ye kopyalar. bu
ölümlüyse kaynak SV yok edilebilir, bu nedenle bu işlevi kullanmayın.
kaynak SV'nin yeniden kullanılması gerekiyor. Hedef SV'de 'set' sihrini işlemez.
Kaynak SV'de sihir 'al' çağrısı yapar. Kabaca konuşursak, değere göre bir kopya gerçekleştirir,
hedefin önceki içeriğini yok etmek.

Muhtemelen "SvSetSV" gibi sarmalayıcı çeşitlerinden birini kullanmak istersiniz.
"SvSetSV_nosteal", "SvSetMagicSV" ve "SvSetMagicSV_nosteal".

geçersiz sv_setsv(SV *dstr, SV *sstr)

sv_setsv_flags
"ssv" kaynak SV'sinin içeriğini hedef SV "dsv"ye kopyalar. bu
ölümlüyse kaynak SV yok edilebilir, bu nedenle bu işlevi kullanmayın.
kaynak SV'nin yeniden kullanılması gerekiyor. 'Set' büyüsünü işlemez. Gevşek konuşursak, o
hedefin önceki içeriğini yok ederek, değere göre bir kopya gerçekleştirir.
"flags" parametresi "SV_GMAGIC" bitine sahipse, "ssv" üzerinde "mg_get" şu şekilde olur:
uygun, aksi halde değil. "flags" parametresinde "SV_NOSTEAL" biti ayarlanmışsa, o zaman
temps arabellekleri çalınmayacak. ve "sv_setsv_nomg"
bu işlev açısından uygulanmaktadır.

Muhtemelen "SvSetSV" gibi sarmalayıcı çeşitlerinden birini kullanmak istersiniz.
"SvSetSV_nosteal", "SvSetMagicSV" ve "SvSetMagicSV_nosteal".

Bu, skalerleri kopyalamak için birincil işlevdir ve diğer çoğu kopyalama benzeri
fonksiyonlar ve makrolar bunu altında kullanır.

geçersiz sv_setsv_flags(SV *dstr, SV *sstr,
const I32 bayrakları)

sv_setsv_mg
"sv_setsv" gibi, ama aynı zamanda 'set' sihrini de işler.

void sv_setsv_mg(SV *const dstr, SV *const sstr)

sv_setuv
İşaretsiz bir tamsayıyı verilen SV'ye kopyalar, gerekirse önce yükseltir. Yapmak
'set' büyüsünü ele almayın. Ayrıca bkz. "sv_setuv_mg".

geçersiz sv_setuv(SV *sabit sv, sabit UV sayısı)

sv_setuv_mg
"sv_setuv" gibi, ama aynı zamanda 'set' büyüsünü de yönetir.

geçersiz sv_setuv_mg(SV *sabit sv, sabit UV u)

sv_tainted
Kusurluluk için bir SV'yi test edin. Bunun yerine "SvTAINTED" kullanın.

bool sv_tainted(SV *sabit sv)

sv_true SV'nin Perl kurallarına göre bir true değeri varsa true değerini döndürür. "SvTRUE" makrosunu kullanın
bunun yerine "sv_true()" diyebilir veya bunun yerine bir satır içi sürüm kullanabilir.

I32 sv_true(SV *sabit sv)

sv_unmagic
Bir SV'den "type" türündeki tüm sihri kaldırır.

int sv_unmagic(SV *const sv, const int türü)

sv_unmagicext
Bir SV'den belirtilen "vtbl" ile "type" türündeki tüm sihri kaldırır.

int sv_unmagicext(SV *const sv, const int türü,
MGVTBL *vtbl)

sv_unref_flags
SV'nin RV durumunu ayarlar ve ne olursa olsun referans sayısını azaltır.
RV tarafından referans alınıyor. Bu neredeyse bir tersine çevirme olarak düşünülebilir.
"yeniSVrv". "cflags" bağımsız değişkeni, "SV_IMMEDIATE_UNREF" içerebilir.
azaltılacak referans sayısı (aksi halde azaltma şu koşula bağlıdır:
referans sayısı birinden farklı veya referans salt okunur
SV). Bakınız "SvROK_off".

void sv_unref_flags(SV *const ref, const U32 bayrakları)

sv_untaint
Bir SV'yi temizleyin. Bunun yerine "SvTAINTED_off" kullanın.

geçersiz sv_untaint(SV *const sv)

sv_upgrade
Bir SV'yi daha karmaşık bir forma yükseltin. Genellikle SV'ye yeni bir gövde tipi ekler,
daha sonra eski gövdeden mümkün olduğu kadar çok bilgiyi kopyalar. vıraklıyor
SV zaten istenenden daha karmaşık bir biçimdeyse. Genelde istiyorsun
aramadan önce türü kontrol eden "SvUPGRADE" makro sarmalayıcısını kullanın
"sv_upgrade" ve dolayısıyla vraklama yapmaz. Ayrıca bkz. "svtype".

geçersiz sv_upgrade(SV *const sv, svtype new_type)

sv_usepvn_flags
Bir SV'ye dize değerini bulmak için "ptr" kullanmasını söyler. Normalde dize saklanır
SV içinde, ancak sv_usepvn, SV'nin bir dış dize kullanmasına izin verir. "ptr"
Newx tarafından ayrılan belleğe işaret etmelidir. bir başlangıcı olmalı
Newx-ed bellek bloğu ve ortasına bir işaretçi değil (OOK'ya dikkat edin ve
yazma üzerine kopyalama) ve "malloc" gibi Newx olmayan bir bellek ayırıcıdan olmamalıdır. bu
dizi uzunluğu "len" sağlanmalıdır. Varsayılan olarak bu işlev "Yenilenir"
(yani realloc, move) "ptr" tarafından işaret edilen hafıza, böylece bu işaretçi
sv_usepvn'ye verdikten sonra programcı tarafından serbest bırakıldı veya kullanıldı ve hiçbiri
o işaretçinin "arkasından" herhangi bir işaretçi (örn. ptr + 1) kullanılabilir.

"flags" & SV_SMAGIC doğruysa, SvSETMAGIC'i çağırır. Eğer "bayraklar" &
SV_HAS_TRAILING_NUL doğrudur, o zaman "ptr[len]" "NUL" olmalıdır ve realloc
atlanabilir (yani arabellek gerçekte "len"den en az 1 bayt daha uzundur ve
zaten "SvPVX" içinde depolama gereksinimlerini karşılıyor).

void sv_usepvn_flags(SV *const sv, char* ptr,
sabit STRLEN len,
const U32 bayrakları)

sv_utf8_decode
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

SV'nin PV'si UTF-8'de bir sekizli diziyse ve birden çok bayt içeriyorsa
karakteri, bir karakter gibi görünmesi için "SvUTF8" bayrağı açılır. Eğer
PV yalnızca tek baytlık karakterler içerir, "SvUTF8" bayrağı kapalı kalır. taramalar
Geçerlilik için PV ve PV geçersizse yanlış döndürür UTF-8.

bool sv_utf8_decode(SV *const sv)

sv_utf8_downgrade
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Bir SV'nin PV'sini karakterlerden bayta dönüştürmeye çalışır. PV içeriyorsa
bir bayta sığmayan bir karakter, bu dönüştürme başarısız olur; bu durumda,
ya false döndürür ya da "fail_ok" doğru değilse, croaks.

Bu genel amaçlı bir Unicode'dan bayta kodlama arabirimi değildir: Encode'u kullanın
bunun için uzatma.

bool sv_utf8_downgrade(SV *sabit sv,
const bool başarısız_tamam)

sv_utf8_encode
Bir SV'nin PV'sini UTF-8'e dönüştürür, ancak daha sonra "SvUTF8" bayrağını kapatır, böylece
yine sekizli gibi görünüyor.

geçersiz sv_utf8_encode(SV *const sv)

sv_utf8_upgrade
Bir SV'nin PV'sini UTF-8 kodlu biçimine dönüştürür. SV'yi dize biçimine zorlar
zaten değilse. Uygunsa "sv" üzerinde "mg_get" olur. Her zaman ayarlar
Tüm dize aynı olsa bile gelecekteki geçerlilik kontrollerinden kaçınmak için SvUTF8 bayrağı
UTF-8'de değil. Dönüştürülen dizedeki bayt sayısını döndürür

Bu, Unicode arayüzüne genel amaçlı bir bayt kodlaması değildir: Kodlamayı kullanın
bunun için uzatma.

STRLEN sv_utf8_upgrade(SV *sv)

sv_utf8_upgrade_flags
Bir SV'nin PV'sini UTF-8 kodlu biçimine dönüştürür. SV'yi dize biçimine zorlar
zaten değilse. Gelecekteki geçerlilik kontrollerinden kaçınmak için her zaman SvUTF8 bayrağını ayarlar
UTF-8'de tüm baytlar değişmez olsa bile. "flags", "SV_GMAGIC" bit setine sahipse,
uygunsa "sv" üzerinde "mg_get" olur, aksi takdirde olmaz.

Eğer "bayraklar" SV_FORCE_UTF8_UPGRADE ayarlıysa, bu fonksiyon PV'nin
UTF-8'e dönüştürüldüğünde genişler ve bunun için ekstra kontrol işini atlar.
Tipik olarak bu bayrak, dizeyi zaten ayrıştırmış olan bir rutin tarafından kullanılır ve
bu tür karakterleri bulur ve bu bilgiyi iletir, böylece iş
tekrarlanmak zorunda.

Dönüştürülen dizedeki bayt sayısını döndürür.

Bu, Unicode arayüzüne genel amaçlı bir bayt kodlaması değildir: Kodlamayı kullanın
bunun için uzatma.

STRLEN sv_utf8_upgrade_flags(SV *const sv,
const I32 bayrakları)

sv_utf8_upgrade_flags_grow
sv_utf8_upgrade_flags gibi, ancak ek bir "ekstra" parametresi var, bu da
kullanılmayan bayt sayısı 'sv' dizisinin ardından boş olması garanti edilir
geri dönmek. Bu, arayanın doldurmak istediği fazladan alanı ayırmasına olanak tanır.
ekstra büyümelerden kaçının.

"sv_utf8_upgrade", "sv_utf8_upgrade_nomg" ve "sv_utf8_upgrade_flags"
bu işlev açısından uygulanmaktadır.

Dönüştürülen dizedeki bayt sayısını döndürür (yedekler hariç).

STRLEN sv_utf8_upgrade_flags_grow(SV *sabit sv,
const I32 bayrakları,
ekstra STRLEN)

sv_utf8_upgrade_nomg
sv_utf8_upgrade gibi, ancak "sv" üzerinde sihir yapmıyor.

STRLEN sv_utf8_upgrade_nomg(SV *sv)

sv_vcatpvf
Argümanlarını "vsprintf" gibi işler ve biçimlendirilmiş çıktıyı bir SV'ye ekler.
'Set' büyüsünü işlemez. Bakınız "sv_vcatpvf_mg".

Genellikle ön ucu "sv_catpvf" aracılığıyla kullanılır.

void sv_vcatpvf(SV *const sv, const char *const pat,
va_list *sabit bağımsız değişkenler)

sv_vcatpvfn
void sv_vcatpvfn(SV *const sv, const char *const pat,
const STRLEN kalıbı,
va_list *sabit bağımsız değişkenler,
SV **const svargs, const I32 svmax,
bool *sabit belki_tainted)

sv_vcatpvfn_flags
Argümanlarını "vsprintf" gibi işler ve biçimlendirilmiş çıktıyı bir SV'ye ekler.
C stili değişken bağımsız değişken listesi eksikse (NULL) bir SV dizisi kullanır.
Leke kontrolleri etkinken çalıştırıldığında, sonuçlar varsa "maybe_tainted" aracılığıyla belirtir
güvenilmezdir (genellikle yerel ayarların kullanılması nedeniyle).

"sv_vcatpvfn" olarak çağrılırsa veya işaretler "SV_GMAGIC" içeriyorsa, çağrılar sihirli olur.

Genellikle "sv_vcatpvf" ve "sv_vcatpvf_mg" ön uçlarından biri aracılığıyla kullanılır.

geçersiz sv_vcatpvfn_flags(SV *const sv,
const char *const pat,
const STRLEN kalıbı,
va_list *sabit bağımsız değişkenler,
SV **const svargs,
sabit I32 svmax,
bool *const belki_tainted,
const U32 bayrakları)

sv_vcatpvf_mg
"sv_vcatpvf" gibi, ama aynı zamanda 'set' sihrini de işler.

Genellikle "sv_catpvf_mg" ön ucu aracılığıyla kullanılır.

geçersiz sv_vcatpvf_mg(SV *const sv,
const char *const pat,
va_list *sabit bağımsız değişkenler)

sv_vsetpvf
"sv_vcatpvf" gibi çalışır ancak metni eklemek yerine SV'ye kopyalar.
'Set' büyüsünü işlemez. Bakınız "sv_vsetpvf_mg".

Genellikle ön ucu "sv_setpvf" aracılığıyla kullanılır.

void sv_vsetpvf(SV *const sv, const char *const pat,
va_list *sabit bağımsız değişkenler)

sv_vsetpvfn
"sv_vcatpvfn" gibi çalışır ancak metni eklemek yerine SV'ye kopyalar.

Genellikle "sv_vsetpvf" ve "sv_vsetpvf_mg" ön uçlarından biri aracılığıyla kullanılır.

void sv_vsetpvfn(SV *const sv, const char *const pat,
const STRLEN kalıbı,
va_list *sabit bağımsız değişkenler,
SV **const svargs, const I32 svmax,
bool *sabit belki_tainted)

sv_vsetpvf_mg
"sv_vsetpvf" gibi, ama aynı zamanda 'set' sihrini de işler.

Genellikle "sv_setpvf_mg" ön ucu aracılığıyla kullanılır.

geçersiz sv_vsetpvf_mg(SV *const sv,
const char *const pat,
va_list *sabit bağımsız değişkenler)

Unicode Destek


Perlguts'taki "Unicode Desteği" bu API'ye bir giriş içerir.

Ayrıca bkz. "Karakter sınıflandırması" ve "Karakter durumu değiştirme". Çeşitli işlevler
bu bölümün dışında ayrıca Unicode ile özel olarak çalışır. İçinde "utf8" dizesini arayın
bu belge.

bayt_cmp_utf8
"b", "blen"deki karakter dizisini (sekizli olarak depolanan) aşağıdakilerle karşılaştırır:
"u", "ulen" içindeki karakter dizisi (UTF-8 olarak saklanır). varsa 0 döndürür
eşittir, -1 veya -2 birinci dizi ikinci diziden küçükse, +1 veya +2 ​​ise
birinci dizi ikinci diziden daha büyüktür.

-1 veya +1, daha kısa olan dizgi başlangıç ​​ile aynıysa döndürülür.
daha uzun dize Karakterler arasında fark varsa -2 veya +2 ​​döndürülür
dizeler içinde.

int bytes_cmp_utf8(const U8 *b, STRLEN blen,
const U8 *u, STRLEN ulen)

bytes_from_utf8
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

UTF-8'den "len" uzunluğundaki bir "s" dizesini yerel bayt kodlamasına dönüştürür.
"utf8_to_bytes"in aksine, ancak "bytes_to_utf8" gibi, yeni-
oluşturulan dize ve yeni uzunluğu içerecek şekilde "len" günceller. orijinali döndürür
dize, herhangi bir dönüştürme olmazsa, "len" değişmez. "is_utf8" ise hiçbir şey yapmayın
0'a işaret eder. "s" dönüştürülürse veya tamamen şunlardan oluşursa "is_utf8" değerini 0 olarak ayarlar
utf8'de değişmez olan karakterler (yani, EBCDIC olmayan makinelerde US-ASCII).

U8* bytes_from_utf8(sabit U8 *s, STRLEN *len,
bool *is_utf8)

bayt_to_utf8
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

Yerel kodlamadan "len" bayt uzunluğundaki bir "s" dizesini UTF-8'e dönüştürür.
Yeni oluşturulan dizgeye bir işaretçi döndürür ve "len"i yeni dizgeyi yansıtacak şekilde ayarlar.
bayt cinsinden uzunluk.

Dizenin sonundan sonra bir "NUL" karakteri yazılacaktır.

Yerel dışındaki kodlamalardan UTF-8'e dönüştürmek istiyorsanız (Latin1 veya
EBCDIC), bkz. "sv_recode_to_utf8"().

U8* bayt_to_utf8(sabit U8 *s, STRLEN *uzunluk)

DO_UTF8 "sv" içindeki PV'nin verili olarak ele alınıp alınmayacağını belirten bir bool döndürür.
UTF-8 ile kodlanmıştır.

bunu kullanmalısın sonra herhangi bir durumda "SvPV()" veya türevlerinden birine yapılan bir çağrı
dizeye yapılan aşırı yükleme çağrısı, dahili UTF-8 kodlama bayrağını günceller.

bool DO_UTF8(SV* sv)

katlamaEQ_utf8
"s1" ve "s2" dizelerinin önde gelen bölümleri (biri veya her ikisi) ise true döndürür
UTF-8'de olabilir) büyük/küçük harfe duyarsız olarak aynıdır; Aksi takdirde yanlış. Nasıl
Karşılaştırılacak dizelerin çok uzağında, diğer giriş parametreleri tarafından belirlenir.

"u1" doğruysa, "s1" dizisinin UTF-8 kodlu Unicode olduğu varsayılır;
aksi takdirde yerel 8 bitlik kodlamada olduğu varsayılır. Buna uygun olarak "u2" için
"s2" ile ilgili olarak.

Bayt uzunluğu "l1" sıfır değilse, "s1"in katlamanın ne kadar kontrol edileceğini söyler.
eşitlik. Yani ulaşmak için bir hedef olarak "s1"+"l1" kullanılacaktır. tarama
hedefe ulaşılmadığı ve tarama yapılmadığı sürece maç sayılmaz.
bu hedefi geçtikten sonra devam etmeyecek. "s2"ye göre "l2" için buna uygun olarak.

"pe1" NULL değilse ve işaret ettiği işaretçi NULL değilse, bu işaretçi
"s1"deki maksimum noktayı 1 bayt geçen konuma bir bitiş işaretçisi olarak kabul edilir
bunun ötesinde tarama hiçbir koşulda devam etmeyecektir. (Bu rutin
UTF-8 kodlu giriş dizilerinin bozuk olmadığını varsayar; hatalı biçimlendirilmiş giriş kutusu
"pe1") geçmişini okumasına neden olur). Bunun anlamı, eğer hem "l1" hem de "pe1"
belirtilmişse ve "pe1", "s1"+"l1"den küçükse, maç asla başarılı olmaz
çünkü hiçbir zaman amacına ulaşamaz (ve aslında karşı çıkılmaktadır).
"s2"ye göre "pe2" için buna uygun olarak.

"s1" ve "s2"den en az birinin bir hedefi olmalıdır ("l1" ve "l2"den en az biri
sıfır olmayan) ve her ikisi de varsa, başarılı bir eşleşme için her ikisine de ulaşılması gerekir.
Ayrıca, bir karakterin kıvrımı birden fazla karakter ise, hepsinin aynı olması gerekir.
eşleştirildi ('katlama' için aşağıdaki tr21 referansına bakın).

Başarılı bir eşleşmenin ardından, "pe1" NULL değilse,
başlangıcı sonraki eşleşenin ötesinde "s1" karakteri. buna bağlı olarak
"pe2" ve "s2" için.

Büyük/küçük harf duyarsızlığı için, Unicode'un "büyük/küçük harfe katlanması" yerine kullanılır.
her iki karakteri de büyük/küçük harfe çevirin, bkz.
<http://www.unicode.org/unicode/reports/tr21/> (Vaka Eşlemeleri).

I32 FoldEQ_utf8(const karakter *s1, karakter **pe1, UV l1,
bool u1, const karakter *s2, karakter **pe2,
UV l2, bool u2)

UTF8_CHAR
Yasal bir UTF-8 (veya UTF-XNUMX) oluşturan "s" ile başlayan bayt sayısını döndürür.
EBCDIC) kodlanmış karakter, "e - s" baytlarından "s"ye bakmaktan öteye bakmaz.
"s" ile "e - 0" arasında başlayan dizi düzgün biçimlendirilmemişse 1 döndürür UTF-8

DEĞİŞİMSİZ bir karakterin (örn. EBCDIC olmayan makinelerde ASCII) geçerli bir karakter olduğunu unutmayın.
UTF-8 karakteri.

STRLEN isUTF8_CHAR(sabit U8 *s, sabit U8 *e)

is_ascii_string
Bu, "is_invariant_string" için yanıltıcı bir şekilde adlandırılmış bir eş anlamlıdır. ASCII-ish üzerinde
platformlarda, ad yanıltıcı değildir: ASCII aralığındaki karakterler tam olarak
UTF-8 değişmezleri. Ancak EBCDIC makineleri, ASCII'den daha fazla değişmeze sahiptir.
karakterler, dolayısıyla "is_invariant_string" tercih edilir.

bool is_ascii_string(sabit U8 *s, STRLEN len)

değişmez_dize
"s" dizisinin ilk "len" baytları ne olursa olsun aynıysa true değerini döndürür
dizinin UTF-8 kodlaması (veya EBCDIC makinelerinde UTF-EBCDIC kodlaması).
Yani, UTF-8 değişmezi iseler. ASCII benzeri makinelerde, tüm ASCII
karakterler ve yalnızca ASCII karakterleri bu tanıma uyar. EBCDIC makinelerinde,
ASCII-aralığı karakterleri değişmezdir, ancak C1 kontrolleri ve
"\c?" (EBCDIC'de ASCII aralığında olmayan).

"len" 0 ise, strlen(ler) kullanılarak hesaplanacaktır (bu, bunu kullanırsanız anlamına gelir)
seçeneği, bu "s" gömülü "NUL" karakterlerine sahip olamaz ve
"NUL" baytını sonlandırmak).

Ayrıca bkz. "is_utf8_string"(), "is_utf8_string_loclen"() ve
"is_utf8_string_loc"().

bool is_invariant_string(const U8 *s, STRLEN len)

is_utf8_string
"s" dizisinin ilk "len" baytı geçerli bir UTF-8 dizisi oluşturuyorsa, true değerini döndürür,
Aksi takdirde yanlış. "len" 0 ise, strlen(ler) kullanılarak hesaplanacaktır (bu
bu seçeneği kullanırsanız, "s"nin "NUL" karakterleri içeremeyeceği ve
sonlandırıcı bir "NUL" baytı olmalıdır). Tüm karakterlerin ASCII olduğuna dikkat edin
'geçerli bir UTF-8 dizisi' oluşturur.

Ayrıca bkz. "is_invariant_string"(), "is_utf8_string_loclen"() ve
"is_utf8_string_loc"().

bool is_utf8_string(const U8 *s, STRLEN len)

is_utf8_string_loc
"is_utf8_string" gibi, ancak hatanın yerini saklar (durumunda
"utf8ness hatası") veya "s"+"len" konumu ("utf8ness başarısı" durumunda)
"ep" de.

Ayrıca bkz. "is_utf8_string_loclen"() ve "is_utf8_string"().

bool is_utf8_string_loc(const U8 *s, STRLEN len,
sabit U8 **ep)

is_utf8_string_loclen
"is_utf8_string"() gibi, ancak hatanın konumunu saklar (durumunda
"utf8ness hatası") veya "s"+"len" konumu ("utf8ness başarısı" durumunda)
"ep" de ve "el" de UTF-8 kodlu karakterlerin sayısı.

Ayrıca bkz. "is_utf8_string_loc"() ve "is_utf8_string"().

bool is_utf8_string_loclen(const U8 *s, STRLEN len,
sabit U8 **ep, STRLEN *el)

pv_uni_display
"dsv" skalerine, "spv" dizisinin görüntülenebilir bir sürümünü oluşturun, uzunluk "len",
görüntülenebilir sürüm en çok "pvlim" bayt uzunluğundadır (eğer daha uzunsa, geri kalanı
kısaltılır ve "..." eklenir).

"flags" bağımsız değişkeni, UNI_DISPLAY_ISPRINT'i görüntülenecek şekilde ayarlamış olabilir isPRINT()yapabilmek
karakterleri kendileri olarak, UNI_DISPLAY_BACKSLASH \\[nrfta\\] karakterini
ters eğik çizgili sürümler ('\n' gibi) (UNI_DISPLAY_BACKSLASH yerine tercih edilir)
\\ için UNI_DISPLAY_ISPRINT). UNI_DISPLAY_QQ (ve takma adı UNI_DISPLAY_REGEX)
hem UNI_DISPLAY_BACKSLASH hem de UNI_DISPLAY_ISPRINT açık olmalıdır.

"dsv"nin PV'sine işaretçi döndürülür.

Ayrıca bkz. "sv_uni_display".

char* pv_uni_display(SV *dsv, sabit U8 *spv,
STRLEN len, STRLEN pvlim,
UV bayrakları)

sv_cat_decode
Kodlamanın bir Kodlama nesnesi olduğu varsayılır, ssv'nin PV'sinin
girişin kodlanması ve kodunun çözülmesi şu konumdan başlar: (PV
+ *ofset) işaret etti. dsv, kodu çözülmüş UTF-8 dizesini şuradan birleştirecek:
ssv. Kod çözme çıktısında tstr dizesi göründüğünde kod çözme sona erecek veya
giriş ssv'nin PV'sinde biter. Ofset noktalarının olacağı değer
ssv'deki son giriş konumuna değiştirildi.

Sonlandırıcı bulunursa DOĞRU, aksi takdirde YANLIŞ döndürür.

bool sv_cat_decode(SV* dsv, SV *kodlama, SV *ssv,
int *offset, char* tstr, int tlen)

sv_recode_to_utf8
Kodlamanın bir Kodlama nesnesi olduğu varsayılır, girişte sv'nin PV'si
bu kodlamada sekizli olduğu varsayılır ve sv Unicode'a dönüştürülür
(ve UTF-8).

sv zaten UTF-8 ise (veya POK değilse) veya kodlama bir
referans, sv'ye hiçbir şey yapılmaz. Kodlama bir "Encode::XS" değilse
Kodlama nesnesi, kötü şeyler olacak. (Görmek lib/kodlama.pm ve Kodla.)

sv'nin PV'si döndürülür.

char* sv_recode_to_utf8(SV* sv, SV *kodlama)

sv_uni_display
Skaler "dsv"ye skaler "sv"nin görüntülenebilir bir sürümünü oluşturun,
görüntülenebilir sürüm en çok "pvlim" bayt uzunluğundadır (eğer daha uzunsa, geri kalanı
kısaltılır ve "..." eklenir).

"flags" bağımsız değişkeni "pv_uni_display"()'deki gibidir.

"dsv"nin PV'sine işaretçi döndürülür.

char* sv_uni_display(SV *dsv, SV *ssv, STRLEN pvlim,
UV bayrakları)

to_utf8_case
"p", oluşturulmakta olan karakteri kodlayan UTF-8 dizesinin işaretçisini içerir.
dönüştürüldü. Bu rutin, "p"deki karakterin iyi biçimlendirilmiş olduğunu varsayar.

"ustrp", dönüştürme sonucunu koymak için karakter arabelleğine yönelik bir işaretçidir.
"lenp", sonucun uzunluğunu gösteren bir işaretçidir.

"swashp", kullanılacak swash için bir işaretçidir.

Hem özel hem de normal eşlemeler, lib/unicore/To/Foo.pl, ve
SWASHNEW tarafından yüklendi, lib/utf8_heavy.pl. "özel" (genellikle, ancak her zaman değil,
önce çok karakterli eşleme) denenir.

"özel", normalde "NULL" veya "" olan bir dizedir. "NULL", herhangi bir özel kullanmamak anlamına gelir
eşlemeler; "", özel eşlemeleri kullanmak anlamına gelir. Bu ikisinin dışındaki değerler
gibi özel eşlemeleri içeren karmanın adı olarak ele alınır.
"utf8::ToSpecLower".

"normal", %utf8::ToLower swash anlamına gelen "ToLower" gibi bir dizedir.

UV to_utf8_case(sabit U8 *p, U8* ustrp,
STRLEN *lenp, SV **swashp,
const karakter *normal,
const char *özel)

to_utf8_fold
Bunun yerine "toFOLD_utf8" kullanın.

UV to_utf8_fold(sabit U8 *p, U8* ustrp,
STRLEN *lenp)

to_utf8_lower
Bunun yerine "toLOWER_utf8" kullanın.

UV to_utf8_lower(sabit U8 *p, U8* ustrp,
STRLEN *lenp)

to_utf8_title
Bunun yerine "toTITLE_utf8" kullanın.

UV to_utf8_title(sabit U8 *p, U8* ustrp,
STRLEN *lenp)

to_utf8_upper
Bunun yerine "toUPPER_utf8" kullanın.

UV to_utf8_upper(sabit U8 *p, U8* ustrp,
STRLEN *lenp)

utf8n_to_uvchr
BU İŞLEV SADECE ÇOK ÖZEL DURUMLARDA KULLANILMALIDIR. Çoğu kod
doğrudan çağırmak yerine "utf8_to_uvchr_buf"() kullanmalıdır.

Alt düzey UTF-8 kod çözme yordamı. Yerel kod noktası değerini döndürür
UTF-8'de (veya UTF-EBCDIC) olduğu varsayılan "s" dizisindeki ilk karakter
kodlama ve "curlen" bayttan uzun olmayan; *retlen ("retlen" NULL değilse)
o karakterin bayt cinsinden uzunluğuna ayarlanmalıdır.

"flags" değeri, "s" bir kuyuya işaret etmediğinde davranışı belirler.
UTF-8 karakteri oluşturdu. "İşaretler" 0 ise, bir malformasyon bulunduğunda, sıfır
döndürülür ve *retlen ("s" + *retlen) bir sonraki olası konum olacak şekilde ayarlanır
bozuk biçimlendirilmemiş bir karakterle başlayabilecek "s" içinde. Ayrıca, UTF-8 uyarıları ise
sözcüksel olarak devre dışı bırakılmadıysa, bir uyarı verilir.

Bireylere izin vermek (ve uyarmamak) için çeşitli ALLOW bayrakları "bayraklarda" ayarlanabilir
dizinin aşırı uzun olması gibi malformasyon türleri (yani,
aynı kod noktasını ifade edebilen daha kısa bir dizidir; aşırı uzun diziler
potansiyel güvenlik sorunları nedeniyle UTF-8 standardında açıkça yasaklanmıştır).
Başka bir hatalı biçimlendirme örneği, bir karakterin ilk baytının geçerli olmamasıdır.
ilk bayt Görmek utf8.h bu tür bayrakların listesi için. İzin verilen 0 uzunluklu diziler için,
bu işlev 0 döndürür; izin verilen aşırı uzun diziler için, hesaplanan kod noktası
Geri döndü; izin verilen tüm diğer malformasyonlar için, Unicode REPLACEMENT
CHARACTER, bunların belirlenebilir makul bir değeri olmadığı için döndürülür.

UTF8_CHECK_ONLY bayrağı, izin verilmediğinde (diğerleri tarafından) davranışı geçersiz kılar.
bayraklar) malformasyon bulundu. Bu bayrak ayarlanırsa, rutin
arayan bir uyarı verecek ve bu işlev sessizce "retlen" öğesini şu şekilde ayarlayacaktır:
"-1" ("STRLEN" olarak yayınlayın) ve sıfır döndürün.

Bu API'nin başarılı bir "NUL" kodunun çözülmesi arasında netleştirme gerektirdiğini unutmayın.
karakter ve bir hata dönüşü (UTF8_CHECK_ONLY bayrağı ayarlanmadıkça), aşağıdaki gibi
her iki durumda da 0 döndürülür. Belirsizliği gidermek için, sıfır dönüşü üzerine, ilkinin olup olmadığına bakın.
"s" baytı da 0'dır. Eğer öyleyse, giriş bir "BOŞ" idi; değilse, girişin bir
hata.

Belirli kod noktaları sorunlu kabul edilir. Bunlar Unicode vekilleridir,
Unicode karakter olmayanlar ve Unicode maksimum değeri olan 0x10FFFF'nin üzerindeki kod noktaları. İle
varsayılan olarak bunlar normal kod noktaları olarak kabul edilir, ancak bazı durumlar
onlar için özel muamele. "flags" UTF8_DISALLOW_ILLEGAL_INTERCHANGE içeriyorsa,
her üç sınıf da malformasyon olarak ele alınır ve bu şekilde ele alınır. bayraklar
UTF8_DISALLOW_SURROGATE, UTF8_DISALLOW_NONCHAR ve UTF8_DISALLOW_SUPER (anlamı
yasal Unicode maksimumunun üzerinde) bu kategorilere izin verilmeyecek şekilde ayarlanabilir
tek tek.

Bayraklar UTF8_WARN_ILLEGAL_INTERCHANGE, UTF8_WARN_SURROGATE, UTF8_WARN_NONCHAR,
ve UTF8_WARN_SUPER, ilgili uyarı mesajlarının yükseltilmesine neden olur.
kategoriler, ancak aksi takdirde kod noktaları geçerli kabul edilir (değil
malformasyonlar). Hem malformasyon olarak ele alınacak hem de yükseltilecek bir kategori elde etmek için
bir uyarı, hem WARN hem de DISALLOW bayraklarını belirtin. (Ancak uyarıların
sözcüksel olarak devre dışı bırakılmışsa veya UTF8_CHECK_ONLY ayrıca belirtilmişse yükseltilmez.)

Çok büyük kod noktaları (0x7FFF_FFFF'nin üzerinde) daha sorunlu kabul edilir.
Unicode yasal maksimum değerinin üzerinde olan diğerleri. Birkaç sebep var:
ASCII platformlarında temsil edilmeleri için en az 32 bit gerekir,
EBCDIC platformlarında ve orijinal UTF-8 spesifikasyonunda tamamen temsil edilebilir
asla bu sayının üzerine çıkmadı (mevcut 0x10FFFF sınırı daha sonra getirildi). (
32 bite uyan daha küçük olanlar, ASCII'de bir UV ile temsil edilebilir.
platformlar, ancak bir IV ile değil, yani yapılabilecek işlem sayısı
üzerlerinde gerçekleştirilen oldukça kısıtlıdır.) ASCII platformlarında UTF-8 kodlaması
bu büyük kod noktaları, 0xFE veya 0xFF içeren bir bayt ile başlar. bu
UTF8_DISALLOW_FE_FF işareti, kusurlu oluşumlar olarak değerlendirilmelerine neden olurken,
daha küçük Unicode üstü kod noktalarına izin verir. (Elbette UTF8_DISALLOW_SUPER olacak
Bunlar da dahil olmak üzere, Unicode üzerindeki tüm kod noktalarını hatalı biçimlendirme olarak kabul edin.)
Benzer şekilde, UTF8_WARN_FE_FF, diğer WARN bayrakları gibi davranır, ancak yalnızca geçerlidir.
bu kod noktalarına

Özel kullanım dahil, Unicode karakterlere karşılık gelen diğer tüm kod noktaları
ve henüz atanmamış olanlar asla hatalı olarak kabul edilmez ve asla uyarılmaz.

UV utf8n_to_uvchr(sabit U8 *s, STRLEN bukle,
STRLEN *retlen, U32 bayrakları)

utf8n_to_uvuni
Bunun yerine "utf8_to_uvchr_buf" veya nadiren "utf8n_to_uvchr" kullanın.

Bu işlev, hem EBCDIC hem de ASCII'yi işlemek isteyen kodlar için kullanışlıdır.
Unicode özelliklerine sahip platformlar, ancak Perl v5.20'den başlayarak, ayrımlar
platformlar arasında çoğunlukla çoğu kod için görünmez hale getirildi, bu yüzden bu
işlevinin istediğiniz gibi olması pek olası değildir. Bu kesinliğe ihtiyacınız varsa
işlevsellik, bunun yerine "NATIVE_TO_UNI(utf8_to_uvchr_buf(...))" kullanın veya
"NATIVE_TO_UNI(utf8n_to_uvchr(...))".

UV utf8n_to_uvuni(sabit U8 *s, STRLEN bukle,
STRLEN *retlen, U32 bayrakları)

UTF8SKIP
ilk (belki de
yalnızca) bayt "s" ile gösterilir.

STRLEN UTF8SKIP(karakter* ler)

utf8_distance
"a" ve "b" UTF-8 işaretçileri arasındaki UTF-8 karakterlerinin sayısını döndürür.

UYARI: yalnızca işaretçilerin aynı UTF-8'in içine baktığını *biliyorsanız* kullanın
tampon eklendi.

IV utf8_distance(sabit U8 *a, sabit U8 *b)

utf8_hop
UTF-8 işaretçisini "s", "kapalı" karakterlerle değiştirilerek ileri veya geri döndürün
geriye.

UYARI: "off" un UTF-8 verileri içinde olduğunu *bilmedikçe* aşağıdakini kullanmayın
"s" *ve* ile gösterilen, "s" girişinde ilk bayt üzerinde hizalanmıştır.
karakter veya bir karakterin son baytından hemen sonra.

U8* utf8_hop(sabit U8 *s, I32 kapalı)

utf8_length
UTF-8 karakter kodlu "s" dizisinin uzunluğunu karakter cinsinden döndürür. durur
"e" (dahil). "e < s" ise veya tarama "e"yi geçerse, vıraklar.

STRLEN utf8_length(sabit U8* s, sabit U8 *e)

utf8_to_bytes
NOT: Bu işlev deneyseldir ve önceden haber verilmeksizin değiştirilebilir veya kaldırılabilir.

UTF-8'den "len" uzunluğundaki bir "s" dizesini yerel bayt kodlamasına dönüştürür.
"bytes_to_utf8"den farklı olarak bu, orijinal dizgenin üzerine yazar ve "len"i şu şekilde günceller:
yeni uzunluğu içerir. Başarısızlık durumunda sıfır döndürür, "len" -1 olarak ayarlanır.

Dizenin bir kopyasına ihtiyacınız varsa, "bytes_from_utf8" bölümüne bakın.

U8* utf8_to_bytes(U8 *s, STRLEN *uzunluk)

utf8_to_uvchr_buf
"s" dizesindeki ilk karakterin yerel kod noktasını döndürür.
UTF-8 kodlamasında olduğu varsayılmıştır; "gönder", "s"nin sonunun ötesindeki 1'i işaret eder.
*retlen, o karakterin bayt cinsinden uzunluğuna ayarlanacaktır.

"s" iyi biçimlendirilmiş bir UTF-8 karakterini göstermiyorsa ve UTF8 uyarıları
etkin, sıfır döndürülür ve *retlen ("retlen" NULL değilse) -1 olarak ayarlanır. Eğer
bu uyarılar kapalıdır, iyi tanımlanmışsa hesaplanan değer (veya Unicode
REPLACEMENT KARAKTER değilse), sessizce döndürülür ve *retlen ayarlanır (eğer
"retlen" NULL değildir), bu nedenle ("s" + *retlen) "s" içindeki bir sonraki olası konumdur
bu, hatalı biçimlendirilmemiş bir karaktere başlayabilir. Ayrıntılar için bkz. "utf8n_to_uvchr"
DEĞİŞTİRME KARAKTERİ döndürüldüğünde.

UV utf8_to_uvchr_buf(sabit U8 *s, sabit U8 *gönder,
STRLEN *biraz daha)

utf8_to_uvuni_buf
KULLANIMDAN KALDIRILDI! Bu işlevin Perl'in gelecekteki bir sürümünden kaldırılması planlanmaktadır.
Yeni kod için kullanmayın; mevcut koddan kaldırın.

Yalnızca çok nadir durumlarda kodun Unicode'da işlem görmesi gerekir (aslında
yerel) kod noktalarına karşı. Bu birkaç durumda,
Bunun yerine "NATIVE_TO_UNI(utf8_to_uvchr_buf(...))".

Dizedeki ilk karakterin Unicode (yerel olmayan) kod noktasını döndürür
UTF-8 kodlamasında olduğu varsayılan "s"; "gönder", sonunun ötesindeki 1'i işaret eder
"S". "retlen", o karakterin bayt cinsinden uzunluğuna ayarlanacaktır.

"s" iyi biçimlendirilmiş bir UTF-8 karakterini göstermiyorsa ve UTF8 uyarıları
etkin, sıfır döndürülür ve *retlen ("retlen" NULL değilse) -1 olarak ayarlanır. Eğer
bu uyarılar kapalıdır, iyi tanımlanmışsa hesaplanan değer (veya Unicode
DEĞİŞTİRME KARAKTER, değilse) sessizce döndürülür ve *retlen ayarlanır (eğer değilse
"retlen" NULL değildir), bu nedenle ("s" + *retlen) "s" içindeki bir sonraki olası konumdur
bu, hatalı biçimlendirilmemiş bir karaktere başlayabilir. Ayrıntılar için bkz. "utf8n_to_uvchr"
DEĞİŞTİRME KARAKTERİ döndürüldüğünde.

UV utf8_to_uvuni_buf(sabit U8 *s, sabit U8 *gönder,
STRLEN *biraz daha)

UVCHR_SKIP
kodlandığında "cp" kod noktasını temsil etmek için gereken bayt sayısını döndürür
UTF-8 olarak. "cp", 255'ten küçükse bir yerel (ASCII veya EBCDIC) kod noktasıdır; A
Aksi takdirde Unicode kod noktası.

STRLEN UVCHR_SKIP(UV cp)

uvchr_to_utf8
"uv" yerel kod noktasının UTF-8 temsilini, satırın sonuna ekler.
dizi "d"; "d" en az "UVCHR_SKIP(uv)+1" değerine sahip olmalıdır ("UTF8_MAXBYTES+1"e kadar)
ücretsiz bayt mevcut. Dönüş değeri, sondan sonraki baytın işaretçisidir.
yeni karakterin. Başka bir deyişle,

d = uvchr_to_utf8(d, uv);

önerilen geniş yerel karaktere duyarlı söyleme şeklidir

*(d++) = uv;

Bu fonksiyon herhangi bir UV'yi giriş olarak kabul eder. Unicode olmayan kodu yasaklamak veya uyarmak için
noktalar veya sorunlu olabilecek noktalar için bkz. "uvchr_to_utf8_flags".

U8* uvchr_to_utf8(U8 *d, UV uv)

uvchr_to_utf8_flags
"uv" yerel kod noktasının UTF-8 temsilini, satırın sonuna ekler.
dizi "d"; "d" en az "UVCHR_SKIP(uv)+1" değerine sahip olmalıdır ("UTF8_MAXBYTES+1"e kadar)
ücretsiz bayt mevcut. Dönüş değeri, sondan sonraki baytın işaretçisidir.
yeni karakterin. Başka bir deyişle,

d = uvchr_to_utf8_flags(d, uv, bayraklar);

veya çoğu durumda,

d = uvchr_to_utf8_flags(d, uv, 0);

Bu, Unicode uyumlu söyleme şeklidir

*(d++) = uv;

Bu işlev, olmayan kod noktalarını bile UTF-8'e dönüştürür (ve uyarmaz).
yasal Unicode veya "bayraklar" bir veya daha fazlasını içermediği sürece sorunludur.
aşağıdaki bayraklar:

"uv" bir Unicode vekil kod noktasıysa ve UNICODE_WARN_SURROGATE ayarlanmışsa,
işlevi, UTF8 uyarılarının etkinleştirilmesi koşuluyla bir uyarı verir. Bunun yerine
UNICODE_DISALLOW_SURROGATE ayarlanır, işlev başarısız olur ve NULL değerini döndürür. Eğer
her iki bayrak da ayarlandı, işlev hem uyaracak hem de NULL döndürecektir.

UNICODE_WARN_NONCHAR ve UNICODE_DISALLOW_NONCHAR bayrakları,
işlev, bir Unicode olmayan karakteri işler. Ve aynı şekilde UNICODE_WARN_SUPER
ve UNICODE_DISALLOW_SUPER bayrakları, yukarıdaki kod noktalarının işlenmesini etkiler
Unicode maksimum 0x10FFFF. 0x7FFF_FFFF üzerindeki kod noktaları (çift
less portable), diğer Unicode üstü kodlar kullanılsa bile uyarılabilir ve/veya izin verilmeyebilir.
puanlar UNICODE_WARN_FE_FF ve UNICODE_DISALLOW_FE_FF işaretleriyle kabul edilir.

Ve son olarak, UNICODE_WARN_ILLEGAL_INTERCHANGE bayrağı dördünü de seçer.
UYARI bayraklarının üzerinde; ve UNICODE_DISALLOW_ILLEGAL_INTERCHANGE dördünü de seçer
Bayraklara İZİN VERMEYİN.

U8* uvchr_to_utf8_flags(U8 *d, UV uv, UV bayrakları)

uvoffuni_to_utf8_flags
BU FONKSİYON YALNIZCA ÇOK ÖZEL DURUMLARDA KULLANILMALIDIR. Yerine,
Neredeyse herşey kod meli kullanım "uvchr_to_utf8" or "uvchr_to_utf8_flags".

Bu işlev onlar gibidir, ancak girdi katı bir Unicode'dur (
yerel) kod noktası. Yalnızca çok nadir durumlarda kod,
yerel kod noktası.

Ayrıntılar için "uvchr_to_utf8_flags" açıklamasına bakın.

U8* uvoffuni_to_utf8_flags(U8 *d, UV uv, UV bayrakları)

uvuni_to_utf8_flags
Bunun yerine neredeyse kesinlikle "uvchr_to_utf8" veya "uvchr_to_utf8_flags" kullanmak istiyorsunuz.

Bu işlev, "uvoffuni_to_utf8_flags" için kullanımdan kaldırılmış bir eşanlamlıdır;
kullanımdan kaldırılmamakla birlikte, yalnızca izole durumlarda kullanılmalıdır. Bunlar
işlevler, hem EBCDIC hem de ASCII'yi işlemek isteyen kodlar için kullanışlıdır.
Unicode özelliklerine sahip platformlar, ancak Perl v5.20'den başlayarak, ayrımlar
platformlar arasında çoğunlukla çoğu kod için görünmez hale getirildi, bu yüzden bu
işlevinin istediğiniz gibi olması pek olası değildir.

U8* uvuni_to_utf8_flags(U8 *d, UV uv, UV bayrakları)

Değişkenler çevrimiçi kurslar düzenliyorlar. by "xsubpp" ve "xsubpp" fonksiyonlar


yeniXS protokolü
"xsubpp" tarafından XSUB'ları Perl alt birimleri olarak bağlamak için kullanılır. Yedeklere Perl prototipleri ekler.

XS_APIVERSION_BOOTCHECK
Bir XS modülünün Perl api sürümünün karşı derlendiğini doğrulamak için makro
yüklendiği Perl yorumlayıcısının api sürümüyle eşleşir.

XS_APIVERSION_BOOTCHECK;

XS_VERSION
Bir XS modülü için sürüm tanımlayıcısı. Bu genellikle otomatik olarak gerçekleştirilir.
"ExtUtils::MakeMaker". Bkz. "XS_VERSION_BOOTCHECK".

XS_VERSION_BOOTCHECK
Bir PM modülünün $VERSION değişkeninin XS modülününkiyle eşleştiğini doğrulamak için makro
"XS_VERSION" değişkeni. Bu genellikle "xsubpp" tarafından otomatik olarak gerçekleştirilir. Görmek
Perlx'lerde "VERSIONCHECK: Anahtar Kelime".

XS_VERSION_BOOTCHECK;

Sürüm


Yeni sürüm
Geçirilen SV'ye dayalı olarak yeni bir sürüm nesnesi döndürür:

SV *sv = yeni_versiyon(SV *ver);

Geçilen ver SV'yi değiştirmez. yükseltmek istiyorsanız "upg_version" bölümüne bakın.
SV.

SV* new_version(SV *versiyon)

ön tarama_versiyonu
Belirli bir dizenin bir sürüm nesnesi olarak ayrıştırılabileceğini, ancak ayrıştırılamayacağını doğrulayın.
aslında ayrıştırmayı gerçekleştirin. Katı veya gevşek doğrulama kuralları kullanabilir. Olabilmek
Ayrıştırma kodunu bir süre kaydetmek için isteğe bağlı olarak bir dizi ipucu değişkeni ayarlayın.
simgeleştirme

const char* prescan_version(const char *s, katı bool,
const char** hatası,
bool *sqv,
int *ssaw_decimal,
int *swidth, bool *salpha)

tarama_versiyonu
Ayrıştırılmış sürüm dizesinden sonraki karaktere de bir işaretçi döndürür
geçen SV'yi bir RV'ye yükseltmek gibi.

İşlev zaten var olan bir SV benzeri ile çağrılmalıdır

sv = yeniSV(0);
s = scan_version(s, SV *sv, bool qv);

Doğru değere sahip olduğundan emin olmak için dizide bazı ön işlemler gerçekleştirir.
bir sürümün özellikleri. Alt çizgi içeriyorsa nesneyi işaretler
(bu, bunun bir alfa sürümü olduğunu gösterir). Boolean qv, sürümün
olmasa bile birden çok ondalık sayıya sahipmiş gibi yorumlanmalıdır.

const char* scan_version(const char *s, SV *rv, bool qv)

upg_version
Sağlanan SV'nin bir sürüm nesnesine yerinde yükseltilmesi.

SV *sv = upg_version(SV *sv, bool qv);

Yükseltilmiş SV'ye bir işaretçi döndürür. zorlamak istiyorsanız boolean qv'yi ayarlayın
bu SV, "genişletilmiş" bir sürüm olarak yorumlanacak.

SV* upg_version(SV *ver, bool qv)

vcmp Sürüm nesnesi farkında cmp. Her iki işlenen de zaten şuna dönüştürülmüş olmalıdır:
sürüm nesneleri.

int vcmp(SV *lhv, SV *rhv)

vnormal Bir sürüm nesnesini kabul eder ve normalleştirilmiş dize gösterimini döndürür. Arama
sevmek:

sv = vnormal(rv);

NOT: nesneyi doğrudan veya RV içinde bulunan SV'yi iletebilirsiniz.

Döndürülen SV'nin yeniden sayımı 1'dir.

SV* vnormal(SV *vs)

vnumify Bir sürüm nesnesini kabul eder ve normalleştirilmiş kayan nokta temsilini döndürür.
gibi arayın:

sv = vnumify(rv);

NOT: nesneyi doğrudan veya RV içinde bulunan SV'yi iletebilirsiniz.

Döndürülen SV'nin yeniden sayımı 1'dir.

SV* sanallaştırma(SV *vs)

Vstringify
Perl'in önceki sürümleriyle maksimum uyumluluğu sürdürmek için bu
işlev, kayan nokta gösterimini veya çoklu noktalı gösterimi döndürür
orijinal versiyonun 1 veya daha fazla nokta içerip içermemesine bağlı olarak notasyon,
respectivamente.

Döndürülen SV'nin yeniden sayımı 1'dir.

SV* vstringify(SV *vs)

vverify SV'nin bir sürüm nesnesi için geçerli dahili yapı içerdiğini doğrular. BT
sürüm nesnesi (RV) veya hash'in kendisi (HV) iletilebilir. Eğer
yapı geçerlidir, HV'yi döndürür. Yapı geçersizse, döndürür
BOŞ.

SV *hv = vdoğrula(sv);

Yalnızca minimum yapıyı onayladığını unutmayın (kafanızın karışmaması için
ek karma girişler içerebilen türetilmiş sınıflar tarafından):

SV* doğrulama(SV *vs)

uyarı ve dieing


croak Bu, Perl'in "öl" işlevine yönelik bir XS arabirimidir.

Bir sprintf stili biçim kalıbı ve bağımsız değişken listesi alın. Bunlar oluşturmak için kullanılır
bir dize mesajı. Mesaj yeni bir satırla bitmiyorsa, o zaman
açıklandığı gibi, koddaki mevcut konumun bir göstergesiyle genişletildi
"mess_sv" için.

Hata mesajı bir istisna olarak kullanılacak ve varsayılan olarak kontrolü
en yakın çevreleyen "eval", ancak bir $SIG{__DIE__} tarafından değişikliğe tabidir
işleyici Her durumda, "croak" işlevi asla normal şekilde dönmez.

Tarihsel nedenlerle, "pat" null ise "ERRSV" ($@) içeriği
bir hata mesajı oluşturmak yerine bir hata mesajı veya nesnesi olarak kullanılır.
argümanlar. Dize olmayan bir nesne atmak veya bir hata mesajı oluşturmak istiyorsanız
kendiniz bir SV'ye sahipseniz, "croak_sv" işlevinin kullanılması tercih edilir;
"ERRSV"yi gizlemeyi içerir.

geçersiz croak(const char *pat, ...)

croak_no_modify
Tam olarak "Perl_croak(aTHX_ "%s", PL_no_modify)" ile eşdeğerdir, ancak terser oluşturur
"Perl_croak" kullanmaktansa nesne kodu. İstisna kod yollarında daha az kod kullanılır
CPU önbellek basıncını azaltır.

geçersiz croak_no_modify()

croak_sv
Bu, Perl'in "öl" işlevine yönelik bir XS arabirimidir.

"baseex" hata mesajı veya nesnesidir. Referans ise kullanılacaktır.
olduğu gibi. Aksi halde string olarak kullanılır ve yeni satır ile bitmiyorsa
daha sonra koddaki mevcut konumun bir göstergesi ile genişletilecektir,
"mess_sv" için açıklandığı gibi.

Hata mesajı veya nesne, varsayılan olarak döndürülen bir istisna olarak kullanılacaktır.
"eval" i çevreleyen en yakın kontrole, ancak bir yetkili tarafından değişikliğe tabidir.
$SIG{__DIE__} işleyicisi. Her durumda, "croak_sv" işlevi asla geri dönmez
normalde.

Basit bir dize mesajıyla ölmek için "croak" işlevi daha uygun olabilir.

geçersiz croak_sv(SV *baseex)

die Dönüş türü dışında "croak" ile aynı şekilde davranır. Sadece kullanılmalıdır
burada "OP *" dönüş tipi gereklidir. İşlev aslında asla geri dönmez.

OP * kalıp(const karakter *pat, ...)

die_sv Dönüş türü dışında "croak_sv" ile aynı şekilde davranır. kullanılmalı
yalnızca "OP *" dönüş türünün gerekli olduğu durumlarda. işlev aslında asla
döner.

OP * die_sv(SV *baseex)

vcroak Bu, Perl'in "öl" işlevine yönelik bir XS arabirimidir.

"pat" ve "args", sprintf tarzı bir biçim kalıbı ve kapsüllenmiş bağımsız değişkendir
liste. Bunlar bir dize mesajı oluşturmak için kullanılır. Mesaj bitmezse
yeni bir satırla, mevcut durumun bir göstergesiyle genişletilecektir.
"mess_sv" için açıklandığı gibi koddaki konum.

Hata mesajı bir istisna olarak kullanılacak ve varsayılan olarak kontrolü
en yakın çevreleyen "eval", ancak bir $SIG{__DIE__} tarafından değişikliğe tabidir
işleyici Her durumda, "croak" işlevi asla normal şekilde dönmez.

Tarihsel nedenlerle, "pat" null ise "ERRSV" ($@) içeriği
bir hata mesajı oluşturmak yerine bir hata mesajı veya nesnesi olarak kullanılır.
argümanlar. Dize olmayan bir nesne atmak veya bir hata mesajı oluşturmak istiyorsanız
kendiniz bir SV'ye sahipseniz, "croak_sv" işlevinin kullanılması tercih edilir;
"ERRSV"yi gizlemeyi içerir.

geçersiz vcroak(const char *pat, va_list *args)

vwarn Bu, Perl'in "uyar" işlevine yönelik bir XS arayüzüdür.

"pat" ve "args", sprintf tarzı bir biçim kalıbı ve kapsüllenmiş bağımsız değişkendir
liste. Bunlar bir dize mesajı oluşturmak için kullanılır. Mesaj bitmezse
yeni bir satırla, mevcut durumun bir göstergesiyle genişletilecektir.
"mess_sv" için açıklandığı gibi koddaki konum.

Hata mesajı veya nesne varsayılan olarak standart hataya yazılır, ancak bu
$SIG{__WARN__} işleyicisi tarafından değişikliğe tabidir.

"vcroak"tan farklı olarak, "pat"ın boş olmasına izin verilmez.

geçersiz vwarn(const char *pat, va_list *args)

warn Bu, Perl'in "uyar" işlevine yönelik bir XS arayüzüdür.

Bir sprintf stili biçim kalıbı ve bağımsız değişken listesi alın. Bunlar oluşturmak için kullanılır
bir dize mesajı. Mesaj yeni bir satırla bitmiyorsa, o zaman
açıklandığı gibi, koddaki mevcut konumun bir göstergesiyle genişletildi
"mess_sv" için.

Hata mesajı veya nesne varsayılan olarak standart hataya yazılır, ancak bu
$SIG{__WARN__} işleyicisi tarafından değişikliğe tabidir.

"croak"tan farklı olarak, "pat"ın boş olmasına izin verilmez.

geçersiz uyarı(const char *pat, ...)

warn_sv Bu, Perl'in "uyar" işlevine yönelik bir XS arayüzüdür.

"baseex" hata mesajı veya nesnesidir. Referans ise kullanılacaktır.
olduğu gibi. Aksi halde string olarak kullanılır ve yeni satır ile bitmiyorsa
daha sonra koddaki mevcut konumun bir göstergesi ile genişletilecektir,
"mess_sv" için açıklandığı gibi.

Hata mesajı veya nesne varsayılan olarak standart hataya yazılır, ancak bu
$SIG{__WARN__} işleyicisi tarafından değişikliğe tabidir.

Basit bir dizi mesajı ile uyarmak için "uyar" işlevi daha uygun olabilir.

geçersiz warn_sv(SV *baseex)

Belgesiz fonksiyonlar


Aşağıdaki işlevler genel API'nin bir parçası olarak işaretlenmiştir, ancak şu anda
belgesiz Arayüzler değişebileceğinden, bunları kullanmanın riski size aittir.
Bu belgede listelenmeyen işlevler genel kullanıma yönelik değildir ve
Hiçbir koşulda KULLANILMAMALIDIR.

Aşağıdaki belgelenmemiş işlevlerden birini kullanırsanız, oluşturmayı düşünebilirsiniz ve
bunun için belgeler sunmak. Düzeltme ekiniz kabul edilirse bu,
arabirim kararlıdır (aksi açıkça belirtilmediği sürece).

GetVars
Gv_AMgüncelleme
PerlIO_clearerr
PerlIO_close
PerlIO_context_layers
PerlIO_eof
PerlIO_error
PerlIO_fileno
PerlIO_fill
PerlIO_flush
PerlIO_get_base
PerlIO_get_bufsiz
PerlIO_get_cnt
PerlIO_get_ptr
PerlIO_read
PerlIO_seek
PerlIO_set_cnt
PerlIO_set_ptrcnt
PerlIO_setlinebuf
PerlIO_stderr
PerlIO_stdin
PerlIO_stdout
PerlIO_tell
PerlIO_okunmadı
PerlIO_write
amagic_call
amagic_deref_call
herhangi bir_dup
atfork_lock
atfork_unlock
av_arylen_p
av_iter_p
blok_gimme
call_atexit
Çağrı listesi
Calloc
cast_i32
cast_iv
cast_ulong
cast_uv
ck_warner
ck_warner_d
uyarmak
ckwarn_d
klon_params_del
clone_params_new
croak_memory_wrap
croak_nocontext
csighhandler
cx_dump
cx_dup
cxinc
deb
deb_nocontext
debop
debprof dökümü
çöp yığını
debstackptrs
sınırlayıcı
gönderi_sinyalleri
die_nocontext
dirp_dup
do_aspawn
do_binmode
do_close
do_gv_dump
do_gvgv_dump
do_hv_dump
do_join
do_magic_dump
do_op_dump
do_open
do_open9
do_openn
do_pmop_dump
do_spawn
do_spawn_nowait
do_sprintf
do_sv_dump
yapıyor_taint
Doref
rüzgar estirmek
Dowantarray
dump_eval
dump_form
dump_indent
dump_mstats
dump_sub
dump_vindent
filtre_add
filtre_del
filtre_oku
FoldEQ_latin1
form_nocontext
fp_dup
fprintf_nocontext
free_global_struct
free_tmps
get_context
get_mstats
get_op_descs
get_op_names
get_ppaddr
get_vtbl
gp_dup
gp_free
gp_ref
gv_AVadd
gv_HVadd
gv_IOadd
gv_SVadd
gv_add_by_type
gv_autoload4
gv_autoload_pv
gv_autoload_pvn
gv_autoload_sv
gv_check
gv_dump
gv_efullname
gv_efullname3
gv_efullname4
gv_fetch dosyası
gv_fetchfile_flags
gv_fetchpv
gv_fetchpvn_flags
gv_fetchsv
gv_tam adı
gv_tam ad3
gv_tam ad4
gv_handler
gv_name_set
o_dup
hek_dup
hv_common
hv_common_key_len
hv_delayfree_ent
hv_eiter_p
hv_eiter_set
hv_free_ent
hv_ksplit
hv_name_set
hv_placeholders_get
hv_placeholders_set
hv_rand_set
hv_riter_p
hv_riter_set
ibcmp_utf8
init_global_struct
init_stacks
init_tm
instr
is_lvalue_sub
izin kapsamı
load_module_nocontext
magic_dump
malloc
markstack_grow
karışıklık_nocontext
mfree
mg_dup
mg_size
mini_mktime
daha fazla anahtar
mro_get_from_name
mro_get_private_data
mro_set_mro
mro_set_private_data
my_atof
my_atof2
my_bcopy
my_bzero
my_chsize
my_cxt_index'im
my_cxt_init
my_dirfd
benim_çıkışım
my_failure_exit
my_fflush_all
my_fork
my_lstat
my_memcmp
my_memset
my_pclose
my_popen
my_popen_list
my_setenv
my_socketpair
my_stat
my_strftime
yeniANONATTRSUB
yeniANONHASH
yeniANONLİSTE
yeniANONSUB
yeniATTRSUB
yeniAVREF
yeniCVREF
yeni form
yeniGVREF
yeniGVgen
yeniGVgen_flags
yeniHVREF
yeniHVhv
yeniIO
yeniMYSUB
yeniPROG
yeniRV
yeniALT
yeniSVREF
yeniSVpvf_nocontext
new_stackinfo
ninstr
op_refcnt_lock
op_refcnt_unlock
ayrıştırıcı_dup
perl_alloc_using
perl_clone_using
pmop_dump
pop_scope
ön kompozisyon
pregexec
hamile olmayan
hamile olmayan2
printf_nocontext
ptr_table_fetch
ptr_table_free
ptr_table_new
ptr_table_split
ptr_table_store
push_scope
yeniden derle
re_dup_guts
re_intuit_start
re_intuit_string
yeniden tahsis etmek
reentrant_free
reentrant_init
reentrant_retry
reentrant_size
ref
reg_named_buff_all
reg_named_buff_exists
reg_named_buff_fetch
reg_named_buff_firstkey
reg_named_buff_nextkey
reg_named_buff_scalar
regclass_swash
normal döküm
regdupe_internal
regexec_flags
regfree_internal
yeniden renklendirmeler
yeniden sonraki
tekrar kopyala
rninstr
sinyal
rsignal_state
runops_debug
runops_standard
rvpv_dup
güvenli sistemcalloc
kasasysfree
kasasysmalloc
kasasysrealloc
kaydet_I16
kaydet_I32
kaydet_I8
save_adelete
save_aelem
save_aelem_flags
save_alloc
save_aptr
save_ary
save_bool
save_clearsv
save_delete
save_destructor
save_destructor_x
save_freeop
save_freepv
save_freesv
save_generic_pvref
save_generic_svref
save_gp
save_hash
save_hdelete
save_helem
save_helem_flags
save_hints
save_hptr
save_int
save_item
save_iv
kaydet_listesi
save_long
save_mortalizesv
save_nogv
save_op
save_padsv_and_mortalize
save_pptr
save_pushi32ptr
save_pushptr
save_pushptrptr
save_re_context
save_scalar
save_set_svflags
save_shared_pvref
save_sptr
save_svref
save_vptr
savestack_grow
savestack_grow_cnt
tarama_num
tarama_vstring
tohum
set_context
set_numeric_local
set_numeric_radix
set_numeric_standard
paylaş_hek
si_dup
ss_dup
yığın_grow
start_subparse
str_to_version
sv_2iv
sv_2pv
sv_2uv
sv_catpvf_mg_nocontext
sv_catpvf_nocontext
sv_dup
sv_dup_inc
sv_peek
sv_pvn_nomg
sv_setpvf_mg_nocontext
sv_setpvf_nocontext
swash_fetch
swash_init
sys_init
sys_init3
sys_intern_clear
sys_intern_dup
sys_intern_init
sys_term
taint_env
taint_proper
bağlantıyı kaldır
paylaşımı kaldır
utf16_to_utf8
utf16_to_utf8_reversed
uvuni_to_utf8
vdeb
vform
vload_module
vnewSVpvf
vwarner
warn_nocontext
Warner
warner_nocontext
hangisi
whatsig_pv
whatsig_pvn
whatsig_sv

YAZARLAR


Mayıs 1997'ye kadar bu belge Jeff Okamoto tarafından muhafaza edildi.okamoto@corp.hp.com>. Bu
artık Perl'ün bir parçası olarak korunuyor.

Dean Roehrich, Malcolm Beattie, Andreas Koenig'den çok sayıda yardım ve öneriyle,
Paul Hudson, Ilya Zakharevich, Paul Marquess, Neil Bowers, Matthew Green, Tim Bunce,
Spider Boardman, Ulrich Pfeifer, Stephen McCamant ve Gurusamy Sarathy.

API Listesi orijinal olarak Dean Roehrich'e aittir <roehrich@cray.com>.

Benjamin Stuhl'un kaynaktaki yorumlarından otomatik olarak oluşturulacak şekilde güncellendi.

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



En yeni Linux ve Windows çevrimiçi programları