perlapi - Online in the Cloud

Ini ialah perintah perlapi yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.

JADUAL:

NAMA


perlapi - dokumentasi autogenerated untuk API awam perl

DESCRIPTION


Fail ini mengandungi dokumentasi API awam perl yang dijana oleh embed.pl,
khususnya senarai fungsi, makro, bendera dan pembolehubah yang boleh digunakan oleh
penulis sambungan. Pada penghujungnya ialah senarai fungsi yang masih belum didokumenkan.
Antara muka mereka tertakluk kepada perubahan tanpa notis. Apa-apa yang tidak disenaraikan di sini ialah
bukan sebahagian daripada API awam, dan tidak boleh digunakan oleh penulis sambungan sama sekali. Untuk ini
sebab, menggunakan fungsi yang disenaraikan dalam proto.h secara membuta tuli perlu dielakkan semasa menulis
sambungan.

Ambil perhatian bahawa semua pembolehubah global API Perl mesti dirujuk dengan awalan "PL_". sekali lagi,
yang tidak disenaraikan di sini tidak boleh digunakan oleh penulis sambungan, dan boleh ditukar atau
dikeluarkan tanpa notis; sama dengan makro. Beberapa makro disediakan untuk keserasian dengan
nama yang lebih lama tanpa hiasan, tetapi sokongan ini mungkin dilumpuhkan dalam keluaran akan datang.

Perl pada asalnya ditulis untuk mengendalikan US-ASCII sahaja (iaitu aksara yang ordinalnya
nombor berada dalam julat 0 - 127). Dan dokumentasi dan ulasan mungkin masih menggunakan istilah tersebut
ASCII, walaupun kadangkala sebenarnya keseluruhan julat dari 0 - 255 dimaksudkan.

Ambil perhatian bahawa Perl boleh disusun dan dijalankan di bawah sama ada ASCII atau EBCDIC (Lihat perlebcdic).
Kebanyakan dokumentasi (dan juga komen dalam kod) mengabaikan kemungkinan EBCDIC.
Untuk hampir semua tujuan perbezaan adalah telus. Sebagai contoh, di bawah EBCDIC,
bukannya UTF-8, UTF-EBCDIC digunakan untuk mengekod rentetan Unicode, dan apabila ini
dokumentasi merujuk kepada "utf8" (dan varian nama itu, termasuk dalam nama fungsi),
ia juga (pada asasnya telus) bermaksud "UTF-EBCDIC". Tetapi ordinal watak
berbeza antara pengekodan ASCII, EBCDIC dan UTF, dan rentetan yang dikodkan dalam UTF-EBCDIC
boleh menduduki lebih banyak bait daripada dalam UTF-8.

Penyenaraian di bawah adalah mengikut abjad, tidak peka huruf besar-besaran.

"Beri saya" Nilai-nilai


GIMME Versi "GIMME_V" yang serasi ke belakang yang hanya boleh mengembalikan "G_SCALAR" atau
"G_ARRAY"; dalam konteks kosong, ia mengembalikan "G_SCALAR". Ditamatkan. Gunakan "GIMME_V"
sebaliknya.

U32 GIMME

GIMME_V Penulis XSUB yang setara dengan "wantarray" Perl. Mengembalikan "G_VOID", "G_SCALAR"
atau "G_ARRAY" untuk konteks kosong, skalar atau senarai, masing-masing. Lihat perlcall untuk a
contoh penggunaan.

U32 GIMME_V

G_ARRAY Digunakan untuk menunjukkan konteks senarai. Lihat "GIMME_V", "GIMME" dan perlcall.

G_DISCARD
Menunjukkan bahawa argumen yang dikembalikan daripada panggilan balik harus dibuang. Lihat
perlcall.

G_EVAL Digunakan untuk memaksa pembalut "eval" Perl di sekeliling panggilan balik. Lihat perlcall.

G_NOARGS
Menunjukkan bahawa tiada hujah dihantar ke panggilan balik. Lihat perlcall.

G_SCALAR
Digunakan untuk menunjukkan konteks skalar. Lihat "GIMME_V", "GIMME" dan perlcall.

G_VOID Digunakan untuk menunjukkan konteks kosong. Lihat "GIMME_V" dan perlcall.

Array Manipulasi Fungsi


AvFILL Sama seperti "av_top_index()". Dihentikan, gunakan "av_top_index()" sebaliknya.

int AvFILL(AV* av)

av_clear
Membebaskan semua elemen tatasusunan, meninggalkannya kosong. XS bersamaan dengan
"@array = ()". Lihat juga "av_undef".

Ambil perhatian bahawa ada kemungkinan bahawa tindakan pemusnah dipanggil secara langsung atau
secara tidak langsung dengan membebaskan elemen tatasusunan boleh menyebabkan kiraan rujukan
tatasusunan itu sendiri akan dikurangkan (cth dengan memadamkan entri dalam jadual simbol). Jadi
ada kemungkinan bahawa AV boleh dibebaskan (atau diperuntukkan semula) pada
kembali daripada panggilan melainkan anda memegang rujukan kepadanya.

batal av_clear(AV *av)

av_create_and_push
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Tolak SV ke hujung tatasusunan, cipta tatasusunan jika perlu. Kecil
fungsi pembantu dalaman untuk membuang simpulan bahasa yang biasa diduakan.

batalkan av_create_and_push(AV **const avp,
SV *const val)

av_create_and_unshift_one
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Nyahshift SV ke permulaan tatasusunan, mencipta tatasusunan jika perlu.
Fungsi pembantu dalaman yang kecil untuk mengeluarkan simpulan bahasa yang biasa diduakan.

SV** av_create_and_unshift_one(AV **const avp,
SV *const val)

av_delete
Memadamkan elemen yang diindeks oleh "kunci" daripada tatasusunan, menjadikan unsur fana dan
mengembalikannya. Jika "bendera" sama dengan "G_DISCARD", elemen dibebaskan dan nol adalah
dikembalikan. Perl setara: "my $elem = delete($myarray[$idx]);" untuk
bukan versi "G_DISCARD" dan void-context "delete($myarray[$idx]);" untuk
Versi "G_DISCARD".

SV* av_delete(AV *av, kunci SSize_t, bendera I32)

av_wujud
Mengembalikan benar jika elemen yang diindeks oleh "kunci" telah dimulakan.

Ini bergantung pada fakta bahawa elemen tatasusunan yang tidak dimulakan ditetapkan kepada NULL.

Perl bersamaan: "wujud($myarray[$key])".

bool av_exists(AV *av, kunci SSize_t)

av_extend
Pra-lanjutkan tatasusunan. "Kunci" ialah indeks yang sepatutnya diletakkan tatasusunan
dipanjangkan.

void av_extend(AV *av, kunci SSize_t)

av_fetch
Mengembalikan SV pada indeks yang ditentukan dalam tatasusunan. "Kunci" ialah indeks. Jika
lval adalah benar, anda dijamin untuk mendapatkan kembali SV sebenar (sekiranya ia tidak benar
sebelum), yang kemudian anda boleh ubah suai. Semak bahawa nilai pulangan adalah bukan nol
sebelum merujuknya kepada "SV*".

Lihat "Memahami Keajaiban Hash dan Tatasusunan Terikat" dalam perlguts untuk maklumat lanjut
maklumat tentang cara menggunakan fungsi ini pada tatasusunan terikat.

Perl yang setara kasar ialah $myarray[$idx].

SV** av_fetch(AV *av, kunci SSize_t, I32 lval)

av_fill Tetapkan indeks tertinggi dalam tatasusunan kepada nombor yang diberikan, bersamaan dengan Perl
"$#array = $isi;".

Bilangan elemen dalam tatasusunan akan menjadi "isi + 1" selepas itu av_fill() pulangan.
Jika tatasusunan sebelum ini lebih pendek, maka elemen tambahan yang dilampirkan ditetapkan
kepada NULL. Jika tatasusunan lebih panjang, maka unsur-unsur yang berlebihan akan dibebaskan.
"av_fill(av, -1)" adalah sama dengan "av_clear(av)".

void av_fill(AV *av, SSize_t fill)

av_len Sama seperti "av_top_index". Ambil perhatian bahawa, tidak seperti yang ditunjukkan oleh namanya, ia mengembalikan
indeks tertinggi dalam tatasusunan, jadi untuk mendapatkan saiz tatasusunan yang anda perlu gunakan
"av_len(av) + 1". Ini tidak seperti "sv_len", yang mengembalikan apa yang anda jangkakan.

SSize_t av_len(AV *av)

av_make Mencipta AV baharu dan mengisinya dengan senarai SV. SV disalin ke dalam
array, supaya mereka boleh dibebaskan selepas panggilan ke av_make. AV baharu akan mempunyai a
bilangan rujukan 1.

Perl bersamaan: "my @new_array = ($scalar1, $scalar2, $scalar3...);"

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

av_pop Mengalih keluar satu SV dari hujung tatasusunan, mengurangkan saiznya dengan satu dan kembali
SV (memindahkan kawalan satu kiraan rujukan) kepada pemanggil. Pulangan
&PL_sv_undef jika tatasusunan kosong.

Perl bersamaan: "pop(@myarray);"

SV* av_pop(AV *av)

av_push Menolak SV ke hujung tatasusunan. Tatasusunan akan berkembang secara automatik ke
menampung penambahan. Ini memerlukan pemilikan satu kiraan rujukan.

Perl bersamaan: "tolak @myarray, $elem;".

batal av_push(AV *av, SV *val)

av_shift
Mengalih keluar satu SV dari permulaan tatasusunan, mengurangkan saiznya dengan satu dan kembali
SV (memindahkan kawalan satu kiraan rujukan) kepada pemanggil. Pulangan
&PL_sv_undef jika tatasusunan kosong.

Perl bersamaan: "shift(@myarray);"

SV* av_shift(AV *av)

av_store
Menyimpan SV dalam tatasusunan. Indeks tatasusunan ditentukan sebagai "kunci". Pulangannya
nilai akan menjadi NULL jika operasi gagal atau jika nilai tidak perlu
sebenarnya disimpan dalam tatasusunan (seperti dalam kes tatasusunan terikat). Jika tidak, ia
boleh dinyahrujuk untuk mendapatkan "SV*" yang disimpan di sana (= "val")).

Ambil perhatian bahawa pemanggil bertanggungjawab untuk menambah bilangan rujukan yang sesuai
daripada "val" sebelum panggilan, dan mengurangkannya jika fungsi mengembalikan NULL.

Anggaran persamaan Perl: "$myarray[$key] = $val;".

Lihat "Memahami Keajaiban Hash dan Tatasusunan Terikat" dalam perlguts untuk maklumat lanjut
maklumat tentang cara menggunakan fungsi ini pada tatasusunan terikat.

SV** av_store(AV *av, kunci SSize_t, SV *val)

av_tindex
Sama seperti "av_top_index()".

int av_tindex(AV* av)

av_top_index
Mengembalikan indeks tertinggi dalam tatasusunan. Bilangan elemen dalam tatasusunan ialah
"av_top_index(av) + 1". Mengembalikan -1 jika tatasusunan kosong.

Perl bersamaan untuk ini ialah $#myarray.

(Bentuk yang lebih pendek sedikit ialah "av_tindex".)

SSize_t av_top_index(AV *av)

av_undef
Menyahtakrif tatasusunan. XS yang setara dengan "undef(@array)".

Selain membebaskan semua elemen tatasusunan (seperti "av_clear()"), ini juga
membebaskan memori yang digunakan oleh av untuk menyimpan senarai skalarnya.

Lihat "av_clear" untuk nota tentang tatasusunan yang mungkin tidak sah apabila dikembalikan.

batal av_undef(AV *av)

av_unshift
Nyahshift bilangan nilai "undef" yang diberikan ke permulaan tatasusunan. The
tatasusunan akan berkembang secara automatik untuk menampung penambahan. Anda mesti menggunakan
"av_store" untuk memberikan nilai kepada elemen baharu ini.

Perl bersamaan: "unshift @myarray, ( (undef) x $n );"

batal av_unshift(AV *av, nombor SSize_t)

get_av Mengembalikan AV bagi tatasusunan global atau pakej Perl yang ditentukan dengan nama yang diberikan
(jadi ia tidak akan berfungsi pada pembolehubah leksikal). "bendera" dihantar kepada "gv_fetchpv". Jika
"GV_ADD" ditetapkan dan pembolehubah Perl tidak wujud maka ia akan dibuat. Jika
"flags" adalah sifar dan pembolehubah tidak wujud maka NULL dikembalikan.

Perl bersamaan: "@{"$name"}".

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

AV* get_av(const char *nama, bendera I32)

newAV Mencipta AV baharu. Kiraan rujukan ditetapkan kepada 1.

Perl bersamaan: "my @array;".

AV* newAV()

sortsv Isih tatasusunan. Berikut adalah contoh:

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

Pada masa ini ini sentiasa menggunakan mergesort. Lihat sortsv_flags untuk lebih fleksibel
rutin.

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

sortsv_flags
Isih tatasusunan, dengan pelbagai pilihan.

void sortsv_flags(susun SV**, size_t num_elts,
SVCOMPARE_t cmp, bendera U32)

"xsubpp" pembolehubah and dalaman fungsi


Pembolehubah ax yang disediakan oleh "xsubpp" untuk menunjukkan offset asas tindanan, yang digunakan oleh
Makro "ST", "XSprePUSH" dan "XSRETURN". Makro "dMARK" mesti dipanggil terlebih dahulu
untuk menyediakan pembolehubah "MARK".

I32 kapak

Pembolehubah CLASS yang disediakan oleh "xsubpp" untuk menunjukkan nama kelas untuk C++ XS
pembina. Ini sentiasa "char*". Tengok ini".

char* KELAS

dAX Sediakan pembolehubah "ax". Ini biasanya dikendalikan secara automatik oleh "xsubpp" oleh
memanggil "dXSARGS".

dAX;

dAXMARK Sediakan pembolehubah "ax" dan pembolehubah penanda tindanan "mark". Ini biasanya
dikendalikan secara automatik oleh "xsubpp" dengan memanggil "dXSARGS".

dAXMARK;

dITEMS Sediakan pembolehubah "item". Ini biasanya dikendalikan secara automatik oleh "xsubpp"
dengan memanggil "dXSARGS".

DITEMS;

dUNDERBAR
Sediakan sebarang pembolehubah yang diperlukan oleh makro "UNDERBAR". Ia digunakan untuk menentukan
"padoff_du", tetapi pada masa ini ia adalah noop. Walau bagaimanapun, adalah dinasihatkan untuk tetap
gunakannya untuk memastikan keserasian masa lalu dan akan datang.

dUNDERBAR;

dXSARGS Sediakan timbunan dan tandakan penunjuk untuk XSUB, memanggil dSP dan dMARK. Sediakan
Pembolehubah "ax" dan "item" dengan memanggil "dAX" dan "dITEMS". Ini biasanya dikendalikan
secara automatik oleh "xsubpp".

dXSARGS;

dXSI32 Sediakan pembolehubah "ix" untuk XSUB yang mempunyai alias. Ini biasanya dikendalikan
secara automatik oleh "xsubpp".

dXSI32;

item Pembolehubah yang disediakan oleh "xsubpp" untuk menunjukkan bilangan item pada tindanan.
Lihat "Senarai Parameter Pembolehubah-panjang" dalam perlxs.

I32 item

ix Pembolehubah yang disediakan oleh "xsubpp" untuk menunjukkan yang mana satu alias XSUB
digunakan untuk menyerunya. Lihat "ALIAS: Kata Kunci" dalam perlxs.

I32 ix

Pembolehubah RETVAL yang disediakan oleh "xsubpp" untuk menahan nilai pulangan untuk XSUB. Ini adalah
sentiasa jenis yang sesuai untuk XSUB. Lihat "Pembolehubah RETVAL" dalam perlxs.

(apa sahaja) RETVAL

ST Digunakan untuk mengakses elemen pada tindanan XSUB.

SV* ST(int ix)

Pembolehubah INI yang disediakan oleh "xsubpp" untuk menetapkan objek dalam C++ XSUB. ini
sentiasa jenis yang sesuai untuk objek C++. Lihat "KELAS" dan "Menggunakan XS Dengan C++"
dalam perlxs.

(apa pun) INI

BAWAH BAR
SV* sepadan dengan pembolehubah $_. Berfungsi walaupun terdapat $_ leksikal dalam
skop.

XS Macro untuk mengisytiharkan XSUB dan senarai parameter Cnya. Ini dikendalikan oleh "xsubpp".
Ia sama seperti menggunakan makro XS_EXTERNAL yang lebih eksplisit.

XS_LUARAN
Makro untuk mengisytiharkan XSUB dan senarai parameter Cnya secara eksplisit mengeksport
simbol.

XS_INTERNAL
Makro untuk mengisytiharkan XSUB dan senarai parameter Cnya tanpa mengeksport simbol.
Ini dikendalikan oleh "xsubpp" dan secara amnya lebih baik daripada mengeksport XSUB
simbol yang tidak perlu.

Panggil balik Fungsi


call_argv
Melakukan panggilan balik kepada subrutin Perl yang dinamakan dan berskop pakej dengan
"argv" (tatasusunan rentetan yang ditamatkan NULL) sebagai argumen. Lihat perlcall.

Anggaran persamaan Perl: "&{"$sub_name"}(@$argv)".

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

I32 call_argv(const char* sub_name, bendera I32,
char** argv)

kaedah_panggilan
Melakukan panggilan balik kepada kaedah Perl yang ditentukan. Objek yang diberkati mesti dihidupkan
timbunan itu. Lihat perlcall.

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

I32 call_method(const char* methname, bendera I32)

call_pv Melakukan panggilan balik kepada sub Perl yang ditentukan. Lihat perlcall.

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

I32 call_pv(const char* sub_name, bendera I32)

call_sv Melakukan panggilan balik kepada sub Perl yang ditentukan oleh SV.

Jika bendera "G_METHOD" atau "G_METHOD_NAMED" tidak dibekalkan, SV mungkin
bagi CV, GV, rujukan kepada CV, rujukan kepada GV atau "SvPV(sv)" akan digunakan
sebagai nama sub untuk dipanggil.

Jika bendera "G_METHOD" dibekalkan, SV mungkin merujuk kepada CV atau
"SvPV(sv)" akan digunakan sebagai nama kaedah untuk memanggil.

Jika bendera "G_METHOD_NAMED" dibekalkan, "SvPV(sv)" akan digunakan sebagai nama
kaedah untuk memanggil.

Beberapa nilai lain dilayan khas untuk kegunaan dalaman dan tidak sepatutnya
bergantung kepada.

Lihat perlcall.

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

I32 call_sv(SV* sv, bendera VOL I32)

ENTER Membuka kurungan pada panggilan balik. Lihat "LEAVE" dan perlcall.

MASUK;

eval_pv Memberitahu Perl untuk "eval" rentetan yang diberikan dalam konteks skalar dan mengembalikan hasil SV*.

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

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

eval_sv Memberitahu Perl untuk "eval" rentetan dalam SV. Ia menyokong bendera yang sama seperti
"call_sv", dengan pengecualian jelas G_EVAL. Lihat perlcall.

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

I32 eval_sv(SV* sv, bendera I32)

FREETMPS
Kurungan penutup untuk sementara pada panggilan balik. Lihat "SAVETMPS" dan perlcall.

FREETMPS;

TINGGALKAN Kurungan penutup pada panggilan balik. Lihat "ENTER" dan perlcall.

CUTI;

SIMPAN
Membuka kurungan untuk sementara pada panggilan balik. Lihat "FREETMPS" dan perlcall.

SIMPAN;

Watak kes berubah


toFOLD Menukar aksara yang ditentukan kepada huruf besar. Jika input adalah apa-apa kecuali satu
Aksara huruf besar ASCII, aksara input itu sendiri dikembalikan. Pelbagai
"kepadaFOLD_A" adalah setara. (Tiada persamaan "ke_FOLD_L1" untuk keseluruhannya
Julat Latin1, kerana keluasan penuh "toFOLD_uni" diperlukan di sana.)

U8 toFOLD(U8 ch)

kepadaFOLD_uni
Menukar titik kod Unicode "cp" kepada versi lipatannya dan menyimpannya dalam
UTF-8 dalam "s", dan panjangnya dalam bait dalam "lenp". Perhatikan bahawa penimbal menunjuk ke
oleh "s" mestilah sekurang-kurangnya "UTF8_MAXBYTES_CASE+1" bait sejak foldcase
versi mungkin lebih panjang daripada aksara asal.

Titik kod pertama versi foldcased dikembalikan (tetapi ambil perhatian, seperti yang dijelaskan
hanya di atas, supaya ada lebih banyak lagi.)

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

kepadaFOLD_utf8
Menukar aksara yang dikodkan UTF-8 pada "p" kepada versi lipatannya dan disimpan
bahawa dalam UTF-8 dalam "s", dan panjangnya dalam bait dalam "lenp". Perhatikan bahawa penimbal
ditunjuk oleh "s" mestilah sekurang-kurangnya "UTF8_MAXBYTES_CASE+1" bait sejak
versi lipatan mungkin lebih panjang daripada aksara asal.

Titik kod pertama versi foldcased dikembalikan (tetapi ambil perhatian, seperti yang dijelaskan
hanya di atas, supaya ada lebih banyak lagi.)

Aksara input pada "p" diandaikan terbentuk dengan baik.

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

toLOWER Menukar aksara yang ditentukan kepada huruf kecil. Jika input adalah apa-apa kecuali satu
Aksara huruf besar ASCII, aksara input itu sendiri dikembalikan. Pelbagai
"toLOWER_A" adalah bersamaan.

U8 keLOWER(U8 ch)

keLOWER_L1
Menukar aksara Latin1 yang ditentukan kepada huruf kecil. Keputusan tidak ditentukan
jika input tidak sesuai dengan bait.

U8 keLOWER_L1(U8 ch)

kepadaLOWER_LC
Menukar aksara yang ditentukan kepada huruf kecil menggunakan peraturan tempat semasa, jika
mungkin; sebaliknya mengembalikan aksara input itu sendiri.

U8 keLOWER_LC(U8 ch)

keLOWER_uni
Menukar titik kod Unicode "cp" kepada versi huruf kecilnya dan menyimpannya dalam
UTF-8 dalam "s", dan panjangnya dalam bait dalam "lenp". Perhatikan bahawa penimbal menunjuk ke
oleh "s" mestilah sekurang-kurangnya "UTF8_MAXBYTES_CASE+1" bait sejak huruf kecil
versi mungkin lebih panjang daripada aksara asal.

Titik kod pertama versi huruf kecil dikembalikan (tetapi ambil perhatian, seperti yang dijelaskan
hanya di atas, supaya ada lebih banyak lagi.)

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

keLOWER_utf8
Menukar aksara yang dikodkan UTF-8 pada "p" kepada versi huruf kecilnya dan disimpan
bahawa dalam UTF-8 dalam "s", dan panjangnya dalam bait dalam "lenp". Perhatikan bahawa penimbal
ditunjuk oleh "s" mestilah sekurang-kurangnya "UTF8_MAXBYTES_CASE+1" bait sejak
versi huruf kecil mungkin lebih panjang daripada aksara asal.

Titik kod pertama versi huruf kecil dikembalikan (tetapi ambil perhatian, seperti yang dijelaskan
hanya di atas, supaya ada lebih banyak lagi.)

Aksara input pada "p" diandaikan terbentuk dengan baik.

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

toTITLE Menukar aksara yang ditentukan kepada huruf tajuk. Jika input adalah apa-apa kecuali satu
Aksara huruf kecil ASCII, aksara input itu sendiri dikembalikan. Pelbagai
"toTITLE_A" adalah setara. (Tiada "toTITLE_L1" untuk julat Latin1 penuh,
kerana keluasan penuh "toTITLE_uni" diperlukan di sana. Titlecase bukan a
konsep yang digunakan dalam pengendalian setempat, jadi tiada kefungsian untuk itu.)

U8 hinggaTITLE(U8 ch)

kepadaTITLE_uni
Menukar titik kod Unikod "cp" kepada versi huruf tajuknya dan menyimpannya dalam
UTF-8 dalam "s", dan panjangnya dalam bait dalam "lenp". Perhatikan bahawa penimbal menunjuk ke
oleh "s" mestilah sekurang-kurangnya "UTF8_MAXBYTES_CASE+1" bait sejak huruf tajuk
versi mungkin lebih panjang daripada aksara asal.

Titik kod pertama versi titlecased dikembalikan (tetapi ambil perhatian, seperti yang dijelaskan
hanya di atas, supaya ada lebih banyak lagi.)

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

kepadaTITLE_utf8
Menukar aksara yang dikodkan UTF-8 pada "p" kepada versi huruf tajuknya dan disimpan
bahawa dalam UTF-8 dalam "s", dan panjangnya dalam bait dalam "lenp". Perhatikan bahawa penimbal
ditunjuk oleh "s" mestilah sekurang-kurangnya "UTF8_MAXBYTES_CASE+1" bait sejak
versi huruf tajuk mungkin lebih panjang daripada aksara asal.

Titik kod pertama versi titlecased dikembalikan (tetapi ambil perhatian, seperti yang dijelaskan
hanya di atas, supaya ada lebih banyak lagi.)

Aksara input pada "p" diandaikan terbentuk dengan baik.

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

toUPPER Menukar aksara yang ditentukan kepada huruf besar. Jika input adalah apa-apa kecuali satu
Aksara huruf kecil ASCII, aksara input itu sendiri dikembalikan. Pelbagai
"toUPPER_A" adalah setara.

U8 hinggaUPPER(U8 ch)

keUPPER_uni
Menukar titik kod Unicode "cp" kepada versi huruf besarnya dan menyimpannya dalam
UTF-8 dalam "s", dan panjangnya dalam bait dalam "lenp". Perhatikan bahawa penimbal menunjuk ke
oleh "s" mestilah sekurang-kurangnya "UTF8_MAXBYTES_CASE+1" bait sejak huruf besar
versi mungkin lebih panjang daripada aksara asal.

Titik kod pertama versi huruf besar dikembalikan (tetapi ambil perhatian, seperti yang dijelaskan
hanya di atas, supaya ada lebih banyak lagi.)

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

keUPPER_utf8
Menukar aksara yang dikodkan UTF-8 pada "p" kepada versi huruf besarnya dan disimpan
bahawa dalam UTF-8 dalam "s", dan panjangnya dalam bait dalam "lenp". Perhatikan bahawa penimbal
ditunjuk oleh "s" mestilah sekurang-kurangnya "UTF8_MAXBYTES_CASE+1" bait sejak
versi huruf besar mungkin lebih panjang daripada aksara asal.

Titik kod pertama versi huruf besar dikembalikan (tetapi ambil perhatian, seperti yang dijelaskan
hanya di atas, supaya ada lebih banyak lagi.)

Aksara input pada "p" diandaikan terbentuk dengan baik.

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

Watak klasifikasi


Bahagian ini adalah mengenai fungsi (benar-benar makro) yang mengklasifikasikan aksara kepada jenis, seperti
sebagai tanda baca berbanding abjad, dsb. Kebanyakannya adalah serupa dengan ungkapan biasa
kelas watak. (Lihat "Kelas Aksara POSIX" dalam perlrecharclass.) Terdapat beberapa
varian untuk setiap kelas. (Tidak semua makro mempunyai semua varian; setiap item di bawah menyenaraikan
yang sah untuknya.) Tiada yang dipengaruhi oleh "guna bait", dan hanya yang mempunyai "LC" dalam
nama dipengaruhi oleh tempat semasa.

Fungsi asas, cth, "isALPHA()", mengambil oktet (sama ada "char" atau "U8") sebagai input
dan mengembalikan boolean sama ada aksara yang diwakili oleh oktet itu adalah (atau
pada platform bukan ASCII, sepadan dengan) aksara ASCII dalam kelas yang dinamakan berdasarkan
platform, Unicode dan peraturan Perl. Jika input ialah nombor yang tidak sesuai dengan oktet,
FALSE dikembalikan.

Varian "isFOO_A" (cth, "isALPHA_A()") adalah sama dengan fungsi asas tanpa akhiran
"_A".

Varian "isFOO_L1" mengenakan set aksara Latin-1 (atau EBCDIC yang setara) pada
platform. Iaitu, titik kod yang ASCII tidak terjejas, kerana ASCII ialah subset
daripada Latin-1. Tetapi titik kod bukan ASCII dianggap seolah-olah ia adalah aksara Latin-1.
Contohnya, "isWORDCHAR_L1()" akan kembali benar apabila dipanggil dengan titik kod 0xDF,
yang merupakan watak perkataan dalam kedua-dua ASCII dan EBCDIC (walaupun ia mewakili berbeza
watak dalam setiap).

Varian "isFOO_uni" adalah seperti varian "isFOO_L1", tetapi menerima sebarang titik kod UV sebagai
input. Jika titik kod lebih besar daripada 255, peraturan Unicode digunakan untuk menentukan sama ada ia
dalam kelas watak. Sebagai contoh, "isWORDCHAR_uni(0x100)" mengembalikan TRUE, kerana 0x100 ialah
HURUF BESAR LATIN A DENGAN MACRON dalam Unicode, dan merupakan aksara perkataan.

Varian "isFOO_utf8" adalah seperti "isFOO_uni", tetapi input adalah penunjuk kepada a (dikenali sebagai
terbentuk dengan baik) rentetan berkod UTF-8 ("U8*" atau "char*"). Pengelasan hanya
aksara pertama (mungkin berbilang bait) dalam rentetan diuji.

Varian "isFOO_LC" adalah seperti varian "isFOO_A" dan "isFOO_L1", tetapi hasilnya adalah berdasarkan
pada tempat semasa, yang bermaksud "LC" dalam nama itu. Jika Perl boleh menentukan
bahawa tempat semasa ialah tempattempat UTF-8, ia menggunakan peraturan Unicode yang diterbitkan; jika tidak,
ia menggunakan fungsi perpustakaan C yang memberikan klasifikasi yang dinamakan. Sebagai contoh,
"isDIGIT_LC()" apabila tiada dalam tempat UTF-8 mengembalikan hasil panggilan "isdigit()".
FALSE sentiasa dikembalikan jika input tidak sesuai dengan oktet. Pada beberapa platform di mana
fungsi perpustakaan C diketahui rosak, Perl menukar keputusannya untuk mengikuti
Peraturan standard POSIX.

Varian "isFOO_LC_uvchr" adalah seperti "isFOO_LC", tetapi ditakrifkan pada mana-mana UV. Ia mengembalikan
sama seperti "isFOO_LC" untuk mata kod input kurang daripada 256, dan mengembalikan kod keras, bukan-
dipengaruhi-oleh-tempatan, hasil Unicode untuk yang lebih besar.

Varian "isFOO_LC_utf8" adalah seperti "isFOO_LC_uvchr", tetapi input ialah penunjuk kepada (dikenali
untuk dibentuk dengan baik) rentetan berkod UTF-8 ("U8*" atau "char*"). Klasifikasi adil
aksara pertama (mungkin berbilang bait) dalam rentetan diuji.

isALPHA Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan ialah abjad
watak, sama dengan "m/[[:alpha:]]/". Lihat bahagian atas bahagian ini untuk
penerangan tentang varian "isALPHA_A", "isALPHA_L1", "isALPHA_uni", "isALPHA_utf8",
"isALPHA_LC", "isALPHA_LC_uvchr", dan "isALPHA_LC_utf8".

bool ialahALPHA(char ch)

ialah ALFANUMERIC
Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan adalah sama ada an
aksara abjad atau digit perpuluhan, sama dengan "m/[[:alnum:]]/". Lihat bahagian atas
bahagian ini untuk penjelasan varian "isALPHANUMERIC_A",
"isALPHANUMERIC_L1", "isALPHANUMERIC_uni", "isALPHANUMERIC_utf8",
"isALPHANUMERIC_LC", "isALPHANUMERIC_LC_uvchr", dan "isALPHANUMERIC_LC_utf8".

bool ialah ALPHHANUMERIC(char ch)

isASCII Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan adalah salah satu daripada 128
aksara dalam set aksara ASCII, sama dengan "m/[[:ascii:]]/". pada bukan-
Platform ASCII, ia mengembalikan TRUE jika aksara ini sepadan dengan ASCII
watak. Varian "isASCII_A()" dan "isASCII_L1()" adalah sama dengan
"isASCII()". Lihat bahagian atas bahagian ini untuk penjelasan varian
"isASCII_uni", "isASCII_utf8", "isASCII_LC", "isASCII_LC_uvchr", dan
"isASCII_LC_utf8". Walau bagaimanapun, ambil perhatian bahawa sesetengah platform tidak mempunyai perpustakaan C
rutin "isascii()". Dalam kes ini, varian yang namanya mengandungi "LC" ialah
sama seperti yang sepadan tanpa.

Juga ambil perhatian, kerana semua aksara ASCII adalah invarian UTF-8 (bermaksud ia
mempunyai perwakilan yang sama (sentiasa satu bait) sama ada dikodkan dalam UTF-8
atau tidak), "isASCII" akan memberikan hasil yang betul apabila dipanggil dengan sebarang bait dalam mana-mana
rentetan dikodkan atau tidak dalam UTF-8. Dan begitu juga "isASCII_utf8" akan berfungsi dengan betul
pada mana-mana rentetan yang dikodkan atau tidak dalam UTF-8.

bool ialahASCII(char ch)

isBLANK Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan ialah aksara
dianggap sebagai kosong, sama dengan "m/[[:blank:]]/". Lihat bahagian atas ini
bahagian untuk penjelasan varian "isBLANK_A", "isBLANK_L1", "isBLANK_uni",
"isBLANK_utf8", "isBLANK_LC", "isBLANK_LC_uvchr", dan "isBLANK_LC_utf8". Catatan,
walau bagaimanapun, sesetengah platform tidak mempunyai rutin perpustakaan C "isblank()". Dalam
kes ini, varian yang namanya mengandungi "LC" adalah sama dengan
yang sepadan tanpa.

bool adalah KOSONG(char ch)

isCNTRL Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan ialah kawalan
watak, sama dengan "m/[[:cntrl:]]/". Lihat bahagian atas bahagian ini untuk
penjelasan tentang varian "isCNTRL_A", "isCNTRL_L1", "isCNTRL_uni", "isCNTRL_utf8",
"isCNTRL_LC", "isCNTRL_LC_uvchr", dan "isCNTRL_LC_utf8" Pada platform EBCDIC, anda
hampir selalu mahu menggunakan varian "isCNTRL_L1".

bool ialahCNTRL(char ch)

isDIGIT Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan ialah digit, analog
kepada "m/[[:digit:]]/". Varian "isDIGIT_A" dan "isDIGIT_L1" adalah sama dengannya
"isDIGIT". Lihat bahagian atas bahagian ini untuk penjelasan varian
"isDIGIT_uni", "isDIGIT_utf8", "isDIGIT_LC", "isDIGIT_LC_uvchr", dan
"isDIGIT_LC_utf8".

bool ialahDIGIT(char ch)

isGRAPH Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan ialah grafik
aksara, sama dengan "m/[[:graf:]]/". Lihat bahagian atas bahagian ini untuk
penjelasan tentang varian "isGRAPH_A", "isGRAPH_L1", "isGRAPH_uni", "isGRAPH_utf8",
"isGRAPH_LC", "isGRAPH_LC_uvchr", dan "isGRAPH_LC_utf8".

bool isGRAPH(char ch)

isIDCONT
Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan boleh menjadi yang kedua atau
watak yang berjaya bagi pengecam. Ini sangat dekat dengan, tetapi tidak begitu
sama seperti sifat Unicode rasmi "XID_Continue". Perbezaannya ialah ini
kembali benar hanya jika aksara input juga sepadan dengan "isWORDCHAR". Lihat bahagian atas
bahagian ini untuk penjelasan varian "isIDCONT_A", "isIDCONT_L1",
"isIDCONT_uni", "isIDCONT_utf8", "isIDCONT_LC", "isIDCONT_LC_uvchr", dan
"isIDCONT_LC_utf8".

bool isIDCONT(char ch)

isIDFIRST
Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan boleh menjadi yang pertama
watak pengecam. Ini sangat hampir dengan, tetapi tidak sama dengan
sifat Unicode rasmi "XID_Start". Perbezaannya ialah ini kembali benar
hanya jika aksara input juga sepadan dengan "isWORDCHAR". Lihat bahagian atas ini
bahagian untuk penjelasan varian "isIDFIRST_A", "isIDFIRST_L1",
"isIDFIRST_uni", "isIDFIRST_utf8", "isIDFIRST_LC", "isIDFIRST_LC_uvchr", dan
"isIDFIRST_LC_utf8".

bool isIDFIRST(char ch)

isLOWER Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan ialah huruf kecil
watak, sama dengan "m/[[:lower:]]/". Lihat bahagian atas bahagian ini untuk
penerangan tentang varian "isLOWER_A", "isLOWER_L1", "isLOWER_uni", "isLOWER_utf8",
"isLOWER_LC", "isLOWER_LC_uvchr", dan "isLOWER_LC_utf8".

bool isLOWER(char ch)

isOCTAL Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan ialah digit perlapanan,
[0-7]. Hanya dua varian ialah "isOCTAL_A" dan "isOCTAL_L1"; masing-masing adalah serupa
kepada "isOCTAL".

bool isOCTAL(char ch)

isPRINT Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan boleh dicetak
watak, sama dengan "m/[[:print:]]/". Lihat bahagian atas bahagian ini untuk
penjelasan tentang varian "isPRINT_A", "isPRINT_L1", "isPRINT_uni", "isPRINT_utf8",
"isPRINT_LC", "isPRINT_LC_uvchr", dan "isPRINT_LC_utf8".

bool isPRINT(char ch)

ialahPSXSPC
(singkatan untuk Posix Space) Bermula pada 5.18, ini adalah sama dalam semua bentuknya untuk
makro "isSPACE()" yang sepadan. Bentuk setempat bagi makro ini ialah
sama dengan borang "isSPACE()" yang sepadan dalam semua keluaran Perl. Dalam
keluaran sebelum 5.18, borang bukan tempatan berbeza daripada borang "isSPACE()" mereka
hanya kerana borang "isSPACE()" tidak sepadan dengan Tab Menegak dan
Borang "isPSXSPC()" boleh. Jika tidak, mereka adalah sama. Oleh itu makro ini adalah
analog dengan "m/[[:space:]]/" padan dalam ungkapan biasa. Lihat bahagian atas
bahagian ini untuk penjelasan varian "isPSXSPC_A", "isPSXSPC_L1",
"isPSXSPC_uni", "isPSXSPC_utf8", "isPSXSPC_LC", "isPSXSPC_LC_uvchr", dan
"isPSXSPC_LC_utf8".

bool isPSXSPC(char ch)

isPUNCT Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan ialah tanda baca
watak, sama dengan "m/[[:punct:]]/". Perhatikan bahawa definisi apa itu
tanda baca tidak semudah yang diingini. Lihat "Watak POSIX
Kelas" dalam perlrecharclass untuk butiran. Lihat bahagian atas bahagian ini untuk
penjelasan tentang varian "isPUNCT_A", "isPUNCT_L1", "isPUNCT_uni", "isPUNCT_utf8",
"isPUNCT_LC", "isPUNCT_LC_uvchr", dan "isPUNCT_LC_utf8".

bool isPUNCT(char ch)

isSPACE Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan ialah ruang putih
watak. Ini adalah sama dengan apa yang "m/\s/" sepadan dalam ungkapan biasa.
Bermula dalam Perl 5.18 ini juga sepadan dengan apa yang dilakukan oleh "m/[[:space:]]/". Sebelum
5.18, hanya bentuk tempatan bagi makro ini (yang mempunyai "LC" dalam nama mereka)
sepadan dengan tepat apa yang "m/[[:space:]]/" lakukan. Dalam keluaran tersebut, satu-satunya
perbezaan, dalam varian bukan tempatan, ialah "isSPACE()" tidak sepadan dengan a
tab menegak. (Lihat "isPSXSPC" untuk makro yang sepadan dengan tab menegak dalam semua
keluaran.) Lihat bahagian atas bahagian ini untuk penjelasan tentang varian
"isSPACE_A", "isSPACE_L1", "isSPACE_uni", "isSPACE_utf8", "isSPACE_LC",
"isSPACE_LC_uvchr", dan "isSPACE_LC_utf8".

bool isSPACE(char ch)

isUPPER Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan ialah huruf besar
watak, sama dengan "m/[[:atas:]]/". Lihat bahagian atas bahagian ini untuk
penerangan tentang varian "isUPPER_A", "isUPPER_L1", "isUPPER_uni", "isUPPER_utf8",
"isUPPER_LC", "isUPPER_LC_uvchr", dan "isUPPER_LC_utf8".

bool isUPPER(char ch)

isWORDCHAR
Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan ialah aksara yang
ialah watak perkataan, sama dengan apa "m/\w/" dan "m/[[:word:]]/" padan dalam
ekspresi biasa. Aksara perkataan ialah aksara abjad, digit perpuluhan,
aksara tanda baca penghubung (seperti garis bawah), atau aksara "tanda".
yang melekat pada salah satu daripadanya (seperti beberapa jenis loghat). "isALNUM()" ialah a
sinonim disediakan untuk keserasian ke belakang, walaupun watak perkataan termasuk
lebih daripada makna bahasa C standard alfanumerik. Lihat bahagian atas ini
bahagian untuk penjelasan varian "isWORDCHAR_A", "isWORDCHAR_L1",
"isWORDCHAR_uni", dan "isWORDCHAR_utf8". "isWORDCHAR_LC", "isWORDCHAR_LC_uvchr",
dan "isWORDCHAR_LC_utf8" juga seperti yang diterangkan di sana, tetapi juga termasuk
garis bawah asli platform.

bool isWORDCHAR(char ch)

ialahXDIGIT
Mengembalikan boolean yang menunjukkan sama ada aksara yang ditentukan ialah perenambelasan
digit. Dalam julat ASCII ini ialah "[0-9A-Fa-f]". Varian "isXDIGIT_A()" dan
"isXDIGIT_L1()" adalah sama dengan "isXDIGIT()". Lihat bahagian atas bahagian ini untuk
penerangan tentang varian "isXDIGIT_uni", "isXDIGIT_utf8", "isXDIGIT_LC",
"isXDIGIT_LC_uvchr", dan "isXDIGIT_LC_utf8".

bool isXDIGIT(char ch)

Pengklonan an penterjemah


perl_clone
Cipta dan kembalikan jurubahasa baharu dengan mengklon yang sedia ada.

perl_clone mengambil bendera ini sebagai parameter:

CLONEf_COPY_STACKS - sudah biasa, baik, menyalin tindanan juga, tanpanya kami hanya
klon data dan sifarkan tindanan, dengannya kami menyalin tindanan dan perl baharu
penterjemah sedia untuk dijalankan pada titik yang sama seperti yang sebelumnya. The
kod pseudo-fork menggunakan COPY_STACKS manakala threads->create tidak.

CLONEf_KEEP_PTR_TABLE - perl_clone menyimpan ptr_table dengan penunjuk yang lama
pembolehubah sebagai kunci dan pembolehubah baharu sebagai nilai, ini membolehkan ia menyemak sama ada
sesuatu telah diklon dan tidak diklon semula tetapi hanya menggunakan nilai dan
meningkatkan kiraan semula. Jika KEEP_PTR_TABLE tidak ditetapkan maka perl_clone akan membunuh
ptr_table menggunakan fungsi "ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;",
sebab untuk mengekalkannya ialah jika anda ingin meniru beberapa pembolehubah anda sendiri yang
di luar imbasan perl graf, contoh kod ini adalah dalam threads.xs create.

CLONEf_CLONE_HOST - Ini adalah perkara win32, ia diabaikan pada unix, ia memberitahu perls
kod win32host (iaitu c++) untuk mengklon sendiri, ini diperlukan pada win32 jika anda mahu
untuk menjalankan dua utas pada masa yang sama, jika anda hanya mahu melakukan beberapa perkara dalam a
asingkan perl penterjemah dan kemudian buangnya dan kembali kepada yang asal,
anda tidak perlu melakukan apa-apa.

PerlInterpreter* perl_clone(
PerlInterpreter *proto_perl,
bendera UV
)

Masa penyusunan skop cangkuk


BhkDISABLE
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Lumpuhkan sementara entri dalam struktur BHK ini, dengan mengosongkan yang sesuai
bendera. yang ialah token prapemproses yang menunjukkan entri yang hendak dilumpuhkan.

batal BhkDISABLE(BHK *hk, yang)

BhkENABLE
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Dayakan semula entri dalam struktur BHK ini, dengan menetapkan bendera yang sesuai. yang
ialah token prapemproses yang menunjukkan kemasukan mana yang perlu didayakan. Ini akan menegaskan (di bawah
-DDEBUGGING) jika entri tidak mengandungi penunjuk yang sah.

batal BhkENABLE(BHK *hk, yang)

BhkENTRY_set
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Tetapkan entri dalam struktur BHK, dan tetapkan bendera untuk menunjukkan ia sah.
yang ialah token prapemprosesan yang menunjukkan entri yang hendak ditetapkan. Jenis ptr
bergantung pada entri.

batal BhkENTRY_set(BHK *hk, yang mana, batal *ptr)

blockhook_register
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Daftar satu set cangkuk untuk dipanggil apabila skop leksikal Perl berubah pada
masa menyusun. Lihat "Kompilasi cangkuk skop masa" dalam perlguts.

NOTA: fungsi ini mesti dipanggil secara eksplisit sebagai Perl_blockhook_register dengan
parameter aTHX_.

batal Perl_blockhook_register(pTHX_ BHK *hk)

COP Petunjuk Labuh


cophh_2hv
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menjana dan mengembalikan cincangan Perl standard yang mewakili set penuh kunci/nilai
pasangan dalam cincang isyarat polis cophh. bendera pada masa ini tidak digunakan dan mestilah sifar.

HV * cophh_2hv(const COPHH *cophh, bendera U32)

cophh_copy
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Buat dan pulangkan salinan lengkap cincangan petunjuk polis cophh.

COPHH * cophh_copy(COPHH *cophh)

cophh_delete_pv
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Seperti "cophh_delete_pvn", tetapi mengambil rentetan nul-terminated dan bukannya a
pasangan rentetan/panjang.

COPHH * cophh_delete_pv(const COPHH *cophh,
const char *kunci, cincang U32,
bendera U32)

cophh_delete_pvn
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Padamkan kunci dan nilai yang berkaitan daripada cincangan petunjuk polis cophh, dan kembali
cincang yang diubah suai. Penunjuk cincang yang dikembalikan secara umum tidak sama dengan
penuding cincang yang dihantar masuk. Cincang input digunakan oleh fungsi, dan
penunjuk kepadanya tidak boleh digunakan kemudiannya. Gunakan "cophh_copy" jika anda perlukan
kedua-dua cincang.

Kuncinya ditentukan oleh keypv and keylen. Jika bendera mempunyai bit "COPHH_KEY_UTF8".
set, oktet utama ditafsirkan sebagai UTF-8, jika tidak ia ditafsirkan sebagai
Latin-1. hash ialah cincang prakiraan rentetan kekunci, atau sifar jika belum
prakiraan.

COPHH * cophh_delete_pvn(COPHH *cophh,
const char *keypv,
STRLEN keylen, cincang U32,
bendera U32)

cophh_delete_pvs
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Seperti "cophh_delete_pvn", tetapi mengambil rentetan literal dan bukannya rentetan/panjang
berpasangan, dan tiada cincang prakiraan.

COPHH * cophh_delete_pvs(const COPHH *cophh,
const char *kunci, bendera U32)

cophh_delete_sv
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Seperti "cophh_delete_pvn", tetapi mengambil skalar Perl dan bukannya pasangan rentetan/panjang.

COPHH * cophh_delete_sv(const COPHH *cophh, SV *key,
cincang U32, bendera U32)

cophh_fetch_pv
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Seperti "cophh_fetch_pvn", tetapi mengambil rentetan yang ditamatkan nol dan bukannya a
pasangan rentetan/panjang.

SV * cophh_fetch_pv(const COPHH *cophh,
const char *kunci, cincang U32,
bendera U32)

cophh_fetch_pvn
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Cari entri dalam cincangan petunjuk polis cophh dengan kunci yang ditentukan oleh keypv and
keylen. Jika bendera mempunyai set bit "COPHH_KEY_UTF8", oktet kunci ditafsirkan
sebagai UTF-8, jika tidak, ia ditafsirkan sebagai Latin-1. hash ialah cincang prakiraan
daripada rentetan kunci, atau sifar jika ia belum diprakira. Mengembalikan seorang fana
salinan skalar bagi nilai yang dikaitkan dengan kunci atau &PL_sv_placeholder jika ada
tiada nilai yang dikaitkan dengan kunci.

SV * cophh_fetch_pvn(const COPHH *cophh,
const char *keypv,
STRLEN keylen, cincang U32,
bendera U32)

cophh_fetch_pvs
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Seperti "cophh_fetch_pvn", tetapi mengambil rentetan literal dan bukannya rentetan/panjang
berpasangan, dan tiada cincang prakiraan.

SV * cophh_fetch_pvs(const COPHH *cophh,
const char *kunci, bendera U32)

cophh_fetch_sv
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Seperti "cophh_fetch_pvn", tetapi mengambil skalar Perl dan bukannya pasangan rentetan/panjang.

SV * cophh_fetch_sv(const COPHH *cophh, SV *kunci,
cincang U32, bendera U32)

cophh_free
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Buang cincang pembayang polis cophh, membebaskan semua sumber yang berkaitan dengannya.

batal cophh_free(COPHH *cophh)

cophh_new_empty
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Hasilkan dan kembalikan cincangan pembayang polis baharu yang tidak mengandungi entri.

COPHH * cophh_new_empty()

cophh_store_pv
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Seperti "cophh_store_pvn", tetapi mengambil rentetan yang ditamatkan nol dan bukannya a
pasangan rentetan/panjang.

COPHH * cophh_store_pv(const COPHH *cophh,
const char *kunci, cincang U32,
SV *nilai, bendera U32)

cophh_store_pvn
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menyimpan nilai, dikaitkan dengan kunci, dalam cincang pembayang polis cophh, dan kembali
cincang yang diubah suai. Penunjuk cincang yang dikembalikan secara umum tidak sama dengan
penuding cincang yang dihantar masuk. Cincang input digunakan oleh fungsi, dan
penunjuk kepadanya tidak boleh digunakan kemudiannya. Gunakan "cophh_copy" jika anda perlukan
kedua-dua cincang.

Kuncinya ditentukan oleh keypv and keylen. Jika bendera mempunyai bit "COPHH_KEY_UTF8".
set, oktet utama ditafsirkan sebagai UTF-8, jika tidak ia ditafsirkan sebagai
Latin-1. hash ialah cincang prakiraan rentetan kekunci, atau sifar jika belum
prakiraan.

nilai ialah nilai skalar untuk disimpan untuk kunci ini. nilai ditiru oleh ini
fungsi, yang oleh itu tidak mengambil pemilikan sebarang rujukan kepadanya, dan kemudiannya
perubahan pada skalar tidak akan ditunjukkan dalam nilai yang boleh dilihat dalam pembayang polis
hash. Jenis skalar kompleks tidak akan disimpan dengan integriti rujukan, tetapi
akan dipaksa bertali arus.

COPHH * cophh_store_pvn(COPHH *cophh, const char *keypv,
STRLEN keylen, cincang U32,
SV *nilai, bendera U32)

cophh_store_pvs
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Seperti "cophh_store_pvn", tetapi mengambil rentetan literal dan bukannya rentetan/panjang
berpasangan, dan tiada cincang prakiraan.

COPHH * cophh_store_pvs(const COPHH *cophh,
const char *kunci, SV *nilai,
bendera U32)

cophh_store_sv
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Seperti "cophh_store_pvn", tetapi mengambil skalar Perl dan bukannya pasangan rentetan/panjang.

COPHH * cophh_store_sv(const COPHH *cophh, SV *key,
Cincang U32, SV *nilai, bendera U32)

COP Petunjuk Reading


cop_hints_2hv
Menjana dan mengembalikan cincangan Perl standard yang mewakili set penuh pembayang
entri dalam polis polis. bendera pada masa ini tidak digunakan dan mestilah sifar.

HV * cop_hints_2hv(const COP *polis, bendera U32)

cop_hints_fetch_pv
Seperti "cop_hints_fetch_pvn", tetapi mengambil rentetan nul-terminated dan bukannya a
pasangan rentetan/panjang.

SV * cop_hints_fetch_pv(const COP *cop,
const char *kunci, cincang U32,
bendera U32)

cop_hints_fetch_pvn
Cari entri petunjuk dalam polis polis dengan kunci yang ditentukan oleh keypv and keylen.
If bendera mempunyai set bit "COPHH_KEY_UTF8", oktet kunci ditafsirkan sebagai
UTF-8, jika tidak, ia ditafsirkan sebagai Latin-1. hash ialah cincang prakiraan daripada
rentetan kunci, atau sifar jika ia belum diprakira. Mengembalikan skalar fana
salinan nilai yang dikaitkan dengan kunci, atau &PL_sv_placeholder jika tiada
nilai yang dikaitkan dengan kunci.

SV * cop_hints_fetch_pvn(const COP *cop,
const char *keypv,
STRLEN keylen, cincang U32,
bendera U32)

cop_hints_fetch_pvs
Seperti "cop_hints_fetch_pvn", tetapi mengambil rentetan literal dan bukannya rentetan/panjang
berpasangan, dan tiada cincang prakiraan.

SV * cop_hints_fetch_pvs(const COP *cop,
const char *kunci, bendera U32)

cop_hints_fetch_sv
Seperti "cop_hints_fetch_pvn", tetapi mengambil skalar Perl dan bukannya rentetan/panjang
pasangan.

SV * cop_hints_fetch_sv(const COP *cop, SV *key,
cincang U32, bendera U32)

Adat Operator


custom_op_register
Daftar op. Lihat "Operator Tersuai" dalam perlguts.

NOTA: fungsi ini mesti dipanggil secara eksplisit sebagai Perl_custom_op_register dengan
parameter aTHX_.

batal Perl_custom_op_register(pTHX_
Perl_ppaddr_t ppaddr,
const XOP *xop)

custom_op_xop
Kembalikan struktur XOP untuk operasi tersuai yang diberikan. Makro ini harus dipertimbangkan
dalaman kepada OP_NAME dan makro akses lain: sebaliknya gunakannya. Makro ini
memang memanggil fungsi. Sebelum 5.19.6, ini dilaksanakan sebagai fungsi.

NOTA: fungsi ini mesti dipanggil secara eksplisit sebagai Perl_custom_op_xop dengan aTHX_
parameter.

const XOP * Perl_custom_op_xop(pTHX_ const OP *o)

XopDISABLE
Lumpuhkan ahli XOP buat sementara waktu, dengan mengosongkan bendera yang sesuai.

batal XopDISABLE(XOP *xop, yang)

XopENABLE
Dayakan semula ahli XOP yang telah dilumpuhkan.

batal XopENABLE(XOP *xop, yang)

XopENTRY
Kembalikan ahli struktur XOP. yang ialah token cpp yang menunjukkan entri yang mana
untuk memulangkan. Jika ahli tidak ditetapkan ini akan mengembalikan nilai lalai. Pulangannya
jenis bergantung kepada yang. Makro ini menilai hujahnya lebih daripada sekali. Jika awak
sedang menggunakan "Perl_custom_op_xop" untuk mendapatkan semula "XOP *" daripada "OP *", gunakan lebih banyak
"XopENTRYCUSTOM" yang cekap sebaliknya.

XopENTRY(XOP *xop, yang)

XopENTRYCUSTOM
Betul-betul seperti "XopENTRY(XopENTRY(Perl_custom_op_xop(aTHX_ o), which)" tetapi banyak lagi
cekap. The yang parameter adalah sama dengan "XopENTRY".

XopENTRYCUSTOM(const OP *o, which)

XopENTRY_set
Tetapkan ahli struktur XOP. yang ialah token cpp yang menunjukkan entri yang mana
ditetapkan. Lihat "Operator Tersuai" dalam perlguts untuk butiran tentang ahli yang tersedia
dan bagaimana ia digunakan. Makro ini menilai hujahnya lebih daripada sekali.

batal XopENTRY_set(XOP *xop, yang, nilai)

XopFLAGS
Kembalikan bendera XOP.

U32 XopFLAGS(XOP *xop)

CV Manipulasi Fungsi


Bahagian ini mendokumenkan fungsi untuk memanipulasi CV yang merupakan nilai kod, atau subrutin.
Untuk maklumat lanjut, lihat perlguts.

pemanggil_cx
XSUB-penulis setara dengan pemanggil(). Struktur "PERL_CONTEXT" yang dikembalikan
boleh disoal siasat untuk mencari semua maklumat yang dikembalikan kepada Perl dengan "pemanggil".
Ambil perhatian bahawa XSUB tidak mendapat bingkai tindanan, jadi "caller_cx(0, NULL)" akan kembali
maklumat untuk kod Perl yang mengelilingi serta-merta.

Fungsi ini melangkau panggilan automatik ke &DB::sub yang dibuat bagi pihak
penyahpepijat. Jika bingkai tindanan yang diminta ialah sub yang dipanggil oleh "DB::sub", pulangan
nilai akan menjadi bingkai untuk panggilan ke "DB::sub", kerana ia mempunyai baris yang betul
nombor/dsb. untuk tapak panggilan. Jika dbcxp bukan "NULL", ia akan ditetapkan kepada a
penunjuk ke bingkai untuk subpanggilan itu sendiri.

const PERL_CONTEXT * pemanggil_cx(
tahap I32,
const PERL_CONTEXT **dbcxp
)

CvSTASH Mengembalikan simpanan CV. Simpanan ialah cincang jadual simbol, yang mengandungi
pembolehubah berskop pakej dalam pakej tempat subrutin ditakrifkan. Untuk
maklumat lanjut, lihat perlguts.

Ini juga mempunyai kegunaan istimewa dengan subs XS AUTOLOAD. Lihat "Automuat dengan XSUB"
dalam perlguts.

HV* CvSTASH(CV* cv)

find_runcv
Cari CV yang sepadan dengan sub atau eval yang sedang dilaksanakan. Jika db_seqp ialah
non_null, langkau CV yang ada dalam pakej DB dan isi *db_seqp dengan polis
nombor urutan pada titik kod DB:: dimasukkan. (Ini membenarkan
penyahpepijat untuk menilai dalam skop titik putus dan bukannya dalam skop
penyahpepijat itu sendiri.)

CV* find_runcv(U32 *db_seqp)

get_cv Menggunakan "strlen" untuk mendapatkan panjang "nama", kemudian panggil "get_cvn_flags".

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

CV* get_cv(const char* nama, bendera I32)

get_cvn_flags
Mengembalikan CV subrutin Perl yang ditentukan. "bendera" diserahkan kepada
"gv_fetchpvn_flags". Jika "GV_ADD" ditetapkan dan subrutin Perl tidak wujud
maka ia akan diisytiharkan (yang mempunyai kesan yang sama seperti menyebut "sub name;"). Jika
"GV_ADD" tidak ditetapkan dan subrutin tidak wujud kemudian NULL dikembalikan.

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

CV* get_cvn_flags(const char* nama, STRLEN len,
bendera I32)

Debugging Kesediaan


buang_semua
Membuang keseluruhan optree program semasa bermula dari "PL_main_root" ke
"STDERR". Juga membuang optrees untuk semua subrutin yang kelihatan dalam "PL_defstash".

void dump_all()

dump_packsubs
Membuang optrees untuk semua subrutin yang kelihatan dalam "simpanan".

batal dump_packsubs(const HV* simpanan)

op_dump Melambakkan optree bermula dari OP "o" kepada "STDERR".

void op_dump(const OP *o)

sv_dump Membuang kandungan SV ke pemegang fail "STDERR".

Untuk contoh outputnya, lihat Devel::Peek.

void sv_dump(SV* sv)

paparan and Membuang fungsi


pv_display
Sama seperti

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

kecuali "\0" tambahan akan dilampirkan pada rentetan apabila len > cur dan
pv[cur] ialah "\0".

Ambil perhatian bahawa rentetan akhir mungkin sehingga 7 aksara lebih panjang daripada pvlim.

char* pv_display(SV *dsv, const char *pv, STRLEN cur,
STRLEN len, STRLEN pvlim)

pv_escape
Melarikan diri paling banyak aksara "kira" pertama pv dan meletakkan hasilnya ke dalam dsv sedemikian
bahawa saiz rentetan yang dilepaskan tidak akan melebihi aksara "maks" dan tidak akan
mengandungi sebarang urutan pelarian yang tidak lengkap. Bilangan bait yang terlepas ialah
dikembalikan dalam STRLEN *parameter melarikan diri jika ia bukan nol. Apabila dsv
parameter is null tiada escape sebenarnya berlaku, tetapi bilangan bait yang akan berlaku
terlepas sekiranya tidak batal akan dikira.

Jika bendera mengandungi PERL_PV_ESCAPE_QUOTE maka sebarang petikan berganda dalam rentetan akan
juga dapat melarikan diri.

Biasanya SV akan dikosongkan sebelum rentetan yang terlepas disediakan, tetapi apabila
PERL_PV_ESCAPE_NOCLEAR ditetapkan ini tidak akan berlaku.

Jika PERL_PV_ESCAPE_UNI ditetapkan maka rentetan input dianggap sebagai UTF-8 jika
PERL_PV_ESCAPE_UNI_DETECT ditetapkan kemudian rentetan input diimbas menggunakan
"is_utf8_string()" untuk menentukan sama ada ia adalah UTF-8.

Jika PERL_PV_ESCAPE_ALL ditetapkan maka semua aksara input akan dikeluarkan menggunakan "\x01F1"
gaya melarikan diri, sebaliknya jika PERL_PV_ESCAPE_NONASCII ditetapkan, hanya aksara bukan ASCII
akan melarikan diri menggunakan gaya ini; jika tidak, hanya aksara di atas 255 akan begitu
melarikan diri; aksara lain yang tidak boleh dicetak akan menggunakan corak oktal atau biasa melarikan diri seperti
"\n". Jika tidak, jika PERL_PV_ESCAPE_NOBACKSLASH maka semua aksara di bawah 255 akan
dianggap sebagai boleh dicetak dan akan dikeluarkan sebagai literal.

Jika PERL_PV_ESCAPE_FIRSTCHAR ditetapkan maka hanya aksara pertama rentetan akan menjadi
melarikan diri, tanpa mengira maks. Jika output adalah dalam hex, maka ia akan menjadi
dikembalikan sebagai jujukan heks biasa. Oleh itu output akan sama ada menjadi satu char,
jujukan pelarian oktal, pelarian khas seperti "\n" atau nilai heks.

Jika PERL_PV_ESCAPE_RE ditetapkan maka aksara melarikan diri yang digunakan akan menjadi '%' dan bukan
'\\'. Ini kerana regex selalunya mengandungi jujukan bergaris ke belakang, sedangkan
'%' bukan watak yang biasa dalam corak.

Mengembalikan penuding kepada teks yang dilepaskan seperti yang dipegang oleh dsv.

char* pv_escape(SV *dsv, char const * const str,
const STRLEN kiraan, const STRLEN maks,
STRLEN * const melarikan diri,
bendera const U32)

pv_cantik
Menukar rentetan kepada sesuatu yang menarik, mengendalikan melarikan diri melalui pv_escape()
dan menyokong petikan dan elips.

Jika bendera PERL_PV_PRETTY_QUOTE ditetapkan maka hasilnya akan disebut dua kali dengan
sebarang petikan berganda dalam rentetan terlepas. Sebaliknya jika PERL_PV_PRETTY_LTGT
bendera ditetapkan kemudian hasilnya dibalut dalam kurungan sudut.

Jika bendera PERL_PV_PRETTY_ELLIPSES ditetapkan dan tidak semua aksara dalam rentetan ditetapkan
output kemudian elipsis "..." akan dilampirkan pada rentetan. Perhatikan bahawa ini
berlaku SELEPAS ia telah dipetik.

Jika start_color bukan nol maka ia akan dimasukkan selepas petikan pembukaan (jika
ada satu) tetapi sebelum teks yang terlepas. Jika end_color bukan nol maka ia akan
disisipkan selepas teks yang terlepas tetapi sebelum sebarang petikan atau elips.

Mengembalikan penuding kepada teks cantik seperti yang dipegang oleh dsv.

char* pv_pretty(SV *dsv, char const * const str,
const STRLEN kiraan, const STRLEN maks,
char const * const start_color,
char const * const end_color,
bendera const U32)

Embedding Fungsi


cv_clone
Mengklon CV, membuat penutupan leksikal. prototaip membekalkan prototaip
fungsi: kodnya, struktur pad dan atribut lain. Prototaipnya ialah
digabungkan dengan tangkapan leksikal luar yang dirujuk oleh kod, iaitu
diambil daripada contoh kod sekeliling yang sedang dilaksanakan sekarang.

CV * cv_clone(CV *proto)

cv_name Mengembalikan SV yang mengandungi nama CV, terutamanya untuk digunakan dalam pelaporan ralat.
CV sebenarnya mungkin GV sebaliknya, dalam hal ini SV yang dikembalikan memegang GV
nama. Apa-apa sahaja selain GV atau CV dianggap sebagai rentetan yang sudah memegangnya
sub nama, tetapi ini boleh berubah pada masa hadapan.

SV boleh diluluskan sebagai hujah kedua. Jika ya, nama akan diberikan kepadanya
dan ia akan dikembalikan. Jika tidak SV yang dikembalikan akan menjadi manusia baru.

Jika bendera sertakan CV_NAME_NOTQUAL, maka nama pakej tidak akan disertakan.
Jika hujah pertama bukan CV mahupun GV, bendera ini diabaikan (tertakluk kepada
ubah).

SV * cv_name(CV *cv, SV *sv, bendera U32)

cv_undef
Kosongkan semua komponen aktif CV. Ini boleh berlaku sama ada oleh
"undef &foo" eksplisit, atau mengikut kiraan rujukan menuju ke sifar. Dalam bekas
kes, kami menyimpan penunjuk CvOUTSIDE, supaya mana-mana kanak-kanak tanpa nama masih boleh
ikut rantai skop leksikal penuh.

batal cv_undef(CV* cv)

find_rundefsv
Cari dan kembalikan pembolehubah yang dinamakan $_ dalam skop leksikal bagi
fungsi yang sedang dilaksanakan. Ini mungkin $_ leksikal, atau sebaliknya akan menjadi
global.

SV * find_rundefsv()

find_rundefsvoffset
DILARANG! Ia merancang untuk mengalih keluar fungsi ini daripada keluaran masa hadapan Perl.
Jangan gunakannya untuk kod baharu; keluarkannya daripada kod sedia ada.

Cari kedudukan leksikal $_ dalam pad yang sedang dilaksanakan
fungsi. Mengembalikan offset dalam pad semasa, atau "NOT_IN_PAD" jika tiada
leksikal $_ dalam skop (dalam hal ini yang global harus digunakan sebaliknya).
"find_rundefsv" mungkin lebih mudah.

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

PADOFFSET find_rundefsvoffset()

intro_my
"Perkenalkan" "saya" pembolehubah kepada status yang boleh dilihat. Ini dipanggil semasa menghuraikan di
penghujung setiap pernyataan untuk menjadikan pembolehubah leksikal kelihatan kepada yang berikutnya
Penyataan.

U32 intro_my()

modul_muat
Memuatkan modul yang namanya ditunjuk oleh bahagian rentetan nama. Perhatikan bahawa
nama modul sebenar, bukan nama failnya, harus diberikan. Cth, "Foo::Bar" sebaliknya
daripada "Foo/Bar.pm". bendera boleh menjadi mana-mana PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT atau
PERL_LOADMOD_IMPORT_OPS (atau 0 untuk tiada bendera). ver, jika dinyatakan dan bukan NULL,
menyediakan semantik versi yang serupa dengan "use Foo::Bar VERSION". Pilihan
argumen SV* yang tertinggal boleh digunakan untuk menentukan argumen kepada modul import()
kaedah, serupa dengan "gunakan Foo::Bar SENARAI VERSI". Mereka mesti ditamatkan dengan a
penunjuk NULL akhir. Ambil perhatian bahawa senarai ini hanya boleh ditinggalkan apabila
Bendera PERL_LOADMOD_NOIMPORT telah digunakan. Jika tidak sekurang-kurangnya satu NULL
penunjuk untuk menetapkan senarai import lalai diperlukan.

Kiraan rujukan untuk setiap parameter "SV*" yang ditentukan dikurangkan.

void load_module(bendera U32, nama SV*, ver SV*, ...)

PADNAMELIST baharu
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Mencipta senarai nama pad baharu. "maks" ialah indeks tertinggi untuk ruang
diperuntukkan.

PADNAMELIST * PADNAMELIST baharu(saiz_t maks)

newPADNAMEouter
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Membina dan mengembalikan nama pad baharu. Hanya gunakan fungsi ini untuk nama itu
merujuk kepada leksikal luar. (Lihat juga "newPADNAMEpvn".) luar ialah nama pad luar
yang ini cermin. Nama pad yang dikembalikan sudah mempunyai bendera PADNAMEt_OUTER
ditetapkan.

PADNAME * newPADNAMEouter(PADNAME *outer)

PADNAMEpvn baharu
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Membina dan mengembalikan nama pad baharu. s mestilah rentetan UTF8. Jangan gunakan ini
untuk nama pad yang menunjuk kepada leksikal luar. Lihat "newPADNAMEouter".

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

nothreadhook
Stub yang menyediakan cangkuk benang untuk perl_destruct apabila tiada benang.

int nothreadhook()

padnamelist_fetch
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Mengambil nama pad daripada indeks yang diberikan.

PADNAME * padnamelist_fetch(PADNAMELIST *pnl,
kunci SSize_t)

padnamelist_store
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menyimpan nama pad (yang mungkin batal) pada indeks yang diberikan, membebaskan mana-mana yang sedia ada
nama pad dalam slot itu.

PADNAME ** padnamelist_store(PADNAMELIST *pnl,
Kunci SSize_t, PADNAME *val)

pad_add_anon
Memperuntukkan tempat dalam pad yang sedang menyusun (melalui "pad_alloc") untuk
fungsi tanpa nama yang diskop secara leksikal di dalam penyusunan semasa
fungsi. Fungsinya func dipautkan ke dalam pad, dan pautan "CvOUTSIDE" ke
skop luar dilemahkan untuk mengelakkan gelung rujukan.

Satu kiraan rujukan dicuri, jadi anda mungkin perlu melakukan "SvREFCNT_inc(func)".

optype mestilah opcode yang menunjukkan jenis operasi entri pad
untuk menyokong. Ini tidak menjejaskan semantik operasi, tetapi digunakan untuk nyahpepijat.

PADOFFSET pad_add_anon(CV *func, I32 optype)

pad_add_name_pv
Persis seperti "pad_add_name_pvn", tetapi mengambil rentetan nul-terminated dan bukannya a
pasangan rentetan/panjang.

PADOFFSET pad_add_name_pv(const char *nama, bendera U32,
HV *typestash, HV *ourstash)

pad_add_name_pvn
Memperuntukkan tempat dalam pad yang sedang menyusun untuk pembolehubah leksikal bernama.
Menyimpan nama dan metadata lain dalam bahagian nama pad dan membuat
persediaan untuk mengurus skop leksikal pembolehubah. Mengembalikan offset bagi
slot pad yang diperuntukkan.

namepv/namelen nyatakan nama pembolehubah, termasuk sigil utama. Jika simpanan simpanan
bukan nol, namanya adalah untuk leksikal yang ditaip, dan ini mengenal pasti jenisnya. Jika
ourstash bukan nol, ia adalah rujukan leksikal kepada pembolehubah pakej, dan ini
mengenal pasti pakej. Bendera berikut boleh ATAU disatukan:

padadd_OUR secara berlebihan menentukan sama ada ia adalah pakej var
Pembolehubah padadd_STATE akan mengekalkan nilai secara berterusan
padadd_NO_DUP_CHECK langkau semak untuk pembayang leksikal

PADOFFSET pad_add_name_pvn(const char *namepv,
STRLEN namelen, bendera U32,
HV *typestash, HV *ourstash)

pad_add_name_sv
Persis seperti "pad_add_name_pvn", tetapi mengambil rentetan nama dalam bentuk SV
bukannya pasangan rentetan/panjang.

PADOFFSET pad_add_name_sv(SV *nama, bendera U32,
HV *typestash, HV *ourstash)

pad_alloc
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Memperuntukkan tempat dalam pad yang sedang menyusun, mengembalikan offset bagi
slot pad yang diperuntukkan. Tiada nama pada mulanya dilampirkan pada slot pad. tmptype ialah
set bendera yang menunjukkan jenis kemasukan pad yang diperlukan, yang akan ditetapkan dalam
nilai SV untuk kemasukan pad yang diperuntukkan:

SVs_PADMY menamakan pembolehubah leksikal ("my", "our", "state")
SVs_PADTMP kedai sementara tanpa nama
SVf_READONLY pemalar dikongsi antara tahap rekursi

"SVf_READONLY" telah disokong di sini hanya sejak perl 5.20. Untuk bekerja dengan lebih awal
versi juga, gunakan "SVf_READONLY|SVs_PADTMP". "SVf_READONLY" tidak menyebabkan
SV dalam slot pad untuk ditanda baca sahaja, tetapi hanya memberitahu "pad_alloc" bahawa
it akan dibuat baca sahaja (oleh pemanggil), atau sekurang-kurangnya harus dilayan sedemikian.

optype mestilah opcode yang menunjukkan jenis operasi entri pad
untuk menyokong. Ini tidak menjejaskan semantik operasi, tetapi digunakan untuk nyahpepijat.

PADOFFSET pad_alloc(I32 optype, U32 tmptype)

pad_findmy_pv
Persis seperti "pad_findmy_pvn", tetapi mengambil rentetan nul-terminated dan bukannya a
pasangan rentetan/panjang.

PADOFFSET pad_findmy_pv(const char *nama, bendera U32)

pad_findmy_pvn
Diberi nama pembolehubah leksikal, cari kedudukannya dalam penyusunan semasa
PAD. namepv/namelen nyatakan nama pembolehubah, termasuk sigil utama. bendera
adalah terpelihara dan mestilah sifar. Jika ia tiada dalam pad semasa tetapi muncul dalam
pad sebarang skop yang melampirkan secara leksikal, kemudian entri pseudo untuknya ditambah dalam
pad semasa. Mengembalikan offset dalam pad semasa, atau "NOT_IN_PAD" jika tiada
leksikal adalah dalam skop.

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

pad_findmy_sv
Persis seperti "pad_findmy_pvn", tetapi mengambil rentetan nama dalam bentuk SV
bukannya pasangan rentetan/panjang.

PADOFFSET pad_findmy_sv(SV *nama, bendera U32)

pad_setsv
Tetapkan nilai pada offset po dalam pad semasa (menyusun atau melaksanakan). Menggunakan
makro PAD_SETSV() dan bukannya memanggil fungsi ini secara langsung.

batal pad_setsv(PADOFFSET po, SV *sv)

pad_sv Dapatkan nilai pada offset po dalam pad semasa (menyusun atau melaksanakan). Gunakan makro
PAD_SV bukannya memanggil fungsi ini secara langsung.

SV * pad_sv(PADOFFSET po)

pad_kemas
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Kemas pad pada penghujung penyusunan kod yang dimilikinya. pekerjaan
dilakukan di sini ialah: mengeluarkan kebanyakan barangan daripada pad prototaip anonsub; berikannya
a @_; tandakan sementara seperti itu. jenis menunjukkan jenis subrutin:

padtidy_SUB subrutin biasa
padtidy_SUBCLONE prototaip untuk penutupan leksikal
format padtidy_FORMAT

void pad_tidy(padtidy_type type)

perl_alloc
Memperuntukkan penterjemah Perl baharu. Lihat perlembem.

PerlInterpreter* perl_alloc()

perl_construct
Memulakan penterjemah Perl baharu. Lihat perlembem.

batal perl_construct(PerlInterpreter *my_perl)

perl_destruct
Mematikan jurubahasa Perl. Lihat perlembem.

int perl_destruct(PerlInterpreter *my_perl)

perl_free
Mengeluarkan penterjemah Perl. Lihat perlembem.

batal perl_free(PerlInterpreter *my_perl)

perl_parse
Memberitahu jurubahasa Perl untuk menghuraikan skrip Perl. Lihat perlembem.

int perl_parse(PerlInterpreter *my_perl,
XSINIT_t xsinit, int argc,
char** argv, char** env)

perl_run
Memberitahu jurubahasa Perl untuk berlari. Lihat perlembem.

int perl_run(PerlInterpreter *my_perl)

memerlukan_pv
Memberitahu Perl untuk "memerlukan" fail yang dinamakan oleh hujah rentetan. Ia serupa dengan
kod Perl "eval "memerlukan '$file'"". Malah ia dilaksanakan dengan cara itu; pertimbangkan
menggunakan load_module sebaliknya.

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

batal memerlukan_pv(const char* pv)

Pengecualian pengendalian (ringkas) Makro


dXCPT Sediakan pembolehubah tempatan yang diperlukan untuk pengendalian pengecualian. Lihat "Pengendalian Pengecualian"
dalam perlguts.

dXCPT;

XCPT_CATCH
Memperkenalkan blok tangkapan. Lihat "Pengendalian Pengecualian" dalam perlguts.

XCPT_RETHROW
Melemparkan semula pengecualian yang ditangkap sebelum ini. Lihat "Pengendalian Pengecualian" dalam perlguts.

XCPT_RETHROW;

XCPT_TRY_END
Menamatkan blok percubaan. Lihat "Pengendalian Pengecualian" dalam perlguts.

XCPT_TRY_START
Memulakan blok percubaan. Lihat "Pengendalian Pengecualian" dalam perlguts.

Global Pembolehubah


Pembolehubah ini adalah global kepada keseluruhan proses. Ia dikongsi antara semua jurubahasa
dan semua benang dalam satu proses.

PL_check
Tatasusunan, diindeks oleh opcode, fungsi yang akan dipanggil untuk fasa "semak".
pembinaan optree semasa penyusunan kod Perl. Untuk kebanyakan (tetapi bukan semua) jenis
op, apabila op telah dibina pada mulanya dan diisi dengan op kanak-kanak ia akan
ditapis melalui fungsi semak yang dirujuk oleh elemen yang sesuai bagi
tatasusunan ini. Op baharu diluluskan sebagai hujah tunggal kepada fungsi semak,
dan fungsi semak mengembalikan op yang lengkap. Fungsi semak mungkin (sebagai
name suggests) semak op untuk kesahihan dan ralat isyarat. Ia juga boleh
mulakan atau ubah suai bahagian ops, atau lakukan pembedahan yang lebih radikal seperti
menambah atau mengalih keluar op kanak-kanak, atau membuang op itu dan mengembalikan op yang berbeza
di tempatnya.

Tatasusunan penunjuk fungsi ini ialah tempat yang mudah untuk menyambung ke dalam kompilasi
proses. Modul XS boleh meletakkan fungsi semakan tersuainya sendiri sebagai ganti mana-mana
yang standard, untuk mempengaruhi penyusunan jenis op tertentu.
Walau bagaimanapun, fungsi semakan tersuai tidak boleh menggantikan semakan standard sepenuhnya
fungsi (atau malah fungsi semakan tersuai daripada modul lain). Sebuah modul
mengubah suai semakan mesti sebaliknya balut fungsi semak sedia ada. Satu adat
fungsi semak mestilah selektif tentang masa untuk menggunakan kelakuan tersuainya. Di dalam
kes biasa di mana ia memutuskan untuk tidak melakukan sesuatu yang istimewa dengan op, ia mesti dirantai
fungsi op sedia ada. Oleh itu, fungsi semak dipautkan dalam rantai, dengan
penyemak asas teras di hujungnya.

Untuk keselamatan benang, modul tidak boleh menulis terus ke tatasusunan ini. Sebaliknya, gunakan
fungsi "wrap_op_checker".

PL_keyword_plugin
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Penunjuk fungsi, menunjuk pada fungsi yang digunakan untuk mengendalikan kata kunci lanjutan. The
fungsi hendaklah diisytiharkan sebagai

int keyword_plugin_function(pTHX_
char *keyword_ptr, STRLEN keyword_len,
OP **op_ptr)

Fungsi ini dipanggil dari tokenizer, apabila kata kunci yang mungkin dilihat.
"keyword_ptr" menunjuk pada perkataan dalam penimbal input parser dan "keyword_len"
memberikan panjangnya; ia tidak dibatalkan. Fungsi ini diharapkan untuk memeriksa
perkataan, dan mungkin keadaan lain seperti %^H, untuk memutuskan sama ada ia mahu
mengendalikannya sebagai kata kunci lanjutan. Jika tidak, fungsi itu harus kembali
"KEYWORD_PLUGIN_DECLINE", dan proses penghurai biasa akan diteruskan.

Jika fungsi mahu mengendalikan kata kunci, ia mesti menghuraikan apa-apa dahulu
mengikuti kata kunci yang merupakan sebahagian daripada sintaks yang diperkenalkan oleh kata kunci. Lihat
"Antara muka Lexer" untuk butiran.

Apabila kata kunci dikendalikan, fungsi pemalam mesti membina pepohon "OP"
struktur, mewakili kod yang telah dihuraikan. Akar pokok mestilah
disimpan dalam *op_ptr. Fungsi itu kemudian mengembalikan pemalar yang menunjukkan sintaksis
peranan binaan yang telah dihuraikan: "KEYWORD_PLUGIN_STMT" jika ia adalah
pernyataan lengkap atau "KEYWORD_PLUGIN_EXPR" jika ia adalah ungkapan. Perhatikan bahawa a
binaan pernyataan tidak boleh digunakan di dalam ungkapan (kecuali melalui "buat BLOCK" dan
serupa), dan ungkapan bukanlah pernyataan lengkap (ia memerlukan sekurang-kurangnya a
penamatan titik bertitik).

Apabila kata kunci dikendalikan, fungsi pemalam mungkin juga mempunyai sisi (masa penyusunan).
kesan. Ia boleh mengubah suai "%^H", mentakrifkan fungsi, dan sebagainya. Biasanya, jika sebelah
kesan adalah tujuan utama pengendali, ia tidak mahu menjana sebarang ops untuk
dimasukkan ke dalam kompilasi biasa. Dalam kes ini ia masih diperlukan untuk
membekalkan pokok op, tetapi ia mencukupi untuk menjana satu op null.

Begitulah fungsi *PL_keyword_plugin perlu bertindak secara keseluruhan.
Secara konvensional, bagaimanapun, seseorang tidak menggantikan sepenuhnya pengendali sedia ada
fungsi. Sebaliknya, ambil salinan "PL_keyword_plugin" sebelum memberikan anda sendiri
penunjuk fungsi kepadanya. Fungsi pengendali anda harus mencari kata kunci yang sebenarnya
berminat dan mengendalikan mereka. Di mana ia tidak berminat, ia harus menghubungi
fungsi pemalam yang disimpan, menyampaikan hujah yang diterimanya. Justeru
"PL_keyword_plugin" sebenarnya menunjuk pada rangkaian fungsi pengendali, yang kesemuanya
mempunyai peluang untuk mengendalikan kata kunci, dan hanya fungsi terakhir dalam rantaian
(dibina dalam teras Perl) biasanya akan mengembalikan "KEYWORD_PLUGIN_DECLINE".

GV Fungsi


GV ialah struktur yang sepadan dengan glob jenis Perl, iaitu *foo. Ia adalah struktur
yang memegang penunjuk kepada skalar, tatasusunan, cincang dll, sepadan dengan $foo, @foo, %foo.

GV biasanya ditemui sebagai nilai dalam simpanan (simbol jadual cincang) tempat Perl menyimpannya
pemboleh ubah global.

GvAV Kembalikan AV daripada GV.

AV* GvAV(GV* gv)

GvCV Kembalikan CV daripada GV.

CV* GvCV(GV* gv)

GvHV Kembalikan HV daripada GV.

HV* GvHV(GV* gv)

GvSV Kembalikan SV daripada GV.

SV* GvSV(GV* gv)

gv_const_sv
Jika "gv" ialah glob jenis yang entri subrutinnya adalah sub tetap yang layak
inlining, atau "gv" ialah rujukan pemegang tempat yang akan dinaikkan pangkat kepada a
typeglob, kemudian mengembalikan nilai yang dikembalikan oleh sub. Jika tidak, mengembalikan NULL.

SV* gv_const_sv(GV* gv)

gv_fetchmeth
Seperti "gv_fetchmeth_pvn", tetapi tidak mempunyai parameter bendera.

GV* gv_fetchmeth(HV* simpanan, const char* nama,
STRLEN len, tahap I32)

gv_fetchmethod_autoload
Mengembalikan glob yang mengandungi subrutin untuk dipanggil untuk menggunakan kaedah pada
"simpanan". Malah dengan adanya autoloading ini mungkin glob untuk
"AUTOLOAD". Dalam kes ini, pembolehubah sepadan $AUTOLOAD sudah disediakan.

Parameter ketiga "gv_fetchmethod_autoload" menentukan sama ada AUTOLOAD
carian dilakukan jika kaedah yang diberikan tidak hadir: bukan sifar bermakna ya, lihat
untuk AUTOLOAD; sifar bermakna tidak, jangan cari AUTOLOAD. Memanggil "gv_fetchmethod" ialah
bersamaan dengan memanggil "gv_fetchmethod_autoload" dengan bukan sifar "autoload"
parameter.

Fungsi ini memberikan token "SUPER" sebagai awalan nama kaedah. Perhatikan bahawa jika
anda ingin menyimpan glob yang dipulangkan untuk masa yang lama, anda perlu menyemak sama ada ia wujud
"AUTOLOAD", memandangkan pada masa kemudian panggilan mungkin memuatkan subrutin berbeza yang perlu dibayar
kepada $AUTOLOAD menukar nilainya. Gunakan glob yang dicipta sebagai kesan sampingan untuk dilakukan
ini.

Fungsi ini mempunyai kesan sampingan yang sama seperti "gv_fetchmeth" dengan "level==0". The
amaran supaya tidak melepasi GV yang dikembalikan oleh "gv_fetchmeth" kepada "call_sv" terpakai
sama dengan fungsi ini.

GV* gv_fetchmethod_autoload(HV* simpanan,
const char* nama,
I32 autoload)

gv_fetchmeth_autoload
Ini ialah bentuk lama "gv_fetchmeth_pvn_autoload", yang tidak mempunyai parameter bendera.

GV* gv_fetchmeth_autoload(HV* simpanan,
const char* nama,
STRLEN len, tahap I32)

gv_fetchmeth_pv
Persis seperti "gv_fetchmeth_pvn", tetapi mengambil rentetan yang ditamatkan nol dan bukannya
pasangan rentetan/panjang.

GV* gv_fetchmeth_pv(HV* simpanan, const char* nama,
tahap I32, bendera U32)

gv_fetchmeth_pvn
Mengembalikan glob dengan "nama" yang diberikan dan subrutin yang ditentukan atau "NULL". The
glob tinggal dalam "simpanan" yang diberikan atau dalam simpanan yang boleh diakses melalui @ISA dan
UNIVERSAL::.

Hujah "tahap" hendaklah sama ada 0 atau -1. Jika "tahap==0", sebagai kesan sampingan
mencipta glob dengan "nama" yang diberikan dalam "simpanan" yang diberikan yang dalam kes
kejayaan mengandungi alias untuk subrutin dan menyediakan maklumat caching untuk ini
glob.

Satu-satunya nilai penting untuk "bendera" ialah GV_SUPER dan SVf_UTF8.

GV_SUPER menunjukkan bahawa kita ingin mencari kaedah dalam kelas super
"simpanan".

GV yang dikembalikan daripada "gv_fetchmeth" mungkin entri cache kaedah, yang bukan
kelihatan kepada kod Perl. Jadi apabila memanggil "call_sv", anda tidak seharusnya menggunakan GV
secara langsung; sebaliknya, anda harus menggunakan CV kaedah, yang boleh diperolehi daripada
GV dengan makro "GvCV".

GV* gv_fetchmeth_pvn(HV* simpanan, const char* nama,
STRLEN len, tahap I32,
bendera U32)

gv_fetchmeth_pvn_autoload
Sama seperti gv_fetchmeth_pvn(), tetapi mencari subrutin yang dimuatkan secara automatik juga. Pulangan a
glob untuk subrutin.

Untuk subrutin yang dimuatkan secara automatik tanpa GV, akan mencipta GV walaupun "tahap < 0".
Untuk subrutin yang dimuatkan secara automatik tanpa rintisan, GvCV() daripada hasilnya mungkin sifar.

Pada masa ini, satu-satunya nilai penting untuk "bendera" ialah SVf_UTF8.

GV* gv_fetchmeth_pvn_autoload(HV* simpanan,
const char* nama,
STRLEN len, tahap I32,
bendera U32)

gv_fetchmeth_pv_autoload
Betul-betul seperti "gv_fetchmeth_pvn_autoload", tetapi mengambil rentetan yang ditamatkan nul
bukannya pasangan rentetan/panjang.

GV* gv_fetchmeth_pv_autoload(HV* simpanan,
const char* nama,
tahap I32, bendera U32)

gv_fetchmeth_sv
Persis seperti "gv_fetchmeth_pvn", tetapi mengambil rentetan nama dalam bentuk SV
bukannya pasangan rentetan/panjang.

GV* gv_fetchmeth_sv(HV* simpanan, SV* namesv,
tahap I32, bendera U32)

gv_fetchmeth_sv_autoload
Persis seperti "gv_fetchmeth_pvn_autoload", tetapi mengambil rentetan nama dalam bentuk
SV bukannya pasangan rentetan/panjang.

GV* gv_fetchmeth_sv_autoload(HV* stash, SV* namesv,
tahap I32, bendera U32)

gv_init Bentuk lama bagi gv_init_pvn(). Ia tidak berfungsi dengan rentetan UTF8, kerana ia tidak mempunyai
parameter bendera. Jika parameter "berbilang" ditetapkan, bendera GV_ADDMULTI akan menjadi
berlalu ke gv_init_pvn().

void gv_init(GV* gv, HV* stash, const char* nama,
STRLEN len, int multi)

gv_init_pv
Sama seperti gv_init_pvn(), tetapi mengambil rentetan yang ditamatkan nul untuk nama dan bukannya
char * dan parameter panjang yang berasingan.

batal gv_init_pv(GV* gv, HV* simpanan, const char* nama,
bendera U32)

gv_init_pvn
Menukar skalar kepada typeglob. Ini ialah glob jenis yang tidak boleh dipaksa; menugaskan a
rujukan kepadanya akan diberikan kepada salah satu slotnya, bukannya menimpanya sebagai
berlaku dengan typeglob yang dicipta oleh SvSetSV. Menukar sebarang skalar iaitu SvOK()
mungkin menghasilkan keputusan yang tidak dapat diramalkan dan dikhaskan untuk kegunaan dalaman perl.

"gv" ialah skalar yang hendak ditukar.

"simpanan" ialah simpanan/pakej induk, jika ada.

"nama" dan "len" memberi nama. Nama mestilah tidak layak; iaitu mesti
tidak termasuk nama pakej. Jika "gv" ialah unsur simpanan, ia adalah milik pemanggil
tanggungjawab untuk memastikan bahawa nama yang dihantar ke fungsi ini sepadan dengan nama
unsur tersebut. Jika ia tidak sepadan, simpan kira dalaman perl akan keluar
segerak.

"bendera" boleh ditetapkan kepada SVf_UTF8 jika "nama" ialah rentetan UTF8, atau nilai pulangan
SvUTF8(sv). Ia juga boleh mengambil bendera GV_ADDMULTI, yang bermaksud untuk berpura-pura begitu
GV telah dilihat sebelum ini (iaitu, sekat amaran "Digunakan sekali").

batal gv_init_pvn(GV* gv, HV* simpanan, const char* nama,
STRLEN len, bendera U32)

gv_init_sv
Sama seperti gv_init_pvn(), tetapi mengambil SV * untuk nama dan bukannya char * yang berasingan
dan parameter panjang. "bendera" pada masa ini tidak digunakan.

void gv_init_sv(GV* gv, HV* stash, SV* namesv,
bendera U32)

gv_stashpv
Mengembalikan penunjuk ke simpanan untuk pakej yang ditentukan. Menggunakan "strlen" untuk
tentukan panjang "nama", kemudian panggil "gv_stashpvn()".

HV* gv_stashpv(nama const char*, bendera I32)

gv_stashpvn
Mengembalikan penunjuk ke simpanan untuk pakej yang ditentukan. Parameter "namelen".
menunjukkan panjang "nama", dalam bait. "bendera" diserahkan kepada
"gv_fetchpvn_flags()", jadi jika ditetapkan kepada "GV_ADD" maka pakej akan dibuat jika
ia belum wujud. Jika pakej tidak wujud dan "bendera" ialah 0 (atau mana-mana
tetapan lain yang tidak mencipta pakej) maka NULL dikembalikan.

Bendera mungkin salah satu daripada:

GV_ADD
SVf_UTF8
GV_NOADD_NOINIT
GV_NOINIT
GV_NOEXPAND
GV_ADDMG

Yang paling penting mungkin ialah GV_ADD dan SVf_UTF8.

Ambil perhatian, penggunaan "gv_stashsv" dan bukannya "gv_stashpvn" di mana mungkin adalah sangat penting
disyorkan atas sebab prestasi.

HV* gv_stashpvn(const char* nama, nama U32,
bendera I32)

gv_stashpvs
Seperti "gv_stashpvn", tetapi mengambil rentetan literal dan bukannya pasangan rentetan/panjang.

HV* gv_stashpvs(const char* nama, I32 create)

gv_stashsv
Mengembalikan penunjuk ke simpanan untuk pakej yang ditentukan. Lihat "gv_stashpvn".

Ambil perhatian bahawa antara muka ini amat diutamakan berbanding "gv_stashpvn" untuk prestasi
sebab.

HV* gv_stashsv(SV* sv, bendera I32)

setdefout
Menetapkan PL_defoutgv, pemegang fail lalai untuk output, kepada yang diluluskan dalam typeglob.
Memandangkan PL_defoutgv "memiliki" rujukan pada glob jenisnya, kiraan rujukan bagi
yang diluluskan dalam glob jenis dinaikkan sebanyak satu, dan kiraan rujukan bagi glob jenis
yang ditunjuk PL_defoutgv berkurangan satu.

void setdefout(GV* gv)

Handy Nilai-nilai


Nullav Null AV penunjuk.

(ditamatkan - gunakan "(AV *)NULL" sebaliknya)

Nullch Penunjuk aksara null. (Tidak lagi tersedia apabila "PERL_CORE" ditakrifkan.)

Nullcv Null CV pointer.

(ditamatkan - gunakan "(CV *)NULL" sebaliknya)

Nullhv Null HV penunjuk.

(ditamatkan - gunakan "(HV *)NULL" sebaliknya)

Nullsv Null SV penunjuk. (Tidak lagi tersedia apabila "PERL_CORE" ditakrifkan.)

Hash Manipulasi Fungsi


Struktur HV mewakili cincang Perl. Ia terdiri terutamanya daripada pelbagai penunjuk, setiap satu
yang menunjukkan kepada senarai pautan struktur HE. Tatasusunan diindeks oleh cincang
fungsi kunci, jadi setiap senarai terpaut mewakili semua entri cincang dengan yang sama
nilai hash. Setiap HE mengandungi penunjuk kepada nilai sebenar, ditambah penunjuk kepada HEK
struktur yang memegang kunci dan nilai cincang.

cop_fetch_label
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Mengembalikan label yang dilampirkan kepada polis. Penunjuk bendera boleh ditetapkan kepada "SVf_UTF8"
atau 0.

const char * cop_fetch_label(COP *const cop,
STRLEN *len, U32 *bendera)

cop_store_label
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Simpan label ke dalam "cop_hints_hash". Anda perlu menetapkan bendera kepada "SVf_UTF8" untuk a
label utf-8.

batal cop_store_label(COP *const cop,
const char *label, STRLEN len,
bendera U32)

get_hv Mengembalikan HV cincang Perl yang ditentukan. "bendera" dihantar kepada "gv_fetchpv".
Jika "GV_ADD" ditetapkan dan pembolehubah Perl tidak wujud maka ia akan dibuat.
Jika "bendera" adalah sifar dan pembolehubah tidak wujud maka NULL dikembalikan.

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

HV* get_hv(const char *nama, bendera I32)

HEf_SVKEY
Bendera ini, yang digunakan dalam slot panjang entri cincang dan struktur ajaib, menentukan
struktur mengandungi penunjuk "SV*" di mana penunjuk "char*" dijangka.
(Untuk maklumat sahaja--tidak untuk digunakan).

HeHASH Mengembalikan cincang yang dikira yang disimpan dalam entri cincang.

U32 HeHASH(HE* he)

HeKEY Mengembalikan penunjuk sebenar yang disimpan dalam slot kekunci entri cincang. Penunjuk
mungkin sama ada "char*" atau "SV*", bergantung pada nilai "HeKLEN()". Boleh jadi
ditugaskan untuk. Makro "HePV()" atau "HeSVKEY()" biasanya lebih disukai
mencari nilai kunci.

batal* HeKEY(HE* he)

HeKLEN Jika ini negatif, dan berjumlah "HEf_SVKEY", ia menunjukkan entri memegang
Kunci "SV*". Jika tidak, memegang panjang sebenar kunci. Boleh ditugaskan untuk.
Makro "HePV()" biasanya lebih disukai untuk mencari panjang kunci.

STRLEN HeKLEN(HE* he)

HePV Mengembalikan slot kunci entri cincang sebagai nilai "char*", melakukan apa-apa yang perlu
penyahrujukan kemungkinan kekunci "SV*". Panjang tali diletakkan dalam "len"
(ini adalah makro, begitu juga tidak gunakan &len). Jika anda tidak mengambil berat tentang apa yang panjang
Perkara utama ialah, anda boleh menggunakan pembolehubah global "PL_na", walaupun ini agak kurang
cekap daripada menggunakan pembolehubah tempatan. Ingat, kunci cincang dalam perl
bebas untuk mengandungi nol terbenam, jadi menggunakan "strlen()" atau yang serupa adalah tidak bagus
cara untuk mencari panjang kunci cincang. Ini sangat serupa dengan makro "SvPV()".
diterangkan di tempat lain dalam dokumen ini. Lihat juga "HeUTF8".

Jika anda menggunakan "HePV" untuk mendapatkan nilai yang dihantar kepada "newSVpvn()" untuk mencipta SV baharu,
anda harus mempertimbangkan untuk menggunakan "newSVhek(HeKEY_hek(he))" kerana ia lebih cekap.

char* HePV(HE* he, STRLEN len)

HeSVKEY Mengembalikan kunci sebagai "SV*", atau "NULL" jika entri cincang tidak mengandungi "SV*"
utama.

SV* HeSVKEY(HE* he)

HeSVKEY_force
Mengembalikan kunci sebagai "SV*". Akan mencipta dan mengembalikan "SV*" fana sementara jika
entri cincang hanya mengandungi kunci "char*".

SV* HeSVKEY_force(HE* he)

HeSVKEY_set
Menetapkan kunci kepada "SV*" yang diberikan, dengan berhati-hati untuk menetapkan bendera yang sesuai
menunjukkan kehadiran kunci "SV*", dan mengembalikan "SV*" yang sama.

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

HeUTF8 Mengembalikan sama ada nilai "char *" yang dikembalikan oleh "HePV" dikodkan dalam UTF-8, melakukan
sebarang penyahrujukan yang diperlukan untuk kemungkinan kunci "SV*". Nilai yang dikembalikan ialah 0
atau bukan 0, tidak semestinya 1 (atau pun nilai dengan set set bit rendah), jadi do tidak
tetapkan ini secara membuta tuli kepada pembolehubah "bool", kerana "bool" mungkin merupakan typedef untuk "char".

U32 HeUTF8(HE* dia)

HeVAL Mengembalikan slot nilai (jenis "SV*") yang disimpan dalam entri cincang. Boleh ditugaskan untuk.

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

SV* HeVAL(HE* he)

HvENAME Mengembalikan nama berkesan simpanan, atau NULL jika tiada. Yang berkesan
nama mewakili lokasi dalam jadual simbol tempat simpanan ini berada. Ia adalah
dikemas kini secara automatik apabila pakej dialiaskan atau dipadamkan. Simpanan yang tidak
lagi dalam jadual simbol tidak mempunyai nama berkesan. Nama ini lebih disukai daripada
"HvNAME" untuk digunakan dalam linearisasi MRO dan cache isa.

char* HvENAME(HV* simpanan)

HvENAMELEN
Mengembalikan panjang nama berkesan simpanan.

STRLEN HvENAMELEN(HV *simpanan)

HvENAMEUTF8
Mengembalikan benar jika nama berkesan adalah dalam pengekodan UTF8.

aksara yang tidak ditandatangani HvENAMEUTF8(HV *simpanan)

HvNAME Mengembalikan nama pakej simpanan, atau NULL jika "simpanan" bukan simpanan. Lihat
"SvSTASH", "CvSTASH".

char* HvNAME(HV* simpanan)

HvNAMELEN
Mengembalikan panjang nama simpanan.

STRLEN HvNAMELEN(HV *simpanan)

HvNAMEUTF8
Mengembalikan benar jika nama dalam pengekodan UTF8.

aksara yang tidak ditandatangani HvNAMEUTF8(HV *simpanan)

hv_assert
Semak sama ada cincang berada dalam keadaan konsisten dalaman.

batal hv_assert(HV *hv)

hv_clear
Membebaskan semua elemen cincang, meninggalkannya kosong. XS bersamaan dengan
"% hash = ()". Lihat juga "hv_undef".

Lihat "av_clear" untuk nota tentang cincangan yang mungkin tidak sah apabila dikembalikan.

batal hv_clear(HV *hv)

hv_clear_placeholders
Kosongkan mana-mana ruang letak daripada cincang. Jika cincangan terhad mempunyai mana-mana kuncinya
ditandakan sebagai baca sahaja dan kunci itu kemudiannya dipadamkan, kunci itu sebenarnya tidak
dipadam tetapi ditandakan dengan memberikannya nilai &PL_sv_placeholder. Ini menandakannya
jadi ia akan diabaikan oleh operasi masa hadapan seperti mengulang cincang, tetapi
masih akan membenarkan cincangan mempunyai nilai yang ditetapkan semula kepada kunci pada masa hadapan
titik. Fungsi ini mengosongkan sebarang kunci pemegang tempat sedemikian daripada cincang. Lihat
Hash::Util::lock_keys() untuk contoh penggunaannya.

batal hv_clear_placeholders(HV *hv)

hv_copy_hints_hv
Versi khusus "newHVhv" untuk menyalin "%^H". ohv mestilah penunjuk kepada a
hash (yang mungkin mempunyai sihir "%^H", tetapi seharusnya bukan ajaib), atau "NULL"
(ditafsirkan sebagai cincang kosong). Kandungan daripada ohv disalin ke cincang baharu, yang
mempunyai "%^H"-sihir khusus ditambahkan padanya. Penunjuk kepada cincang baharu dikembalikan.

HV * hv_copy_hints_hv(HV *ohv)

hv_delete
Memadamkan pasangan kunci/nilai dalam cincang. SV nilai dialih keluar daripada cincang,
dijadikan fana, dan kembali kepada pemanggil. Nilai mutlak "klen" ialah
panjang kunci. Jika "klen" negatif, kunci itu diandaikan berada dalam
Unicode berkod UTF-8. Nilai "bendera" biasanya sifar; jika ditetapkan kepada
G_DISCARD kemudian NULL akan dikembalikan. NULL juga akan dikembalikan jika kuncinya adalah
tidak ditemui.

SV* hv_delete(HV *hv, const char *key, I32 klen,
bendera I32)

hv_delete_ent
Memadamkan pasangan kunci/nilai dalam cincang. Nilai SV dialih keluar daripada cincang, dibuat
fana, dan kembali kepada pemanggil. Nilai "bendera" biasanya sifar; jika
ditetapkan kepada G_DISCARD maka NULL akan dikembalikan. NULL juga akan dikembalikan jika
kunci tidak dijumpai. "cincang" boleh menjadi nilai cincang prakiraan yang sah, atau 0 untuk diminta
ia untuk dikira.

SV* hv_delete_ent(HV *hv, SV *keysv, bendera I32,
cincang U32)

hv_wujud
Mengembalikan boolean yang menunjukkan sama ada kunci cincang yang ditentukan wujud. Yang mutlak
nilai "klen" ialah panjang kunci. Jika "klen" adalah negatif kuncinya ialah
diandaikan berada dalam Unicode yang dikodkan UTF-8.

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

hv_exists_en
Mengembalikan boolean yang menunjukkan sama ada kunci cincang yang ditentukan wujud. "hash" boleh
nilai cincang prakiraan yang sah, atau 0 untuk memintanya dikira.

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

hv_fetch
Mengembalikan SV yang sepadan dengan kunci yang ditentukan dalam cincang. Yang mutlak
nilai "klen" ialah panjang kunci. Jika "klen" adalah negatif kuncinya ialah
diandaikan berada dalam Unicode yang dikodkan UTF-8. Jika "lval" ditetapkan maka pengambilan akan menjadi
sebahagian daripada sebuah kedai. Ini bermakna jika tiada nilai dalam cincang yang dikaitkan dengan
kunci yang diberikan, kemudian satu dicipta dan penunjuk kepadanya dikembalikan. "SV*" itu
mata kepada boleh diberikan kepada. Tetapi sentiasa semak bahawa nilai pulangan adalah bukan nol
sebelum merujuknya kepada "SV*".

Lihat "Memahami Keajaiban Hash dan Tatasusunan Terikat" dalam perlguts untuk maklumat lanjut
maklumat tentang cara menggunakan fungsi ini pada cincang terikat.

SV** hv_fetch(HV *hv, const char *key, I32 klen,
I32 lval)

hv_fetchs
Seperti "hv_fetch", tetapi mengambil rentetan literal dan bukannya pasangan rentetan/panjang.

SV** hv_fetchs(HV* tb, kekunci const char*, I32 lval)

hv_fetch_ent
Mengembalikan entri cincang yang sepadan dengan kunci yang ditentukan dalam cincang. "cincang"
mestilah nombor cincang prakiraan yang sah untuk "kunci" yang diberikan atau 0 jika anda mahukan
berfungsi untuk mengiranya. JIKA "lval" ditetapkan maka pengambilan akan menjadi sebahagian daripada kedai.
Pastikan nilai pulangan bukan nol sebelum mengaksesnya. Nilai pulangan apabila
"hv" ialah cincang terikat ialah penunjuk ke lokasi statik, jadi pastikan anda membuat salinan
struktur jika anda perlu menyimpannya di suatu tempat.

Lihat "Memahami Keajaiban Hash dan Tatasusunan Terikat" dalam perlguts untuk maklumat lanjut
maklumat tentang cara menggunakan fungsi ini pada cincang terikat.

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

hv_fill Mengembalikan bilangan baldi cincang yang sedang digunakan. Fungsi ini ialah
dibalut oleh makro "HvFILL".

Sebelum ini nilai ini sentiasa disimpan dalam struktur HV, yang mencipta satu
overhed pada setiap cincang (dan hampir setiap objek) untuk sesuatu itu
jarang digunakan. Sekarang kita mengira ia atas permintaan pada kali pertama ia diperlukan, dan
cache ia jika pengiraan itu akan mahal untuk diulang. Nilai cache ialah
dikemas kini dengan sisipan dan pemadaman, tetapi (pada masa ini) dibuang jika cincangan itu
berpecah.

STRLEN hv_fill(HV *const hv)

hv_iterinit
Menyediakan titik permulaan untuk melintasi jadual cincang. Mengembalikan bilangan kunci masuk
cincang (iaitu sama seperti "HvUSEDKEYS(hv)"). Nilai pulangan hanya pada masa ini
bermakna untuk cincang tanpa sihir ikatan.

NOTA: Sebelum versi 5.004_65, "hv_iterinit" digunakan untuk mengembalikan bilangan cincang
baldi yang kebetulan sedang digunakan. Jika anda masih memerlukan nilai esoterik itu, anda boleh
dapatkannya melalui makro "HvFILL(hv)".

I32 hv_iterinit(HV *hv)

hv_iterkey
Mengembalikan kunci dari kedudukan semasa lelaran cincang. Lihat
"hv_iterinit".

char* hv_iterkey(Entri HE*, I32* retlen)

hv_iterkeysv
Mengembalikan kekunci sebagai "SV*" daripada kedudukan semasa lelaran cincang. The
nilai pulangan akan sentiasa menjadi salinan mati kunci. Lihat juga "hv_iterinit".

SV* hv_iterkeysv(Entri HE*)

hv_iternext
Mengembalikan entri daripada lelaran cincang. Lihat "hv_iterinit".

Anda boleh memanggil "hv_delete" atau "hv_delete_ent" pada entri cincang yang iterator
pada masa ini menunjuk kepada, tanpa kehilangan tempat anda atau membatalkan lelaran anda.
Ambil perhatian bahawa dalam kes ini entri semasa dipadamkan daripada cincang dengan anda
iterator memegang rujukan terakhir kepadanya. Iterator anda dibenderakan untuk membebaskan
entri pada panggilan seterusnya ke "hv_iternext", jadi anda tidak boleh membuang iterator anda
serta-merta jika tidak entri akan bocor - panggil "hv_iternext" untuk mencetuskan sumber
deallocation.

HE* hv_iternext(HV *hv)

hv_iternextsv
Melakukan "hv_iternext", "hv_iterkey", dan "hv_iterval" dalam satu operasi.

SV* hv_iternextsv(HV *hv, char **key, I32 *relen)

hv_iternext_flags
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Mengembalikan entri daripada lelaran cincang. Lihat "hv_iterinit" dan "hv_iternext". The
nilai "bendera" biasanya akan menjadi sifar; jika HV_ITERNEXT_WANTPLACEHOLDERS ditetapkan
kunci pemegang tempat (untuk cincang terhad) akan dikembalikan sebagai tambahan kepada biasa
kunci. Secara lalai, pemegang tempat dilangkau secara automatik. Pada masa ini a
pemegang tempat dilaksanakan dengan nilai iaitu &PL_sv_placeholder. Perhatikan bahawa
pelaksanaan pemegang tempat dan cincang terhad mungkin berubah, dan
pelaksanaan pada masa ini tidak cukup diabstrakkan untuk sebarang perubahan menjadi kemas.

HE* hv_iternext_flags(HV *hv, bendera I32)

hv_iterval
Mengembalikan nilai dari kedudukan semasa lelaran cincang. Lihat
"hv_iterkey".

SV* hv_iterval(HV *hv, HE *masuk)

hv_magic
Menambah keajaiban pada cincang. Lihat "sv_magic".

batal hv_magic(HV *hv, GV *gv, int how)

hv_scalar
Menilai cincang dalam konteks skalar dan mengembalikan hasilnya. Mengendalikan sihir apabila
cincang terikat.

SV* hv_scalar(HV *hv)

hv_store
Menyimpan SV dalam cincang. Kunci cincang ditentukan sebagai "kunci" dan nilai mutlak
daripada "klen" ialah panjang kunci. Jika "klen" adalah negatif kuncinya diandaikan
berada dalam Unicode berkod UTF-8. Parameter "cincang" ialah nilai cincang yang diprakira;
jika ia adalah sifar maka Perl akan mengiranya.

Nilai pulangan akan menjadi NULL jika operasi gagal atau jika nilai tidak diperlukan
untuk sebenarnya disimpan dalam cincang (seperti dalam kes cincang terikat). Jika tidak
ia boleh dibatalkan rujukan untuk mendapatkan "SV*" asal. Perhatikan bahawa pemanggil adalah
bertanggungjawab untuk menambah bilangan rujukan "val" dengan sewajarnya sebelum
panggil, dan mengurangkannya jika fungsi mengembalikan NULL. Berkesan berjaya
hv_store mengambil pemilikan satu rujukan kepada "val". Ini biasanya yang anda
mahu; SV yang baru dibuat mempunyai kiraan rujukan satu, jadi jika semua kod anda adalah
buat SV kemudian simpannya dalam cincang, hv_store akan memiliki satu-satunya rujukan kepada
SV baharu, dan kod anda tidak perlu melakukan apa-apa lagi untuk mengemaskannya. hv_store ialah
tidak dilaksanakan sebagai panggilan ke hv_store_ent, dan tidak mencipta SV sementara untuk
kunci, jadi jika data kunci anda belum dalam bentuk SV maka gunakan hv_store in
keutamaan kepada hv_store_ent.

Lihat "Memahami Keajaiban Hash dan Tatasusunan Terikat" dalam perlguts untuk maklumat lanjut
maklumat tentang cara menggunakan fungsi ini pada cincang terikat.

SV** hv_store(HV *hv, const char *key, I32 klen,
SV *val, cincang U32)

hv_stores
Seperti "hv_store", tetapi mengambil rentetan literal dan bukannya pasangan rentetan/panjang dan
meninggalkan parameter cincang.

SV** hv_stores(HV* tb, const char* kunci,
NULLOK SV* val)

hv_store_ent
Menyimpan "val" dalam cincang. Kunci cincang ditentukan sebagai "kunci". Parameter "hash".
ialah nilai cincang prakiraan; jika ia adalah sifar maka Perl akan mengiranya. The
nilai pulangan ialah entri cincang baharu yang dibuat. Ia akan menjadi NULL jika operasi
gagal atau jika nilai tidak perlu disimpan dalam cincang (seperti dalam
kes cincang terikat). Jika tidak kandungan nilai pulangan boleh
diakses menggunakan "Dia?" makro yang diterangkan di sini. Perhatikan bahawa pemanggil adalah
bertanggungjawab untuk menambah bilangan rujukan "val" dengan sewajarnya sebelum
panggil, dan mengurangkannya jika fungsi mengembalikan NULL. Berkesan berjaya
hv_store_ent mengambil pemilikan satu rujukan kepada "val". Ini biasanya yang anda
mahu; SV yang baru dibuat mempunyai kiraan rujukan satu, jadi jika semua kod anda adalah
buat SV kemudian simpannya dalam cincang, hv_store akan memiliki satu-satunya rujukan kepada
SV baharu, dan kod anda tidak perlu melakukan apa-apa lagi untuk mengemaskannya. Perhatikan bahawa
hv_store_ent hanya membaca "kunci"; tidak seperti "val" ia tidak mengambil hak miliknya,
jadi mengekalkan kiraan rujukan yang betul pada "kunci" adalah milik pemanggil sepenuhnya
tanggungjawab. hv_store tidak dilaksanakan sebagai panggilan ke hv_store_ent, dan tidak
tidak membuat SV sementara untuk kunci, jadi jika data kunci anda belum ada dalam SV
borang kemudian gunakan hv_store sebagai keutamaan kepada hv_store_ent.

Lihat "Memahami Keajaiban Hash dan Tatasusunan Terikat" dalam perlguts untuk maklumat lanjut
maklumat tentang cara menggunakan fungsi ini pada cincang terikat.

HE* hv_store_ent(HV *hv, SV *key, SV *val, cincang U32)

hv_undef
Menyahtakrifkan cincangan. XS yang setara dengan "undef(%hash)".

Serta membebaskan semua elemen hash (seperti hv_clear()), ini juga membebaskan
sebarang data tambahan dan storan yang dikaitkan dengan cincang.

Lihat "av_clear" untuk nota tentang cincangan yang mungkin tidak sah apabila dikembalikan.

batal hv_undef(HV *hv)

newHV Mencipta HV baharu. Kiraan rujukan ditetapkan kepada 1.

HV* newHV()

Hook manipulasi


Fungsi ini menyediakan cara yang mudah dan selamat untuk memanipulasi pembolehubah cangkuk.

wrap_op_checker
Meletakkan fungsi C ke dalam rantaian fungsi semakan untuk jenis op tertentu. ini
ialah cara pilihan untuk memanipulasi tatasusunan "PL_check". Opcode menentukan yang mana
jenis op akan terjejas. new_checker ialah penunjuk kepada fungsi C iaitu
untuk ditambahkan pada rantai semakan opcode itu, dan old_checker_p menunjuk ke tempat penyimpanan
lokasi di mana penunjuk ke fungsi seterusnya dalam rantai akan disimpan. The
nilai penunjuk_baru ditulis ke dalam tatasusunan "PL_check", manakala nilai
disimpan sebelum ini ada ditulis kepada *pemeriksa_lama.

Fungsi harus ditakrifkan seperti ini:

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

Ia bertujuan untuk dipanggil dengan cara ini:

new_checker(aTHX_ op)

old_checker_p harus ditakrifkan seperti ini:

statik Perl_check_t old_checker_p;

"PL_check" adalah global kepada keseluruhan proses dan modul yang ingin menyambung operasi
pemeriksaan mungkin mendapati dirinya digunakan lebih daripada sekali setiap proses, biasanya dalam
benang yang berbeza. Untuk mengendalikan keadaan itu, fungsi ini adalah idempoten. The
lokasi *pemeriksa_lama mesti pada mulanya (sekali setiap proses) mengandungi penunjuk nol.
Pembolehubah AC tempoh statik (diisytiharkan pada skop fail, biasanya juga ditandakan
"statik" untuk memberikannya kaitan dalaman) akan dimulakan secara tersirat
sewajarnya, jika ia tidak mempunyai pemula yang jelas. Fungsi ini akan
hanya mengubah suai rantai semak jika didapati *pemeriksa_lama menjadi batal. ini
fungsinya juga selamat benang pada skala kecil. Ia menggunakan penguncian yang sesuai untuk
elakkan keadaan perlumbaan dalam mengakses "PL_check".

Apabila fungsi ini dipanggil, fungsi yang dirujuk oleh new_checker mesti bersedia
untuk dipanggil, kecuali untuk *pemeriksa_lama tidak terisi. Dalam situasi benang,
new_checker boleh dipanggil serta-merta, walaupun sebelum fungsi ini kembali.
*pemeriksa_lama akan sentiasa ditetapkan dengan sewajarnya sebelum ini new_checker dipanggil. Sekiranya
new_checker memutuskan untuk tidak melakukan sesuatu yang istimewa dengan op yang diberikan (yang
adalah kes biasa untuk kebanyakan penggunaan op check hooking), ia mesti merantai cek
fungsi yang dirujuk oleh *pemeriksa_lama.

Jika anda ingin mempengaruhi kompilasi panggilan ke subrutin tertentu, kemudian gunakan
"cv_set_call_checker" dan bukannya menyambung semakan semua ops "entersub".

void wrap_op_checker(Optype opcode,
Perl_check_t new_checker,
Perl_check_t *old_checker_p)

Lexer antara muka


Ini ialah lapisan bawah penghurai Perl, mengurus aksara dan token.

lex_bufutf8
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menunjukkan sama ada oktet dalam penimbal lexer ("PL_parser->linestr") sepatutnya
ditafsirkan sebagai pengekodan UTF-8 aksara Unicode. Jika tidak, mereka sepatutnya
ditafsirkan sebagai aksara Latin-1. Ini serupa dengan bendera "SvUTF8" untuk
skalar.

Dalam mod UTF-8, ia tidak dijamin bahawa penimbal lexer sebenarnya mengandungi sah
UTF-8. Kod Lexing mestilah kukuh dalam menghadapi pengekodan yang tidak sah.

Bendera "SvUTF8" sebenar skalar "PL_parser->linestr" adalah penting, tetapi
bukan keseluruhan cerita mengenai pengekodan aksara input. Biasanya, apabila fail
sedang dibaca, skalar mengandungi oktet dan bendera "SvUTF8"nya dimatikan, tetapi
oktet harus ditafsirkan sebagai UTF-8 jika pragma "use utf8" berkuat kuasa.
Walau bagaimanapun, semasa eval rentetan, skalar mungkin mempunyai bendera "SvUTF8" dihidupkan dan dalam
kes ini oktetnya harus ditafsirkan sebagai UTF-8 melainkan pragma "guna bait".
sedang berkuat kuasa. Logik ini mungkin berubah pada masa hadapan; gunakan fungsi ini dan bukannya
melaksanakan logik itu sendiri.

bool lex_bufutf8()

lex_discard_to
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Membuang bahagian pertama penimbal "PL_parser->linestr", sehingga ptr. Yang
baki kandungan penimbal akan dialihkan, dan semua penunjuk ke dalam penimbal
dikemas kini dengan sewajarnya. ptr mestilah tidak lewat dalam penimbal daripada kedudukan
"PL_parser->bufptr": tidak dibenarkan membuang teks yang masih belum dilex.

Biasanya ia tidak semestinya melakukan ini secara langsung, kerana ia sudah memadai untuk menggunakan
tingkah laku membuang tersirat "lex_next_chunk" dan perkara berdasarkannya.
Walau bagaimanapun, jika token merentangi berbilang baris, dan kod lexing telah disimpan
berbilang baris teks dalam penimbal untuk tujuan itu, kemudian selepas selesai
tanda itu adalah bijak untuk membuang secara eksplisit baris awal yang kini tidak diperlukan,
untuk mengelakkan token berbilang talian masa hadapan mengembangkan penimbal tanpa terikat.

batalkan lex_discard_to(char *ptr)

lex_grow_linestr
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Memperuntukkan semula penimbal lexer ("PL_parser->linestr") untuk menampung sekurang-kurangnya len
oktet (termasuk menamatkan "NUL"). Mengembalikan penuding kepada yang diperuntukkan semula
penampan. Ini adalah perlu sebelum membuat sebarang pengubahsuaian langsung penimbal
yang akan menambah panjangnya. "lex_stuff_pvn" menyediakan cara yang lebih mudah untuk
masukkan teks ke dalam penimbal.

Jangan gunakan "SvGROW" atau "sv_grow" terus pada "PL_parser->linestr"; fungsi ini
mengemas kini semua pembolehubah lexer yang menghala terus ke dalam penimbal.

char * lex_grow_linestr(STRLEN len)

lex_next_chunk
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Dibaca dalam ketulan teks seterusnya yang akan dilex, menambahkannya pada "PL_parser->linestr".
Ini harus dipanggil apabila kod lexing telah melihat ke penghujung bahagian semasa
dan ingin mengetahui lebih lanjut. Ia adalah perkara biasa, tetapi tidak perlu, untuk lexing mempunyai
menggunakan keseluruhan bahagian semasa pada masa ini.

Jika "PL_parser->bufptr" menunjuk ke hujung bahagian semasa (iaitu,
bahagian semasa telah digunakan sepenuhnya), biasanya bahagian semasa akan digunakan
dibuang pada masa yang sama bahagian baru dibaca masuk. Jika bendera termasuk
"LEX_KEEP_PREVIOUS", bahagian semasa tidak akan dibuang. Jika arus
ketulan belum dimakan sepenuhnya, maka ia tidak akan dibuang tanpa mengira
bendera.

Mengembalikan benar jika beberapa teks baharu telah ditambahkan pada penimbal, atau palsu jika penimbal mempunyai
mencapai penghujung teks input.

bool lex_next_chunk(bendera U32)

lex_peek_unichar
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Memandang ke hadapan satu aksara (Unicode) dalam teks yang sedang digunakan. Pulangan
titik kod (nilai integer tidak ditandatangani) bagi aksara seterusnya, atau -1 jika lexing mempunyai
mencapai penghujung teks input. Untuk menggunakan watak yang diintip, gunakan
"lex_read_unichar".

Jika aksara seterusnya berada dalam (atau meluas ke dalam) bahagian teks input seterusnya, bahagian
bongkah seterusnya akan dibaca masuk. Biasanya bongkah semasa akan dibuang di
masa yang sama, tetapi jika bendera termasuk "LEX_KEEP_PREVIOUS" maka bahagian semasa akan
tidak dibuang.

Jika input ditafsirkan sebagai UTF-8 dan ralat pengekodan UTF-8 ialah
dihadapi, pengecualian dijana.

I32 lex_peek_unichar(bendera U32)

lex_read_space
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Membaca ruang pilihan, dalam gaya Perl, dalam teks yang sedang digunakan. The
ruang mungkin termasuk aksara ruang putih biasa dan ulasan gaya Perl.
Arahan "#line" diproses jika ditemui. "PL_parser->bufptr" dialihkan
melepasi ruang, supaya ia menunjuk pada aksara bukan ruang (atau penghujung
teks input).

Jika ruang memanjang ke bahagian teks input seterusnya, bahagian seterusnya akan dibaca
masuk. Biasanya bongkah semasa akan dibuang pada masa yang sama, tetapi jika bendera
termasuk "LEX_KEEP_PREVIOUS" maka bahagian semasa tidak akan dibuang.

batalkan lex_read_space(bendera U32)

lex_read_to
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Gunakan teks dalam penimbal lexer, daripada "PL_parser->bufptr" sehingga ptr. ini
memajukan "PL_parser->bufptr" untuk dipadankan ptr, melaksanakan simpan kira yang betul
setiap kali watak baris baharu dilalui. Ini adalah cara biasa untuk mengambil lexed
teks.

Tafsiran oktet penimbal boleh disarikan dengan menggunakan sedikit
fungsi peringkat lebih tinggi "lex_peek_unichar" dan "lex_read_unichar".

batal lex_read_to(char *ptr)

lex_read_unichar
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Membaca aksara (Unicode) seterusnya dalam teks yang sedang dileksi. Mengembalikan
titik kod (nilai integer tidak bertanda) bagi aksara yang dibaca dan bergerak
"PL_parser->bufptr" melepasi aksara, atau mengembalikan -1 jika lexing telah mencapai
akhir teks input. Untuk memeriksa watak seterusnya secara tidak merosakkan, gunakan
"lex_peek_unichar" sebaliknya.

Jika aksara seterusnya berada dalam (atau meluas ke dalam) bahagian teks input seterusnya, bahagian
bongkah seterusnya akan dibaca masuk. Biasanya bongkah semasa akan dibuang di
masa yang sama, tetapi jika bendera termasuk "LEX_KEEP_PREVIOUS" maka bahagian semasa akan
tidak dibuang.

Jika input ditafsirkan sebagai UTF-8 dan ralat pengekodan UTF-8 ialah
dihadapi, pengecualian dijana.

I32 lex_read_unichar(bendera U32)

lex_start
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Mencipta dan memulakan objek keadaan lexer/parser baharu, membekalkan konteks dalam
yang hendak dilex dan dihuraikan daripada sumber kod Perl baharu. Penunjuk kepada keadaan baharu
objek diletakkan dalam "PL_parser". Entri dibuat pada timbunan simpan supaya pada
membuka lilitan objek keadaan baharu akan dimusnahkan dan nilai bekas bagi
"PL_parser" akan dipulihkan. Tiada apa-apa lagi yang perlu dilakukan untuk membersihkan penghuraian
konteks.

Kod yang hendak dihuraikan berasal dari selaras and rsfp. selaras, jika bukan nol, menyediakan a
rentetan (dalam bentuk SV) yang mengandungi kod untuk dihuraikan. Satu salinan rentetan dibuat,
jadi pengubahsuaian seterusnya daripada selaras tidak menjejaskan penghuraian. rsfp, jika bukan batal,
menyediakan aliran input dari mana kod akan dibaca untuk dihuraikan. Jika kedua-duanya
bukan nol, kod masuk selaras didahulukan dan mesti terdiri daripada barisan lengkap
input, dan rsfp membekalkan baki sumber.

. bendera parameter dikhaskan untuk kegunaan masa hadapan. Pada masa ini ia hanya digunakan oleh perl
secara dalaman, jadi sambungan hendaklah sentiasa melepasi sifar.

batal lex_start(SV *line, PerlIO *rsfp, bendera U32)

lex_stuff_pv
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Masukkan aksara ke dalam penimbal lexer ("PL_parser->linestr"), serta-merta selepas itu
titik lexing semasa ("PL_parser->bufptr"), memperuntukkan semula penimbal jika
perlu. Ini bermakna kod lexing yang dijalankan kemudian akan melihat aksara sebagai
jika ia telah muncul dalam input. Ia tidak disyorkan untuk melakukan ini sebagai sebahagian daripada
penghuraian biasa, dan kebanyakan penggunaan kemudahan ini menghadapi risiko yang dimasukkan
watak yang ditafsirkan dengan cara yang tidak disengajakan.

Rentetan yang akan disisipkan diwakili oleh oktet bermula pada pv dan berterusan
kepada nul pertama. Oktet ini ditafsirkan sebagai UTF-8 atau Latin-1,
mengikut sama ada bendera "LEX_STUFF_UTF8" ditetapkan bendera. watak-watak
dikodkan semula untuk penimbal lexer, mengikut keadaan penimbal pada masa ini
ditafsirkan ("lex_bufutf8"). Jika tidak mudah untuk membatalkan rentetan ke
jika dimasukkan, fungsi "lex_stuff_pvn" adalah lebih sesuai.

batalkan lex_stuff_pv(const char *pv, bendera U32)

lex_stuff_pvn
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Masukkan aksara ke dalam penimbal lexer ("PL_parser->linestr"), serta-merta selepas itu
titik lexing semasa ("PL_parser->bufptr"), memperuntukkan semula penimbal jika
perlu. Ini bermakna kod lexing yang dijalankan kemudian akan melihat aksara sebagai
jika ia telah muncul dalam input. Ia tidak disyorkan untuk melakukan ini sebagai sebahagian daripada
penghuraian biasa, dan kebanyakan penggunaan kemudahan ini menghadapi risiko yang dimasukkan
watak yang ditafsirkan dengan cara yang tidak disengajakan.

Rentetan yang hendak disisipkan diwakili oleh len oktet bermula pada pv. Ini
oktet ditafsirkan sebagai UTF-8 atau Latin-1, mengikut sama ada
Bendera "LEX_STUFF_UTF8" telah ditetapkan bendera. Watak-watak dikod semula untuk lexer
penimbal, mengikut cara penimbal sedang ditafsirkan
("lex_bufutf8"). Jika rentetan yang akan dimasukkan tersedia sebagai skalar Perl, nilai
Fungsi "lex_stuff_sv" adalah lebih mudah.

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

lex_stuff_pvs
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Seperti "lex_stuff_pvn", tetapi mengambil rentetan literal dan bukannya pasangan rentetan/panjang.

batalkan lex_stuff_pvs(const char *pv, bendera U32)

lex_stuff_sv
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Masukkan aksara ke dalam penimbal lexer ("PL_parser->linestr"), serta-merta selepas itu
titik lexing semasa ("PL_parser->bufptr"), memperuntukkan semula penimbal jika
perlu. Ini bermakna kod lexing yang dijalankan kemudian akan melihat aksara sebagai
jika ia telah muncul dalam input. Ia tidak disyorkan untuk melakukan ini sebagai sebahagian daripada
penghuraian biasa, dan kebanyakan penggunaan kemudahan ini menghadapi risiko yang dimasukkan
watak yang ditafsirkan dengan cara yang tidak disengajakan.

Rentetan yang hendak disisipkan ialah nilai rentetan bagi sv. Aksara dikod semula
untuk penimbal lexer, mengikut cara penimbal sedang ditafsirkan
("lex_bufutf8"). Jika rentetan yang hendak disisipkan belum menjadi skalar Perl, maka
Fungsi "lex_stuff_pvn" mengelakkan keperluan untuk membina skalar.

batal lex_stuff_sv(SV *sv, bendera U32)

lex_unstuff
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Membuang teks yang akan dilex, daripada "PL_parser->bufptr" sehingga ptr. Teks
berikutan ptr akan dialihkan, dan penimbal dipendekkan. Ini menyembunyikan yang dibuang
teks daripada mana-mana kod lexing yang dijalankan kemudian, seolah-olah teks itu tidak pernah muncul.

Ini bukan cara biasa untuk menggunakan teks lexed. Untuk itu, gunakan "lex_read_to".

batal lex_unstuff(char *ptr)

parse_arithexpr
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menghuraikan ungkapan aritmetik Perl. Ini mungkin mengandungi pengendali keutamaan ke bawah
kepada operator anjakan bit. Ungkapan mesti diikuti (dan dengan itu ditamatkan)
sama ada dengan perbandingan atau pengendali keutamaan yang lebih rendah atau oleh sesuatu yang akan
biasanya menamatkan ungkapan seperti titik bertitik. Jika bendera termasuk
"PARSE_OPTIONAL" maka ungkapan adalah pilihan, jika tidak, ia adalah wajib. Ia
terpulang kepada pemanggil untuk memastikan bahawa keadaan penghurai dinamik ("PL_parser" et al) adalah
ditetapkan dengan betul untuk mencerminkan sumber kod yang akan dihuraikan dan leksikal
konteks untuk ungkapan itu.

Pokok op yang mewakili ungkapan dikembalikan. Jika ungkapan pilihan ialah
tidak hadir, penunjuk nol dikembalikan, jika tidak, penunjuk akan menjadi bukan nol.

Jika ralat berlaku dalam penghuraian atau penyusunan, dalam kebanyakan kes pokok op yang sah adalah
dipulangkan pula. Ralat ditunjukkan dalam keadaan parser, biasanya terhasil
dalam satu pengecualian di peringkat atas penghuraian yang merangkumi semua kompilasi
kesilapan yang berlaku. Beberapa ralat kompilasi, bagaimanapun, akan membuang pengecualian
serta-merta.

OP * parse_arithexpr(bendera U32)

parse_barestmt
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menghuraikan satu pernyataan Perl tanpa hiasan. Ini mungkin perintah biasa
pernyataan atau pengisytiharan yang mempunyai kesan masa kompilasi. Ia tidak termasuk apa-apa
label atau imbuhan lain. Ia terpulang kepada pemanggil untuk memastikan bahawa dinamik
keadaan parser ("PL_parser" et al) ditetapkan dengan betul untuk mencerminkan sumber
kod yang hendak dihuraikan dan konteks leksikal bagi pernyataan tersebut.

Pokok op yang mewakili pernyataan dikembalikan. Ini mungkin penunjuk nol jika
pernyataan itu batal, contohnya jika ia sebenarnya takrifan subrutin
(yang mempunyai kesan sampingan masa kompilasi). Jika tidak batal, ia akan menjadi ops secara langsung
melaksanakan pernyataan, sesuai untuk dihantar ke "newSTATEOP". Ia tidak akan
biasanya termasuk op "nextstate" atau yang setara (kecuali untuk yang tertanam dalam a
skop terkandung sepenuhnya dalam pernyataan).

Jika ralat berlaku dalam penghuraian atau penyusunan, dalam kebanyakan kes pokok op yang sah (kebanyakan
kemungkinan null) dikembalikan pula. Ralat ditunjukkan dalam keadaan parser,
biasanya menghasilkan satu pengecualian di peringkat atas penghuraian yang meliputi
semua ralat kompilasi yang berlaku. Beberapa ralat kompilasi, bagaimanapun, akan
membuang pengecualian serta-merta.

. bendera parameter dikhaskan untuk kegunaan masa hadapan, dan mesti sentiasa sifar.

OP * parse_barestmt(bendera U32)

parse_block
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menghuraikan satu blok kod Perl lengkap. Ini terdiri daripada pendakap bukaan, a
urutan pernyataan, dan pendakap penutup. Blok itu membentuk leksikal
skop, jadi pembolehubah "saya" dan pelbagai kesan masa kompilasi boleh terkandung di dalamnya
ia. Terpulang kepada pemanggil untuk memastikan bahawa keadaan penghurai dinamik ("PL_parser"
et al) ditetapkan dengan betul untuk mencerminkan sumber kod yang akan dihuraikan dan
konteks leksikal bagi pernyataan tersebut.

Pokok op yang mewakili blok kod dikembalikan. Ini sentiasa op sebenar,
tidak pernah penunjuk nol. Ia biasanya akan menjadi senarai "lineseq", termasuk "nextstate"
atau ops yang setaraf. Tiada ops untuk membina apa-apa jenis skop masa jalan disertakan oleh
kebaikan ia menjadi satu blok.

Jika ralat berlaku dalam penghuraian atau penyusunan, dalam kebanyakan kes pokok op yang sah (kebanyakan
kemungkinan null) dikembalikan pula. Ralat ditunjukkan dalam keadaan parser,
biasanya menghasilkan satu pengecualian di peringkat atas penghuraian yang meliputi
semua ralat kompilasi yang berlaku. Beberapa ralat kompilasi, bagaimanapun, akan
membuang pengecualian serta-merta.

. bendera parameter dikhaskan untuk kegunaan masa hadapan, dan mesti sentiasa sifar.

OP * parse_block(bendera U32)

parse_fullexpr
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menghuraikan satu ungkapan Perl lengkap. Ini membolehkan tatabahasa ungkapan penuh,
termasuk pengendali keutamaan terendah seperti "atau". Ungkapan mestilah
diikuti (dan dengan itu ditamatkan) dengan tanda bahawa ungkapan itu biasanya
ditamatkan oleh: akhir fail, tanda baca kurungan penutup, koma bernoktah, atau salah satu daripada
kata kunci yang menandakan pengubah suai pernyataan ungkapan postfix. Jika bendera
termasuk "PARSE_OPTIONAL" maka ungkapan adalah pilihan, jika tidak
wajib. Terpulang kepada pemanggil untuk memastikan keadaan penghurai dinamik
("PL_parser" et al) ditetapkan dengan betul untuk menggambarkan sumber kod itu
dihuraikan dan konteks leksikal bagi ungkapan tersebut.

Pokok op yang mewakili ungkapan dikembalikan. Jika ungkapan pilihan ialah
tidak hadir, penunjuk nol dikembalikan, jika tidak, penunjuk akan menjadi bukan nol.

Jika ralat berlaku dalam penghuraian atau penyusunan, dalam kebanyakan kes pokok op yang sah adalah
dipulangkan pula. Ralat ditunjukkan dalam keadaan parser, biasanya terhasil
dalam satu pengecualian di peringkat atas penghuraian yang merangkumi semua kompilasi
kesilapan yang berlaku. Beberapa ralat kompilasi, bagaimanapun, akan membuang pengecualian
serta-merta.

OP * parse_fullexpr(bendera U32)

parse_fullstmt
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menghuraikan satu pernyataan Perl lengkap. Ini mungkin pernyataan imperatif biasa
atau pengisytiharan yang mempunyai kesan masa kompilasi, dan mungkin termasuk label pilihan.
Terpulang kepada pemanggil untuk memastikan bahawa keadaan penghurai dinamik ("PL_parser" et al)
ditetapkan dengan betul untuk mencerminkan sumber kod yang akan dihuraikan dan leksikal
konteks bagi pernyataan tersebut.

Pokok op yang mewakili pernyataan dikembalikan. Ini mungkin penunjuk nol jika
pernyataan itu batal, contohnya jika ia sebenarnya takrifan subrutin
(yang mempunyai kesan sampingan masa kompilasi). Jika tidak batal, ia akan menjadi hasil daripada a
Panggilan "newSTATEOP", biasanya termasuk op "nextstate" atau yang setara.

Jika ralat berlaku dalam penghuraian atau penyusunan, dalam kebanyakan kes pokok op yang sah (kebanyakan
kemungkinan null) dikembalikan pula. Ralat ditunjukkan dalam keadaan parser,
biasanya menghasilkan satu pengecualian di peringkat atas penghuraian yang meliputi
semua ralat kompilasi yang berlaku. Beberapa ralat kompilasi, bagaimanapun, akan
membuang pengecualian serta-merta.

. bendera parameter dikhaskan untuk kegunaan masa hadapan, dan mesti sentiasa sifar.

OP * parse_fullstmt(bendera U32)

parse_label
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menghuraikan satu label, mungkin pilihan, daripada jenis yang mungkin mengawalan Perl
kenyataan. Terpulang kepada pemanggil untuk memastikan keadaan penghurai dinamik
("PL_parser" et al) ditetapkan dengan betul untuk menggambarkan sumber kod itu
dihuraikan. Jika bendera termasuk "PARSE_OPTIONAL" maka label adalah pilihan, jika tidak
ia adalah wajib.

Nama label dikembalikan dalam bentuk skalar baru. Jika pilihan
label tiada, penunjuk nol dikembalikan.

Jika ralat berlaku dalam penghuraian, yang hanya boleh berlaku jika label adalah wajib, a
label yang sah dikembalikan juga. Ralat ditunjukkan dalam keadaan parser,
biasanya menghasilkan satu pengecualian di peringkat atas penghuraian yang meliputi
semua ralat kompilasi yang berlaku.

SV * parse_label(bendera U32)

parse_listexpr
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menghuraikan ungkapan senarai Perl. Ini mungkin mengandungi pengendali keutamaan hingga ke
pengendali koma. Ungkapan mesti diikuti (dan dengan itu ditamatkan) sama ada
oleh pengendali logik keutamaan rendah seperti "atau" atau oleh sesuatu yang akan
biasanya menamatkan ungkapan seperti titik bertitik. Jika bendera termasuk
"PARSE_OPTIONAL" maka ungkapan adalah pilihan, jika tidak, ia adalah wajib. Ia
terpulang kepada pemanggil untuk memastikan bahawa keadaan penghurai dinamik ("PL_parser" et al) adalah
ditetapkan dengan betul untuk mencerminkan sumber kod yang akan dihuraikan dan leksikal
konteks untuk ungkapan itu.

Pokok op yang mewakili ungkapan dikembalikan. Jika ungkapan pilihan ialah
tidak hadir, penunjuk nol dikembalikan, jika tidak, penunjuk akan menjadi bukan nol.

Jika ralat berlaku dalam penghuraian atau penyusunan, dalam kebanyakan kes pokok op yang sah adalah
dipulangkan pula. Ralat ditunjukkan dalam keadaan parser, biasanya terhasil
dalam satu pengecualian di peringkat atas penghuraian yang merangkumi semua kompilasi
kesilapan yang berlaku. Beberapa ralat kompilasi, bagaimanapun, akan membuang pengecualian
serta-merta.

OP * parse_listexpr(bendera U32)

parse_stmtseq
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menghuraikan urutan sifar atau lebih pernyataan Perl. Ini mungkin imperatif biasa
pernyataan, termasuk label pilihan, atau pengisytiharan yang mempunyai masa penyusunan
kesan, atau apa-apa campurannya. Urutan penyataan berakhir apabila pendakap penutup
atau akhir fail ditemui di tempat di mana pernyataan baharu mungkin mempunyai sah
bermula. Terpulang kepada pemanggil untuk memastikan keadaan penghurai dinamik
("PL_parser" et al) ditetapkan dengan betul untuk menggambarkan sumber kod itu
dihuraikan dan konteks leksikal bagi pernyataan tersebut.

Pokok op yang mewakili urutan pernyataan dikembalikan. Ini mungkin batal
penunjuk jika pernyataan semuanya batal, contohnya jika tiada pernyataan
atau jika terdapat hanya definisi subrutin (yang mempunyai sisi masa kompilasi
kesan). Jika tidak batal, ia akan menjadi senarai "lineseq", biasanya termasuk
"nextstate" atau ops yang setara.

Jika ralat berlaku dalam penghuraian atau penyusunan, dalam kebanyakan kes pokok op yang sah adalah
dipulangkan pula. Ralat ditunjukkan dalam keadaan parser, biasanya terhasil
dalam satu pengecualian di peringkat atas penghuraian yang merangkumi semua kompilasi
kesilapan yang berlaku. Beberapa ralat kompilasi, bagaimanapun, akan membuang pengecualian
serta-merta.

. bendera parameter dikhaskan untuk kegunaan masa hadapan, dan mesti sentiasa sifar.

OP * parse_stmtseq(bendera U32)

parse_termexpr
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menghuraikan ungkapan istilah Perl. Ini mungkin mengandungi pengendali keutamaan hingga ke
pengendali tugasan. Ungkapan mesti diikuti (dan dengan itu ditamatkan)
sama ada dengan koma atau pengendali keutamaan rendah atau dengan sesuatu yang biasanya
menamatkan ungkapan seperti titik bertitik. Jika bendera termasuk "PARSE_OPTIONAL"
maka ungkapan itu adalah pilihan, jika tidak, ia adalah wajib. Terpulang kepada
pemanggil untuk memastikan keadaan penghurai dinamik ("PL_parser" et al) adalah betul
ditetapkan untuk mencerminkan sumber kod yang akan dihuraikan dan konteks leksikal untuk
ungkapan.

Pokok op yang mewakili ungkapan dikembalikan. Jika ungkapan pilihan ialah
tidak hadir, penunjuk nol dikembalikan, jika tidak, penunjuk akan menjadi bukan nol.

Jika ralat berlaku dalam penghuraian atau penyusunan, dalam kebanyakan kes pokok op yang sah adalah
dipulangkan pula. Ralat ditunjukkan dalam keadaan parser, biasanya terhasil
dalam satu pengecualian di peringkat atas penghuraian yang merangkumi semua kompilasi
kesilapan yang berlaku. Beberapa ralat kompilasi, bagaimanapun, akan membuang pengecualian
serta-merta.

OP * parse_termexpr(bendera U32)

PL_parser
Tuding kepada struktur yang merangkum keadaan operasi penghuraian pada masa ini
sedang berjalan. Penunjuk boleh ditukar secara setempat untuk melaksanakan parse bersarang tanpa
mengganggu keadaan parse luar. Ahli individu "PL_parser"
mempunyai dokumentasi sendiri.

PL_parser->bufend
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Penunjuk terus ke penghujung ketulan teks yang sedang dilex, penghujung
penampan lexer. Ini sama dengan "SvPVX(PL_parser->linestr) +
SvCUR(PL_parser->linestr)". Aksara "NUL" (sifar oktet) sentiasa terletak di
penghujung penimbal, dan tidak dikira sebagai sebahagian daripada kandungan penimbal.

PL_parser->bufptr
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menunjuk kepada kedudukan semasa lexing di dalam penimbal lexer. Watak
sekitar titik ini boleh diperiksa secara bebas, dalam julat yang dihadkan oleh
"SvPVX("PL_parser->linestr")" dan "PL_parser->bufend". Oktet penimbal
mungkin bertujuan untuk ditafsirkan sebagai sama ada UTF-8 atau Latin-1, seperti yang ditunjukkan oleh
"lex_bufutf8".

Kod Lexing (sama ada dalam teras Perl atau tidak) menggerakkan penunjuk ini melepasi
watak yang digunakannya. Ia juga dijangka melakukan beberapa simpan kira
setiap kali watak baris baharu digunakan. Pergerakan ini boleh menjadi lebih mudah
dilakukan oleh fungsi "lex_read_to", yang mengendalikan baris baharu dengan sewajarnya.

Tafsiran oktet penimbal boleh disarikan dengan menggunakan sedikit
fungsi peringkat lebih tinggi "lex_peek_unichar" dan "lex_read_unichar".

PL_parser->linestart
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menunjuk pada permulaan baris semasa di dalam penimbal lexer. Ini berguna
untuk menunjukkan pada lajur mana ralat berlaku, dan tidak banyak lagi. Ini mesti
dikemas kini oleh mana-mana kod lexing yang menggunakan baris baharu; fungsi "lex_read_to"
mengendalikan butiran ini.

PL_parser->linestr
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Skalar penimbal yang mengandungi bahagian yang sedang dalam pertimbangan teks
sedang dileksi. Ini sentiasa skalar rentetan biasa (yang mana "SvPOK" ialah
benar). Ia tidak bertujuan untuk digunakan sebagai skalar dengan cara skalar biasa; sebaliknya
rujuk kepada penimbal secara langsung oleh pembolehubah penunjuk yang diterangkan di bawah.

Lexer mengekalkan pelbagai penunjuk "char*" kepada perkara dalam "PL_parser->linestr"
penampan. Jika "PL_parser->linestr" pernah diperuntukkan semula, semua penunjuk ini mesti
dikemas kini. Jangan cuba melakukan ini secara manual, tetapi gunakan "lex_grow_linestr"
jika anda perlu mengagihkan semula penimbal.

Kandungan ketulan teks dalam penimbal biasanya betul-betul satu baris lengkap
input, sehingga dan termasuk penamat baris baharu, tetapi terdapat situasi di mana
ia adalah sebaliknya. Oktet penimbal mungkin dimaksudkan untuk ditafsirkan sebagai
sama ada UTF-8 atau Latin-1. Fungsi "lex_bufutf8" memberitahu anda yang mana. Jangan guna
bendera "SvUTF8" pada skalar ini, yang mungkin tidak bersetuju dengannya.

Untuk pemeriksaan langsung penimbal, pembolehubah "PL_parser->bufend" menunjuk ke
hujung penampan. Kedudukan lexing semasa ditunjuk oleh
"PL_parser->bufptr". Penggunaan langsung penunjuk ini biasanya lebih disukai
pemeriksaan skalar melalui cara skalar biasa.

Berkaitan dengan setempat fungsi and makro


DECLARATION_FOR_LC_NUMERIC_MANIPULATION
Makro ini harus digunakan sebagai pernyataan. Ia mengisytiharkan pembolehubah persendirian (yang
nama bermula dengan garis bawah) yang diperlukan oleh makro lain dalam ini
bahagian. Gagal memasukkan ini dengan betul akan membawa kepada ralat sintaks. Untuk
keserasian dengan penyusun C89 C ia harus diletakkan di dalam blok sebelum sebarang
kenyataan boleh laksana.

batal DECLARATION_FOR_LC_NUMERIC_MANIPULATION

RESTORE_LC_NUMERIC
Ini digunakan bersama dengan salah satu makro
"STORE_LC_NUMERIC_SET_TO_NEEDED" dan "STORE_LC_NUMERIC_FORCE_TO_UNDERLYING"

untuk memulihkan keadaan "LC_NUMERIC" dengan betul.

Panggilan kepada "DECLARATION_FOR_LC_NUMERIC_MANIPULATION" mesti dibuat untuk mengisytiharkan
pada masa menyusun pembolehubah peribadi yang digunakan oleh makro ini dan dua "KEDAI".
Makro ini harus dipanggil sebagai pernyataan tunggal, bukan ungkapan, tetapi dengan
senarai hujah kosong, seperti ini:

{
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
...
RESTORE_LC_NUMERIC();
...
}

batalkan RESTORE_LC_NUMERIC()

STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
Ini digunakan oleh kod XS yang "LC_NUMERIC" sedar setempat untuk memaksa setempat
untuk kategori "LC_NUMERIC" menjadi apa yang difikirkan oleh perl sebagai tempat asas semasa.
(Penterjemah perl mungkin salah tentang tempat yang mendasari sebenarnya
jika beberapa kod C atau XS telah memanggil fungsi perpustakaan C setlocale(3) di belakangnya
belakang; memanggil "sync_locale" sebelum memanggil makro ini akan mengemas kini rekod perl.)

Panggilan kepada "DECLARATION_FOR_LC_NUMERIC_MANIPULATION" mesti dibuat untuk mengisytiharkan
pada masa menyusun pembolehubah peribadi yang digunakan oleh makro ini. Makro ini sepatutnya
dipanggil sebagai pernyataan tunggal, bukan ungkapan, tetapi dengan senarai hujah kosong,
seperti ini:

{
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
...
STORE_LC_NUMERIC_FORCE_TO_UNDERLYING();
...
RESTORE_LC_NUMERIC();
...
}

Pembolehubah persendirian digunakan untuk menyimpan keadaan tempat semasa, supaya
panggilan sepadan yang diperlukan kepada "RESTORE_LC_NUMERIC" boleh memulihkannya.

batal STORE_LC_NUMERIC_FORCE_TO_UNDERLYING()

STORE_LC_NUMERIC_SET_TO_NEEDED
Ini digunakan untuk membantu membungkus kod XS atau C yang "LC_NUMERIC" sedar setempat.
Kategori tempat ini biasanya disimpan ditetapkan kepada tempat C oleh Perl untuk ke belakang
keserasian, dan kerana kebanyakan kod XS yang membaca nilai titik terapung boleh mengatasinya
hanya dengan aksara radix perpuluhan sebagai titik.

Makro ini memastikan keadaan "LC_NUMERIC" semasa ditetapkan dengan betul, untuk diketahui
tempat jika panggilan ke kod XS atau C daripada program Perl adalah dari dalam
skop "tempat penggunaan"; atau mengabaikan tempat jika panggilan itu adalah dari luar
skop sedemikian.

Makro ini ialah permulaan membalut kod C atau XS; pengakhiran balut dilakukan oleh
memanggil makro "RESTORE_LC_NUMERIC" selepas operasi. Jika tidak negeri
boleh diubah yang akan menjejaskan kod XS yang lain.

Panggilan kepada "DECLARATION_FOR_LC_NUMERIC_MANIPULATION" mesti dibuat untuk mengisytiharkan
pada masa menyusun pembolehubah peribadi yang digunakan oleh makro ini. Makro ini sepatutnya
dipanggil sebagai pernyataan tunggal, bukan ungkapan, tetapi dengan senarai hujah kosong,
seperti ini:

{
DECLARATION_FOR_LC_NUMERIC_MANIPULATION;
...
STORE_LC_NUMERIC_SET_TO_NEEDED();
...
RESTORE_LC_NUMERIC();
...
}

batal STORE_LC_NUMERIC_SET_TO_NEEDED()

sync_locale
Menukar tempat program harus dielakkan oleh kod XS. Namun begitu, pasti
perpustakaan bukan Perl yang dipanggil daripada XS, seperti "Gtk" berbuat demikian. Apabila ini berlaku, Perl
perlu diberitahu bahawa tempat itu telah berubah. Gunakan fungsi ini untuk berbuat demikian, sebelum
kembali ke Perl.

void sync_locale()

Ajaib Fungsi


mg_clear
Kosongkan sesuatu yang ajaib yang diwakili oleh SV. Lihat "sv_magic".

int mg_clear(SV* sv)

mg_copy Menyalin keajaiban dari satu SV ke SV yang lain. Lihat "sv_magic".

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

mg_find Mencari penunjuk ajaib untuk jenis yang sepadan dengan SV. Lihat "sv_magic".

MAGIC* mg_find(const SV* sv, jenis int)

mg_findext
Cari penunjuk ajaib "jenis" dengan "vtbl" yang diberikan untuk "SV". Lihat
"sv_magicext".

MAGIC* mg_findext(const SV* sv, jenis int,
const MGVTBL *vtbl)

mg_free Percuma sebarang storan ajaib yang digunakan oleh SV. Lihat "sv_magic".

int mg_free(SV* sv)

mg_free_type
Keluarkan sebarang jenis sihir bagaimana daripada SV sv. Lihat "sv_magic".

batal mg_free_type(SV *sv, int how)

mg_get Lakukan sihir sebelum nilai diambil daripada SV. Jenis SV mestilah >=
SVt_PVMG. Lihat "sv_magic".

int mg_get(SV* sv)

mg_panjang
DILARANG! Ia merancang untuk mengalih keluar fungsi ini daripada keluaran masa hadapan Perl.
Jangan gunakannya untuk kod baharu; keluarkannya daripada kod sedia ada.

Melaporkan tentang panjang SV dalam bait, memanggil sihir panjang jika tersedia, tetapi ada
tidak menetapkan bendera UTF8 pada sv. Ia akan jatuh kembali untuk 'mendapat' sihir jika tiada
sihir 'panjang', tetapi tanpa petunjuk sama ada ia dipanggil sihir 'dapat'. Ia
menganggap sv ialah PVMG atau lebih tinggi. guna sv_len() sebaliknya.

U32 mg_panjang(SV* sv)

mg_ajaib
Menghidupkan status ajaib SV. Lihat "sv_magic".

batal mg_magical(SV* sv)

mg_set Lakukan sihir selepas nilai diberikan kepada SV. Lihat "sv_magic".

int mg_set(SV* sv)

SvGETMAGIC
Sebut "mg_get" pada SV jika ia mempunyai sihir 'get'. Sebagai contoh, ini akan memanggil
"FETCH" pada pembolehubah terikat. Makro ini menilai hujahnya lebih daripada sekali.

batal SvGETMAGIC(SV* sv)

SvLOCK Mengatur agar kunci pengecualian bersama diperoleh pada sv jika modul yang sesuai mempunyai
telah dimuatkan.

batal SvLOCK(SV* sv)

SvSETMAGIC
Sebut "mg_set" pada SV jika ia mempunyai sihir 'set'. Ini perlu selepas
mengubah suai skalar, sekiranya ia adalah pembolehubah ajaib seperti $| atau pembolehubah terikat
(ia dipanggil "KEDAI"). Makro ini menilai hujahnya lebih daripada sekali.

batal SvSETMAGIC(SV* sv)

SvSetMagicSV
Seperti "SvSetSV", tetapi adakah sebarang set sihir diperlukan selepas itu.

batal SvSetMagicSV(SV* dsv, SV* ssv)

SvSetMagicSV_nosteal
Seperti "SvSetSV_nosteal", tetapi adakah sebarang set sihir diperlukan selepas itu.

batal SvSetMagicSV_nosteal(SV* dsv, SV* ssv)

SvSetSV Memanggil "sv_setsv" jika dsv tidak sama dengan ssv. Boleh menilai hujah lebih daripada
sekali. Tidak mengendalikan sihir 'set' pada destinasi SV.

batal SvSetSV(SV* dsv, SV* ssv)

SvSetSV_nosteal
Memanggil versi tidak merosakkan "sv_setsv" jika dsv tidak sama dengan ssv. Mungkin
menilai hujah lebih daripada sekali.

batal SvSetSV_nosteal(SV* dsv, SV* ssv)

SvSHARE Mengatur sv untuk dikongsi antara benang jika modul yang sesuai telah dimuatkan.

batal SvSHARE(SV* sv)

SvUNLOCK
Mengeluarkan kunci pengecualian bersama pada sv jika modul yang sesuai telah dimuatkan.

batal SvUNLOCK(SV* sv)

Memori pengurusan


Salin antara muka penulis XSUB ke fungsi "memcpy" C. "src" adalah sumber,
"dest" ialah destinasi, "nitems" ialah bilangan item dan "type" ialah
taip. Mungkin gagal pada salinan bertindih. Lihat juga "Bergerak".

void Copy(void* src, void* dest, int nitems, type)

CopyD Suka "Copy" tetapi mengembalikan dest. Berguna untuk menggalakkan penyusun untuk tail-call
mengoptimumkan.

void * CopyD(void* src, void* dest, int nitems, type)

Alihkan antara muka penulis XSUB ke fungsi "memmove" C. "src" adalah sumber,
"dest" ialah destinasi, "nitems" ialah bilangan item dan "type" ialah
taip. Boleh melakukan gerakan bertindih. Lihat juga "Salin".

void Move(void* src, void* dest, int nitems, type)

MoveD Suka "Move" tetapi mengembalikan dest. Berguna untuk menggalakkan penyusun untuk tail-call
mengoptimumkan.

void * MoveD(void* src, void* dest, int nitems, type)

Newx Antara muka penulis XSUB kepada fungsi "malloc" C.

Memori yang diperolehi oleh ini harus MESTI dibebaskan dengan "Safefree".

Dalam 5.9.3, Newx() dan kawan menggantikan yang lebih tua Baru() API, dan menjatuhkan yang pertama
parameter, x, bantuan nyahpepijat yang membenarkan pemanggil mengenal pasti diri mereka. bantuan ini
telah digantikan dengan pilihan binaan baharu, PERL_MEM_LOG (lihat "PERL_MEM_LOG" dalam
perlhacktips). API yang lebih lama masih ada untuk digunakan dalam modul XS yang menyokong
perl yang lebih tua.

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

Newxc Antara muka penulis XSUB ke fungsi "malloc" C, dengan pelakon. Lihat juga
"Newx".

Memori yang diperolehi oleh ini harus MESTI dibebaskan dengan "Safefree".

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

Newxz Antara muka penulis XSUB ke fungsi "malloc" C. Memori yang diperuntukkan ialah
disifarkan dengan "memzero". Lihat juga "Newx".

Memori yang diperolehi oleh ini harus MESTI dibebaskan dengan "Safefree".

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

Racun RacunDengan(0xEF) untuk menangkap akses kepada memori yang dibebaskan.

void Racun(void* dest, int nitems, type)

Bebas Racun
RacunDengan(0xEF) untuk menangkap akses kepada memori yang dibebaskan.

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

RacunBaru
RacunDengan(0xAB) untuk menangkap akses kepada memori yang diperuntukkan tetapi tidak dimulakan.

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

RacunDengan
Isi memori dengan corak bait (bait yang diulang berulang kali) itu
mudah-mudahan menangkap percubaan untuk mengakses memori yang tidak dimulakan.

void PoisonWith(void* dest, int nitems, type,
U8 bait)

Perbaharui antara muka penulis XSUB kepada fungsi "realloc" C.

Memori yang diperolehi oleh ini harus MESTI dibebaskan dengan "Safefree".

batal Perbaharui(void* ptr, int nitems, type)

Renewc Antara muka penulis XSUB kepada fungsi "realloc" C, dengan pelakon.

Memori yang diperolehi oleh ini harus MESTI dibebaskan dengan "Safefree".

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

Tanpa selamat
Antara muka penulis XSUB ke fungsi "percuma" C.

Ini sepatutnya MESTI digunakan pada ingatan yang diperoleh menggunakan "Newx" dan rakan-rakan.

void Safefree(void* ptr)

"strdup()" versi savepv Perl. Mengembalikan penuding kepada rentetan yang baru diperuntukkan yang
ialah pendua "pv". Saiz rentetan ditentukan oleh "strlen()", iaitu
bermakna ia mungkin tidak mengandungi aksara "NUL" tertanam dan mesti mempunyai "NUL" di belakang.
Memori yang diperuntukkan untuk rentetan baharu boleh dibebaskan dengan "Safefree()"
fungsi.

Pada sesetengah platform, Windows sebagai contoh, semua memori yang diperuntukkan yang dimiliki oleh benang adalah
dialokasikan apabila benang itu tamat. Jadi jika anda memerlukan perkara itu tidak berlaku, anda perlu
gunakan fungsi memori yang dikongsi, seperti "savesharedpv".

char* savepv(const char* pv)

versi savepvn Perl tentang "strnup()" jika ia wujud. Mengembalikan penunjuk kepada a
rentetan yang baru diperuntukkan yang merupakan pendua bait "len" pertama daripada "pv",
ditambah dengan bait "NUL" yang tertinggal. Memori yang diperuntukkan untuk rentetan baharu boleh dibebaskan
dengan fungsi "Safefree()".

Pada sesetengah platform, Windows sebagai contoh, semua memori yang diperuntukkan yang dimiliki oleh benang adalah
dialokasikan apabila benang itu tamat. Jadi jika anda memerlukan perkara itu tidak berlaku, anda perlu
gunakan fungsi memori yang dikongsi, seperti "savesharedpvn".

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

savepvs Seperti "savepvn", tetapi mengambil rentetan literal yang ditamatkan "NUL" dan bukannya a
pasangan rentetan/panjang.

char* savepvs(const char* s)

savesharedpv
Versi "savepv()" yang memperuntukkan rentetan pendua dalam memori iaitu
dikongsi antara benang.

char* savesharedpv(const char* pv)

savesharedpvn
Versi "savepvn()" yang memperuntukkan rentetan pendua dalam memori iaitu
dikongsi antara benang. (Dengan perbezaan khusus yang bukan penunjuk NULL
boleh diterima)

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

savesharedpvs
Versi "savepvs()" yang memperuntukkan rentetan pendua dalam memori iaitu
dikongsi antara benang.

char* savesharedpvs(const char* s)

savesharedsvpv
Versi "savesharedpv()" yang memperuntukkan rentetan pendua dalam memori yang
dikongsi antara benang.

char* savesharedsvpv(SV *sv)

savevpv
Versi "savepv()"/"savepvn()" yang mendapat rentetan untuk diduplikasi daripada
diluluskan dalam SV menggunakan "SvPV()"

Pada sesetengah platform, Windows sebagai contoh, semua memori yang diperuntukkan yang dimiliki oleh benang adalah
dialokasikan apabila benang itu tamat. Jadi jika anda memerlukan perkara itu tidak berlaku, anda perlu
gunakan fungsi memori yang dikongsi, seperti "savesharedsvpv".

char* savevpv(SV* sv)

StructCopy
Ini adalah makro bebas seni bina untuk menyalin satu struktur kepada yang lain.

void StructCopy(taip *src, taip *dest, taip)

Sifar Antara muka penulis XSUB ke fungsi "memzero" C. "Dest" ialah
destinasi, "nitems" ialah bilangan item, dan "type" ialah jenisnya.

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

ZeroD Suka "Sifar" tetapi mengembalikan tujuan. Berguna untuk menggalakkan penyusun untuk tail-call
mengoptimumkan.

void * ZeroD(void* dest, int nitems, type)

Lain-lain Fungsi


dump_c_backtrace
Membuang jejak balik C ke fp yang diberikan.

Mengembalikan benar jika jejak belakang boleh diambil, palsu jika tidak.

bool dump_c_backtrace(PerlIO* fp, int max_depth,
int langkau)

fbm_compile
Menganalisis rentetan untuk membuat carian pantas padanya menggunakan fbm_instr() - yang
Algoritma Boyer-Moore.

batal fbm_compile(SV* sv, bendera U32)

fbm_instr
Mengembalikan lokasi SV dalam rentetan yang dibatasi oleh "besar" dan "besar". Ia
mengembalikan "NULL" jika rentetan tidak dapat ditemui. "sv" tidak semestinya
fbm_compiled, tetapi carian tidak akan secepat itu.

char* fbm_instr(unsigned char* besar,
unsigned char* bigend, SV* littlestr,
bendera U32)

foldEQ Mengembalikan benar jika bait len ​​terkemuka bagi rentetan s1 dan s2 adalah kes yang sama-
secara tidak sensitif; palsu sebaliknya. Huruf besar dan huruf kecil julat bait ASCII sepadan
diri mereka dan rakan kes yang bertentangan. Julat bukan sarung dan bukan ASCII
bait hanya sepadan dengan diri mereka sendiri.

I32 foldEQ(const char* a, const char* b, I32 len)

foldEQ_locale
Mengembalikan benar jika bait len ​​terkemuka bagi rentetan s1 dan s2 adalah kes yang sama-
secara tidak sensitif di tempat semasa; palsu sebaliknya.

I32 foldEQ_locale(const char* a, const char* b,
I32 len)

bentuk Mengambil corak format gaya sprintf dan hujah konvensional (bukan SV) dan
mengembalikan rentetan yang diformatkan.

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

boleh digunakan di mana-mana tempat rentetan (char *) diperlukan:

char * s = Perl_form("%d.%d",utama,minor);

Menggunakan penimbal peribadi tunggal jadi jika anda ingin memformat beberapa rentetan anda mesti
salin secara eksplisit rentetan sebelumnya (dan bebaskan salinan apabila anda selesai).

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

getcwd_sv
Isikan sv dengan direktori kerja semasa

int getcwd_sv(SV* sv)

get_c_backtrace_dump
Mengembalikan SV tempat pembuangan |kedalaman| bingkai timbunan panggilan, melangkau |langkau|
yang paling dalam. kedalaman 20 biasanya cukup.

Output yang dilampirkan kelihatan seperti:

... 1 10e004812:0082 Perl_croak util.c:1716 /usr/bin/perl 2
10df8d6d2:1d72 perl_parse perl.c:3975 /usr/bin/perl ...

Medan dipisahkan dengan tab. Lajur pertama ialah kedalaman (sifar ialah
bingkai paling dalam tidak dilangkau). Dalam hex:offset, hex ialah tempat program
kaunter berada dalam S_parse_body, dan :offset (mungkin tiada) memberitahu jumlahnya
di dalam S_parse_body terdapat kaunter program.

util.c:1716 ialah fail kod sumber dan nombor baris.

. /usr/bin/perl adalah jelas (mudah-mudahan).

Yang tidak diketahui ialah "-". Tidak diketahui boleh berlaku malangnya agak mudah: jika platform
tidak menyokong mendapatkan semula maklumat; jika binari tiada nyahpepijat
maklumat; jika pengoptimum telah mengubah kod dengan contohnya inlining.

SV* get_c_backtrace_dump(int max_depth, int langkau)

ibcmp Ini adalah sinonim untuk (! foldEQ())

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

ibcmp_locale
Ini adalah sinonim untuk (! foldEQ_locale())

I32 ibcmp_locale(const char* a, const char* b,
I32 len)

is_safe_syscall
Uji bahawa "pv" yang diberikan tidak mengandungi sebarang aksara "NUL" dalaman. Jika ia
lakukan, tetapkan "errno" kepada ENOENT, secara pilihan memberi amaran, dan kembalikan FALSE.

Kembalikan BENAR jika nama itu selamat.

Digunakan oleh IS_SAFE_SYSCALL() makro.

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

memEQ Uji dua penimbal (yang mungkin mengandungi aksara "NUL" terbenam, untuk melihat sama ada ia
sama rata. Parameter "len" menunjukkan bilangan bait untuk dibandingkan. Pulangan
sifar jika sama, atau bukan sifar jika tidak sama.

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

memNE Uji dua penimbal (yang mungkin mengandungi aksara "NUL" terbenam, untuk melihat sama ada ia
tidak sama. Parameter "len" menunjukkan bilangan bait untuk dibandingkan. Pulangan
sifar jika tidak sama, atau bukan sifar jika sama.

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

kekacauan Ambil corak format gaya sprintf dan senarai hujah. Ini digunakan untuk menjana
mesej rentetan. Jika mesej tidak berakhir dengan baris baharu, maka ia akan menjadi
dilanjutkan dengan beberapa petunjuk lokasi semasa dalam kod, seperti yang diterangkan
untuk "mess_sv".

Biasanya, mesej yang terhasil dikembalikan dalam SV fana baharu. Semasa global
pemusnahan satu SV boleh dikongsi antara penggunaan fungsi ini.

SV * huru-hara(const char *tepuk, ...)

mess_sv Mengembangkan mesej, bertujuan untuk pengguna, untuk memasukkan petunjuk semasa
lokasi dalam kod, jika mesej belum kelihatan lengkap.

"basemsg" ialah mesej atau objek awal. Jika ia adalah rujukan, ia akan digunakan
apa adanya dan akan menjadi hasil daripada fungsi ini. Jika tidak, ia digunakan sebagai rentetan,
dan jika ia sudah berakhir dengan baris baharu, ia dianggap lengkap, dan hasilnya
fungsi ini akan menjadi rentetan yang sama. Jika mesej tidak berakhir dengan a
baris baharu, maka segmen seperti "pada baris foo.pl 37" akan dilampirkan, dan mungkin
klausa lain yang menunjukkan keadaan pelaksanaan semasa. Mesej yang terhasil
akan berakhir dengan titik dan baris baharu.

Biasanya, mesej yang terhasil dikembalikan dalam SV fana baharu. Semasa global
pemusnahan satu SV boleh dikongsi antara penggunaan fungsi ini. Jika "mengambil"
adalah benar, maka fungsi itu dibenarkan (tetapi tidak diperlukan) untuk mengubah suai dan kembali
"basemsg" dan bukannya memperuntukkan SV baharu.

SV * mess_sv(SV *basemsg, bool consume)

my_snprintf
Fungsi "snprintf" perpustakaan C, jika tersedia dan mematuhi piawaian (uses
"vsnprintf", sebenarnya). Walau bagaimanapun, jika "vsnprintf" tidak tersedia, akan
malangnya gunakan "vsprintf" yang tidak selamat yang boleh mengatasi penimbal (terdapat fail
cek melebihi, tetapi itu mungkin sudah terlambat). Pertimbangkan untuk menggunakan "sv_vcatpvf" sebaliknya, atau
mendapat "vsnprintf".

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

my_sprintf
Pustaka C "sprintf", dibalut jika perlu, untuk memastikan ia akan mengembalikan
panjang rentetan yang ditulis pada penimbal. Hanya sistem pra-ANSI yang jarang diperlukan
fungsi pembungkus - biasanya ini adalah panggilan terus ke "sprintf".

int my_sprintf(char *buffer, const char *pat, ...)

my_strlcat
Pustaka C "strlcat" jika tersedia, atau pelaksanaan Perlnya. ini
beroperasi pada rentetan yang ditamatkan "NUL".

"my_strlcat()" menambahkan rentetan "src" pada penghujung "dst". Ia akan ditambah paling banyak
aksara "size - strlen(dst) - 1". Ia kemudiannya akan "NUL"-menamatkan, melainkan "saiz"
ialah 0 atau rentetan "dst" asal lebih panjang daripada "saiz" (dalam amalan ini sepatutnya
tidak berlaku kerana ia bermakna sama ada "saiz" tidak betul atau "dst" bukan a
rentetan ditamatkan "NUL" yang betul).

Ambil perhatian bahawa "saiz" ialah saiz penuh penimbal destinasi dan hasilnya ialah
dijamin "NUL"-ditamatkan jika ada kelapangan. Perhatikan bahawa bilik untuk "NUL"
hendaklah dimasukkan dalam "saiz".

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

my_strlcpy
Pustaka C "strlcpy" jika tersedia, atau pelaksanaan Perlnya. ini
beroperasi pada rentetan yang ditamatkan "NUL".

"my_strlcpy()" menyalin sehingga "saiz - 1" aksara daripada rentetan "src" kepada "dst",
"NUL"-menamatkan keputusan jika "saiz" bukan 0.

Size_t my_strlcpy(char *dst, const char *src,
saiz_t)

my_vsnprintf
Pustaka C "vsnprintf" jika tersedia dan mematuhi piawaian. Namun, jika sekiranya
"vsnprintf" tidak tersedia, malangnya akan menggunakan "vsprintf" yang tidak selamat
yang boleh mengatasi penimbal (terdapat semakan overrun, tetapi itu mungkin juga
lewat). Pertimbangkan untuk menggunakan "sv_vcatpvf" sebaliknya, atau dapatkan "vsnprintf".

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

PERL_SYS_INIT
Menyediakan penalaan khusus sistem bagi persekitaran masa jalan C yang diperlukan untuk dijalankan
Jurubahasa Perl. Ini harus dipanggil sekali sahaja, sebelum membuat sebarang Perl
jurubahasa.

batal PERL_SYS_INIT(int *argc, char*** argv)

PERL_SYS_INIT3
Menyediakan penalaan khusus sistem bagi persekitaran masa jalan C yang diperlukan untuk dijalankan
Jurubahasa Perl. Ini harus dipanggil sekali sahaja, sebelum membuat sebarang Perl
jurubahasa.

batal PERL_SYS_INIT3(int *argc, char*** argv,
char*** env)

PERL_SYS_TERM
Menyediakan pembersihan khusus sistem bagi persekitaran masa jalan C selepas menjalankan Perl
jurubahasa. Ini hendaklah dipanggil sekali sahaja, selepas membebaskan mana-mana Perl yang tinggal
jurubahasa.

batal PERL_SYS_TERM()

quadmath_format_needed
quadmath_format_needed() kembali benar jika rentetan format nampaknya mengandungi at
sekurang-kurangnya satu penentu format %[efgaEFGA] bukan awalan Q, atau mengembalikan palsu sebaliknya.

Pengesanan penentu format bukanlah pengesanan sintaks printf yang lengkap, tetapi pengesanan itu
harus menangkap kebanyakan kes biasa.

Jika benar dikembalikan, hujah-hujah itu Sekiranya secara teori diproses dengan
quadmath_snprintf(), tetapi sekiranya terdapat lebih daripada satu penentu format sedemikian (lihat
"quadmath_format_single"), dan jika terdapat apa-apa lagi selain daripada itu (malah
hanya satu bait), mereka tidak boleh diproses kerana quadmath_snprintf() adalah sangat
ketat, hanya menerima satu spesifikasi format, dan tidak ada yang lain. Dalam kes ini, kod
mungkin gagal.

bool quadmath_format_needed(const char* format)

quadmath_format_single
quadmath_snprintf() sangat ketat tentang rentetan formatnya dan akan gagal,
mengembalikan -1, jika format tidak sah. Ia menerima tepat satu spesifikasi format.

quadmath_format_single() menyemak bahawa spesifikasi tunggal yang dimaksudkan kelihatan waras: bermula
dengan "%", mempunyai hanya satu "%", berakhir dengan "[efgaEFGA]", dan mempunyai "Q" sebelum itu. ini
bukan "semakan sintaks printf" penuh, hanya asasnya.

Mengembalikan format jika ia sah, NULL jika tidak.

quadmath_format_single() boleh dan sebenarnya akan menampal pada "Q" yang hilang, jika
perlu. Dalam kes ini ia akan mengembalikan salinan format yang diubah suai, yang yang
pemanggil akan perlu kepada percuma.

Lihat juga "quadmath_format_needed".

const char* quadmath_format_single(const char* format)

BACA_XDIGIT
Mengembalikan nilai digit heks julat ASCII dan memajukan penuding rentetan.
Tingkah laku hanya ditakrifkan dengan baik apabila isXDIGIT(*str) adalah benar.

U8 READ_XDIGIT(char str*)

strEQ Uji dua rentetan untuk melihat sama ada ia sama. Mengembalikan benar atau salah.

bool strEQ(char* s1, char* s2)

strGE Uji dua rentetan untuk melihat sama ada yang pertama, "s1", lebih besar daripada atau sama dengan
kedua, "s2". Mengembalikan benar atau salah.

bool strGE(char* s1, char* s2)

strGT Uji dua rentetan untuk melihat sama ada yang pertama, "s1", lebih besar daripada yang kedua, "s2".
Mengembalikan benar atau salah.

bool strGT(char* s1, char* s2)

strLE Uji dua rentetan untuk melihat sama ada yang pertama, "s1", adalah kurang daripada atau sama dengan yang kedua,
"s2". Mengembalikan benar atau salah.

bool strLE(char* s1, char* s2)

strLT Uji dua rentetan untuk melihat sama ada yang pertama, "s1", adalah kurang daripada yang kedua, "s2".
Mengembalikan benar atau salah.

bool strLT(char* s1, char* s2)

strNE Uji dua rentetan untuk melihat sama ada ia berbeza. Mengembalikan benar atau salah.

bool strNE(char* s1, char* s2)

strnEQ Uji dua rentetan untuk melihat sama ada ia sama. Parameter "len" menunjukkan
bilangan bait untuk dibandingkan. Mengembalikan benar atau salah. (Pembungkus untuk "strncmp").

bool strnEQ(char* s1, char* s2, STRLEN len)

strnNE Uji dua rentetan untuk melihat sama ada ia berbeza. Parameter "len" menunjukkan
bilangan bait untuk dibandingkan. Mengembalikan benar atau salah. (Pembungkus untuk "strncmp").

bool strnNE(char* s1, char* s2, STRLEN len)

sv_destroyable
Rutin dummy yang melaporkan bahawa objek boleh dimusnahkan apabila tiada perkongsian
modul hadir. Ia mengabaikan hujah SV tunggalnya, dan mengembalikan 'benar'. Wujud ke
elakkan ujian untuk penunjuk fungsi NULL dan kerana ia berpotensi memberi amaran di bawah
beberapa tahap ketegasan.

bool sv_destroyable(SV *sv)

sv_nosharing
Rutin dummy yang "berkongsi" SV apabila tiada modul perkongsian hadir. Ataupun
"mengunci" ia. Atau "membuka kunci"nya. Dalam erti kata lain, mengabaikan hujah SV tunggalnya.
Wujud untuk mengelakkan ujian untuk penunjuk fungsi NULL dan kerana ia berpotensi
memberi amaran di bawah beberapa tahap ketegasan.

batal sv_nosharing(SV *sv)

vmess "pat" dan "args" ialah corak format gaya sprintf dan hujah terkapsul
senarai. Ini digunakan untuk menjana mesej rentetan. Jika mesej tidak tamat
dengan baris baharu, maka ia akan dilanjutkan dengan beberapa petunjuk arus
lokasi dalam kod, seperti yang diterangkan untuk "mess_sv".

Biasanya, mesej yang terhasil dikembalikan dalam SV fana baharu. Semasa global
pemusnahan satu SV boleh dikongsi antara penggunaan fungsi ini.

SV * vmess(const char *tepuk, va_list *args)

MRO Fungsi


Fungsi ini berkaitan dengan susunan resolusi kaedah kelas perl

mro_get_linear_isa
Mengembalikan linearisasi mro untuk simpanan yang diberikan. Secara lalai, ini akan menjadi
apa sahaja "mro_get_linear_isa_dfs" pulangan melainkan beberapa MRO lain berkuat kuasa
simpanan itu. Nilai pulangan ialah AV baca sahaja*.

Anda bertanggungjawab untuk "SvREFCNT_inc()" pada nilai pulangan jika anda bercadang untuk menyimpan
ia di mana-mana secara separa kekal (jika tidak, ia mungkin dipadamkan daripada bawah anda
kali seterusnya cache tidak sah).

AV* mro_get_linear_isa(HV* simpanan)

mro_method_changed_in
Membatalkan caching kaedah pada mana-mana kelas anak simpanan yang diberikan, supaya mereka
mungkin perasan perubahan dalam yang ini.

Sebaik-baiknya, semua kejadian "PL_sub_generation++" dalam sumber perl di luar mro.c
harus digantikan dengan panggilan ke ini.

Perl secara automatik mengendalikan kebanyakan cara biasa sesuatu kaedah mungkin ditakrifkan semula.
Walau bagaimanapun, terdapat beberapa cara anda boleh menukar kaedah dalam simpanan tanpa
perasan kod cache, dalam hal ini anda perlu memanggil kaedah ini selepas itu:

1) Memanipulasi entri HV simpanan secara langsung daripada kod XS.

2) Memberikan rujukan kepada pemalar skalar baca sahaja ke dalam entri simpanan mengikut tertib
untuk mencipta subrutin malar (seperti constant.pm buat).

Kaedah yang sama ini boleh didapati daripada perl tulen melalui,
"mro::method_changed_in(classname)".

batalkan mro_method_changed_in(HV* simpanan)

mro_register
Mendaftarkan pemalam mro tersuai. Lihat perlmroapi untuk butiran.

batal mro_register(const struct mro_alg *mro)

Panggilan berbilang Fungsi


dMULTIKAL
Isytiharkan pembolehubah tempatan untuk panggilan berbilang. Lihat "PANGGILAN RINGAN" dalam perlcall.

dMULTICALL;

PELBAGAI
Buat panggilan balik yang ringan. Lihat "PANGGILAN RINGAN" dalam perlcall.

BERBILANG;

POP_MULTICALL
Kurungan penutup untuk panggilan balik yang ringan. Lihat "PANGGILAN PANGGILAN RINGAN" dalam
perlcall.

POP_MULTICALL;

PUSH_MULTICALL
Kurungan pembuka untuk panggilan balik yang ringan. Lihat "PANGGILAN PANGGILAN RINGAN" dalam
perlcall.

PUSH_MULTICALL;

Angka fungsi


grok_bin
menukar rentetan yang mewakili nombor binari kepada bentuk angka.

Pada kemasukan permulaan and *len berikan rentetan untuk diimbas, *bendera memberikan bendera penukaran,
and mengakibatkan mestilah NULL atau penunjuk kepada NV. Imbasan berhenti pada penghujung
rentetan, atau aksara pertama yang tidak sah. Melainkan "PERL_SCAN_SILENT_ILLDIGIT" ditetapkan
in *bendera, menghadapi aksara yang tidak sah juga akan mencetuskan amaran. hidup
pulangan *len ditetapkan kepada panjang rentetan yang diimbas, dan *bendera memberikan output
bendera.

Jika nilainya <= "UV_MAX" ia dikembalikan sebagai UV, bendera keluaran adalah jelas,
dan tiada apa yang ditulis kepada *hasil. Jika nilainya ialah > UV_MAX "grok_bin" dikembalikan
UV_MAX, tetapkan "PERL_SCAN_GREATER_THAN_UV_MAX" dalam bendera output dan tulis
nilai kepada *hasil (atau nilai dibuang jika mengakibatkan ialah NULL).

Nombor perduaan boleh dipilih sebagai awalan dengan "0b" atau "b" melainkan
"PERL_SCAN_DISALLOW_PREFIX" ditetapkan dalam *bendera pada kemasukan. Jika
"PERL_SCAN_ALLOW_UNDERSCORES" ditetapkan *bendera maka nombor binari boleh menggunakan '_'
aksara untuk memisahkan digit.

UV grok_bin(const char* mula, STRLEN* len_p,
Bendera I32*, NV *hasil)

grok_hex
menukar rentetan yang mewakili nombor heks kepada bentuk angka.

Pada kemasukan permulaan and *len_p berikan rentetan untuk diimbas, *bendera memberikan bendera penukaran,
and mengakibatkan mestilah NULL atau penunjuk kepada NV. Imbasan berhenti pada penghujung
rentetan, atau aksara pertama yang tidak sah. Melainkan "PERL_SCAN_SILENT_ILLDIGIT" ditetapkan
in *bendera, menghadapi aksara yang tidak sah juga akan mencetuskan amaran. hidup
pulangan *len ditetapkan kepada panjang rentetan yang diimbas, dan *bendera memberikan output
bendera.

Jika nilainya <= UV_MAX ia dikembalikan sebagai UV, bendera keluaran adalah jelas dan
tiada apa yang ditulis kepada *hasil. Jika nilainya ialah > UV_MAX "grok_hex" dikembalikan
UV_MAX, tetapkan "PERL_SCAN_GREATER_THAN_UV_MAX" dalam bendera output dan tulis
nilai kepada *hasil (atau nilai dibuang jika mengakibatkan ialah NULL).

Nombor heks boleh dipilih sebagai awalan dengan "0x" atau "x" melainkan
"PERL_SCAN_DISALLOW_PREFIX" ditetapkan dalam *bendera pada kemasukan. Jika
"PERL_SCAN_ALLOW_UNDERSCORES" ditetapkan *bendera maka nombor hex boleh menggunakan '_'
aksara untuk memisahkan digit.

UV grok_hex(const char* mula, STRLEN* len_p,
Bendera I32*, NV *hasil)

grok_infnan
Pembantu untuk grok_number(), menerima pelbagai cara mengeja "infiniti" atau "bukan a
nombor", dan mengembalikan salah satu daripada gabungan bendera berikut:

IS_NUMBER_INFINITE
IS_NUMBER_NAN
IS_NUMBER_INFINITE | IS_NUMBER_NEG
IS_NUMBER_NAN | IS_NUMBER_NEG
0

mungkin |-ed dengan IS_NUMBER_TRAILING.

Jika infiniti atau bukan-nombor dikenali, *sp akan menghala ke satu bait
melepasi hujung rentetan yang diiktiraf. Jika pengiktirafan gagal, sifar adalah
dikembalikan, dan *sp tidak akan bergerak.

int grok_infnan(const char** sp, const char *hantar)

nombor_grok
Sama dengan grok_number_flags() dengan bendera ditetapkan kepada sifar.

int grok_number(const char *pv, STRLEN len,
UV *nilai)

grok_number_flags
Mengenali (atau tidak) nombor. Jenis nombor dikembalikan (0 jika
tidak dikenali), jika tidak, ia adalah gabungan IS_NUMBER_IN_UV yang sedikit ATAU,
IS_NUMBER_GREATER_THAN_UV_MAX, IS_NUMBER_NOT_INT, IS_NUMBER_NEG,
IS_NUMBER_INFINITY, IS_NUMBER_NAN (ditakrifkan dalam perl.h).

Jika nilai nombor boleh dimuatkan dalam UV, ia dikembalikan dalam nilai *
IS_NUMBER_IN_UV akan ditetapkan untuk menunjukkan bahawa *nilai adalah sah, IS_NUMBER_IN_UV
tidak akan ditetapkan melainkan *nilai sah, tetapi *nilai mungkin telah diberikan kepada
semasa pemprosesan walaupun IS_NUMBER_IN_UV tidak ditetapkan semasa pemulangan. Jika valuep ialah
NULL, IS_NUMBER_IN_UV akan ditetapkan untuk kes yang sama seperti apabila valuep bukan NULL,
tetapi tiada tugasan sebenar (atau SEGV) akan berlaku.

IS_NUMBER_NOT_INT akan ditetapkan dengan IS_NUMBER_IN_UV jika perpuluhan tertinggal dilihat
(dalam kes ini *nilai memberikan nilai sebenar yang dipotong kepada integer), dan
IS_NUMBER_NEG jika nombornya negatif (dalam kes ini *nilai memegang nilai mutlak
nilai). IS_NUMBER_IN_UV tidak ditetapkan jika e notasi digunakan atau nombornya lebih besar
daripada UV.

"flags" hanya membenarkan "PERL_SCAN_TRAILING", yang membenarkan untuk mengekori bukan angka
teks pada sebaliknya berjaya grok, tetapkan "IS_NUMBER_TRAILING" pada hasil carian.

int grok_number_flags(const char *pv, STRLEN len,
UV *nilai, bendera U32)

grok_numeric_radix
Imbas dan langkau untuk pemisah perpuluhan berangka (radix).

bool grok_numeric_radix(const char **sp,
const char *hantar)

grok_oct
menukar rentetan yang mewakili nombor perlapanan kepada bentuk berangka.

Pada kemasukan permulaan and *len berikan rentetan untuk diimbas, *bendera memberikan bendera penukaran,
and mengakibatkan mestilah NULL atau penunjuk kepada NV. Imbasan berhenti pada penghujung
rentetan, atau aksara pertama yang tidak sah. Melainkan "PERL_SCAN_SILENT_ILLDIGIT" ditetapkan
in *bendera, menghadapi 8 atau 9 juga akan mencetuskan amaran. Sekembalinya *len is
ditetapkan kepada panjang rentetan yang diimbas, dan *bendera memberikan bendera keluaran.

Jika nilainya <= UV_MAX ia dikembalikan sebagai UV, bendera keluaran adalah jelas dan
tiada apa yang ditulis kepada *hasil. Jika nilainya ialah > UV_MAX "grok_oct" dikembalikan
UV_MAX, tetapkan "PERL_SCAN_GREATER_THAN_UV_MAX" dalam bendera output dan tulis
nilai kepada *hasil (atau nilai dibuang jika mengakibatkan ialah NULL).

Jika "PERL_SCAN_ALLOW_UNDERSCORES" ditetapkan *bendera maka nombor perlapanan boleh digunakan
aksara '_' untuk memisahkan digit.

UV grok_oct(const char* start, STRLEN* len_p,
Bendera I32*, NV *hasil)

isinfnan
Perl_isinfnan() ialah fungsi utiliti yang mengembalikan benar jika hujah NV adalah sama ada
infiniti atau NaN, sebaliknya palsu. Untuk menguji dengan lebih terperinci, gunakan Perl_isinf()
and Perl_isnan().

Ini juga adalah songsang logik bagi Perl_isfinite().

bool isinfnan(NV nv)

Perl_signbit
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Kembalikan integer bukan sifar jika bit tanda pada NV ditetapkan, dan 0 jika tidak.

Jika Configure mengesan sistem ini mempunyai a signbit() itu akan berfungsi dengan NV kami, kemudian
kami hanya menggunakannya melalui #define dalam perl.h. Jika tidak, kembali pada ini
pelaksanaan. Kegunaan utama fungsi ini ialah menangkap -0.0.

Konfigurasikan nota: Fungsi ini dipanggil 'Perl_signbit' dan bukannya kosong
'signbit' kerana mudah untuk membayangkan sistem mempunyai a signbit() fungsi atau
makro yang tidak berfungsi dengan pilihan NV kami yang khusus. Kita tidak sepatutnya
hanya #tentukan semula signbit sebagai Perl_signbit dan harapkan pengepala sistem standard
bergembiralah. Juga, ini adalah fungsi tanpa konteks (tiada pTHX_) kerana Perl_signbit()
biasanya #ditakrifkan semula dalam perl.h sebagai panggilan makro ringkas kepada sistem signbit().
Pengguna hanya perlu sentiasa menghubungi Perl_signbit().

int Perl_signbit(NV f)

scan_bin
Untuk keserasian ke belakang. Gunakan "grok_bin" sebaliknya.

NV scan_bin(const char* mula, STRLEN len,
STRLEN* semula)

scan_hex
Untuk keserasian ke belakang. Gunakan "grok_hex" sebaliknya.

NV scan_hex(const char* mula, STRLEN len,
STRLEN* semula)

imbasan_okt
Untuk keserasian ke belakang. Gunakan "grok_oct" sebaliknya.

NV scan_oct(const char* start, STRLEN len,
STRLEN* semula)

Sudah usang ke belakang keserasian fungsi


Sebahagian daripada ini juga tidak digunakan lagi. Anda boleh mengecualikan ini daripada Perl anda yang disusun oleh
menambah pilihan ini untuk Konfigurasikan: "-Accflags='-DNO_MATHOMS'"

custom_op_desc
Kembalikan perihalan op tersuai yang diberikan. Ini pernah digunakan oleh OP_DESC
makro, tetapi tidak lagi: ia hanya disimpan untuk keserasian, dan tidak sepatutnya
digunakan.

const char * custom_op_desc(const OP *o)

custom_op_name
Kembalikan nama untuk operasi tersuai yang diberikan. Ini pernah digunakan oleh makro OP_NAME,
tetapi tidak lagi: ia hanya disimpan untuk keserasian, dan tidak boleh digunakan.

const char * custom_op_name(const OP *o)

gv_fetchmethod
Lihat "gv_fetchmethod_autoload".

GV* gv_fetchmethod(HV* simpanan, const char* nama)

is_utf8_char
DILARANG! Ia merancang untuk mengalih keluar fungsi ini daripada keluaran masa hadapan Perl.
Jangan gunakannya untuk kod baharu; keluarkannya daripada kod sedia ada.

Menguji jika beberapa bilangan bait sewenang-wenangnya bermula dalam aksara UTF-8 yang sah. Catatan
bahawa aksara INVARIANT (iaitu ASCII pada mesin bukan EBCDIC) ialah UTF-8 yang sah
watak. Bilangan bait sebenar dalam aksara UTF-8 akan dikembalikan jika
ia sah, jika tidak 0.

Fungsi ini ditamatkan kerana kemungkinan input yang cacat boleh berlaku
menyebabkan bacaan melebihi penghujung penimbal input. Gunakan "isUTF8_CHAR" sebaliknya.

STRLEN is_utf8_char(const U8 *s)

is_utf8_char_buf
Ini adalah sama dengan makro "isUTF8_CHAR".

STRLEN ialah_utf8_char_buf(const U8 *buf,
const U8 *buf_end)

pack_cat
Pelaksana enjin pek() Fungsi Perl. Nota: parameter next_in_list dan
bendera tidak digunakan. Panggilan ini tidak boleh digunakan; gunakan senarai pek sebaliknya.

void pack_cat(SV *cat, const char *pat,
const char *patend, SV **beglist,
SV **senarai akhir, SV ***next_in_list,
bendera U32)

pad_compname_type
Mencari jenis pembolehubah leksikal pada kedudukan po pada masa kini-
pad penyusunan. Jika pembolehubah ditaip, simpanan kelas di mana ia berada
ditaip dikembalikan. Jika tidak, "NULL" dikembalikan.

HV * pad_compname_type(PADOFFSET po)

sv_2pvbyte_nolen
Kembalikan penuding kepada perwakilan SV yang dikodkan bait. Boleh menyebabkan SV
untuk diturunkan taraf daripada UTF-8 sebagai kesan sampingan.

Biasanya diakses melalui makro "SvPVbyte_nolen".

char* sv_2pvbyte_nolen(SV* sv)

sv_2pvutf8_nolen
Kembalikan penuding kepada perwakilan SV yang dikodkan UTF-8. Boleh menyebabkan SV
untuk dinaik taraf kepada UTF-8 sebagai kesan sampingan.

Biasanya diakses melalui makro "SvPVutf8_nolen".

char* sv_2pvutf8_nolen(SV* sv)

sv_2pv_nolen
Seperti "sv_2pv()", tetapi tidak mengembalikan panjangnya juga. Anda biasanya harus menggunakan
pembalut makro "SvPV_nolen(sv)" sebaliknya.

char* sv_2pv_nolen(SV* sv)

sv_catpvn_mg
Seperti "sv_catpvn", tetapi juga mengendalikan sihir 'set'.

batal sv_catpvn_mg(SV *sv, const char *ptr,
STRLEN len)

sv_catsv_mg
Seperti "sv_catsv", tetapi juga mengendalikan sihir 'set'.

batal sv_catsv_mg(SV *dsv, SV *ssv)

sv_force_normal
Buat asal pelbagai jenis pemalsuan pada SV: jika PV ialah rentetan kongsi, buat a
salinan peribadi; jika kita seorang ref, berhenti refing; jika kita glob, turun taraf kepada xpvmg.
Lihat juga "sv_force_normal_flags".

batal sv_force_normal(SV *sv)

sv_iv Pelaksanaan peribadi makro "SvIVx" untuk penyusun yang tidak dapat mengatasinya
ungkapan makro yang kompleks. Sentiasa gunakan makro sebaliknya.

IV sv_iv(SV* sv)

sv_nolocking
Rutin tiruan yang "mengunci" SV apabila tiada modul penguncian hadir. wujud
untuk mengelakkan ujian untuk penunjuk fungsi NULL dan kerana ia berpotensi memberi amaran
di bawah beberapa tahap ketegasan.

"Digantikan" oleh sv_nosharing().

batal sv_nolocking(SV *sv)

sv_nounlocking
Rutin tiruan yang "membuka kunci" SV apabila tiada modul penguncian hadir.
Wujud untuk mengelakkan ujian untuk penunjuk fungsi NULL dan kerana ia berpotensi
memberi amaran di bawah beberapa tahap ketegasan.

"Digantikan" oleh sv_nosharing().

batal sv_nounlocking(SV *sv)

sv_nv Pelaksanaan peribadi makro "SvNVx" untuk penyusun yang tidak dapat mengatasinya
ungkapan makro yang kompleks. Sentiasa gunakan makro sebaliknya.

NV sv_nv(SV* sv)

sv_pv Gunakan makro "SvPV_nolen" sebaliknya

char* sv_pv(SV *sv)

sv_pvbyte
Gunakan "SvPVbyte_nolen" sebaliknya.

char* sv_pvbyte(SV *sv)

sv_pvbyten
Pelaksanaan peribadi makro "SvPVbyte" untuk penyusun yang tidak dapat mengatasinya
dengan ungkapan makro yang kompleks. Sentiasa gunakan makro sebaliknya.

char* sv_pvbyten(SV *sv, STRLEN *lp)

sv_pvn Pelaksanaan peribadi makro "SvPV" untuk penyusun yang tidak dapat mengatasinya
ungkapan makro yang kompleks. Sentiasa gunakan makro sebaliknya.

char* sv_pvn(SV *sv, STRLEN *lp)

sv_pvutf8
Gunakan makro "SvPVutf8_nolen" sebaliknya

char* sv_pvutf8(SV *sv)

sv_pvutf8n
Pelaksanaan peribadi makro "SvPVutf8" untuk penyusun yang tidak dapat mengatasinya
dengan ungkapan makro yang kompleks. Sentiasa gunakan makro sebaliknya.

char* sv_pvutf8n(SV *sv, STRLEN *lp)

sv_taint
Mencemarkan SV. Gunakan "SvTAINTED_on" sebaliknya.

batal sv_taint(SV* sv)

sv_unref
Menyahset status RV SV dan mengurangkan kiraan rujukan apa-apa sahaja
dirujuk oleh RV. Ini hampir boleh dianggap sebagai pembalikan
"newSVrv". Ini ialah "sv_unref_flags" dengan "bendera" adalah sifar. Lihat "SvROK_off".

batal sv_unref(SV* sv)

sv_usepvn
Memberitahu SV untuk menggunakan "ptr" untuk mencari nilai rentetannya. Dilaksanakan dengan memanggil
"sv_usepvn_flags" dengan "bendera" 0, oleh itu tidak mengendalikan sihir 'set'. Lihat
"sv_usepvn_flags".

void sv_usepvn(SV* sv, char* ptr, STRLEN len)

sv_usepvn_mg
Seperti "sv_usepvn", tetapi juga mengendalikan sihir 'set'.

void sv_usepvn_mg(SV *sv, char *ptr, STRLEN len)

sv_uv Pelaksanaan peribadi makro "SvUVx" untuk penyusun yang tidak dapat mengatasinya
ungkapan makro yang kompleks. Sentiasa gunakan makro sebaliknya.

UV sv_uv(SV* sv)

unpack_str
Pelaksana enjin buka bungkusan() Fungsi Perl. Nota: parameter strbeg, new_s
dan ocnt tidak digunakan. Panggilan ini tidak boleh digunakan, sebaliknya gunakan unpackstrings.

I32 unpack_str(const char *tepuk, const char *patend,
const char *s, const char *strbeg,
const char *strend, char **new_s,
I32 ocnt, bendera U32)

utf8_to_uvchr
DILARANG! Ia merancang untuk mengalih keluar fungsi ini daripada keluaran masa hadapan Perl.
Jangan gunakannya untuk kod baharu; keluarkannya daripada kod sedia ada.

Mengembalikan titik kod asli bagi aksara pertama dalam rentetan "s" iaitu
diandaikan dalam pengekodan UTF-8; "retlen" akan ditetapkan kepada panjang, dalam bait, daripada
watak itu.

Beberapa, tetapi tidak semua, kecacatan UTF-8 dikesan, dan sebenarnya, beberapa kecacatan
input boleh menyebabkan pembacaan melebihi penghujung penimbal input, itulah sebabnya ini
fungsi ditamatkan. Gunakan "utf8_to_uvchr_buf" sebaliknya.

Jika "s" menunjuk kepada salah satu kecacatan yang dikesan, dan amaran UTF8 didayakan,
sifar dikembalikan dan *retlen ditetapkan (jika "retlen" bukan NULL) kepada -1. Jika mereka
amaran dimatikan, nilai yang dikira jika ditakrifkan dengan baik (atau Unicode REPLACEMENT
WATAK, jika tidak) dikembalikan secara senyap dan *retlen ditetapkan (jika "retlen" tidak
NULL) supaya ("s" + *retlen) ialah kedudukan seterusnya yang mungkin dalam "s" yang boleh
memulakan watak yang tidak cacat. Lihat "utf8n_to_uvchr" untuk mendapatkan butiran tentang masa
WATAK PENGGANTIAN dikembalikan.

UV utf8_to_uvchr(const U8 *s, STRLEN *relen)

utf8_to_uvuni
DILARANG! Ia merancang untuk mengalih keluar fungsi ini daripada keluaran masa hadapan Perl.
Jangan gunakannya untuk kod baharu; keluarkannya daripada kod sedia ada.

Mengembalikan titik kod Unicode bagi aksara pertama dalam rentetan "s" iaitu
diandaikan dalam pengekodan UTF-8; "retlen" akan ditetapkan kepada panjang, dalam bait, daripada
watak itu.

Beberapa, tetapi tidak semua, kecacatan UTF-8 dikesan, dan sebenarnya, beberapa kecacatan
input boleh menyebabkan pembacaan melebihi penghujung penimbal input, yang merupakan satu sebab
mengapa fungsi ini ditamatkan. Yang lain ialah hanya dalam sangat terhad
keadaan sekiranya Unicode lawan titik kod asli boleh menarik minat
awak. Lihat "utf8_to_uvuni_buf" untuk alternatif.

Jika "s" menunjuk kepada salah satu kecacatan yang dikesan, dan amaran UTF8 didayakan,
sifar dikembalikan dan *retlen ditetapkan (jika "retlen" tidak menghala ke NULL) kepada -1. Jika
amaran tersebut dimatikan, nilai yang dikira jika ditakrifkan dengan baik (atau Unicode
WATAK PENGGANTIAN, jika tidak) dikembalikan secara senyap, dan *retlen ditetapkan (jika
"retlen" bukan NULL) supaya ("s" + *retlen) ialah kedudukan seterusnya yang mungkin dalam "s"
yang boleh memulakan watak yang tidak cacat. Lihat "utf8n_to_uvchr" untuk mendapatkan butiran tentang
apabila WATAK PENGGANTIAN dikembalikan.

UV utf8_to_uvuni(const U8 *s, STRLEN *relen)

Optree pembinaan


newASSIGNOP
Membina, menyemak dan mengembalikan op tugasan. kiri and kanan membekalkan
parameter tugasan; mereka dimakan oleh fungsi ini dan menjadi sebahagian
daripada pokok op yang dibina.

If optype ialah "OP_ANDASSIGN", "OP_ORASSIGN", atau "OP_DORASSIGN", maka yang sesuai
Optree bersyarat dibina. Jika optype ialah opcode pengendali binari,
seperti "OP_BIT_OR", kemudian op dibina yang melaksanakan operasi binari
dan memberikan hasilnya kepada hujah kiri. Sama ada cara, jika optype tidak sifar
kemudian bendera tidak mempunyai kesan.

If optype ialah sifar, maka skalar biasa atau tugasan senarai dibina. yang mana
jenis tugasan ia ditentukan secara automatik. bendera memberikan lapan bit
daripada "op_flags", kecuali "OPf_KIDS" akan ditetapkan secara automatik dan, dianjak ke atas
lapan bit, lapan bit "op_private", kecuali bit dengan nilai 1 atau 2
ditetapkan secara automatik mengikut keperluan.

OP * newASSIGNOP(bendera I32, OP *kiri, optype I32,
OP *kanan)

BINOP baharu
Membina, menyemak dan mengembalikan op daripada sebarang jenis binari. jenis ialah opcode.
bendera memberikan lapan bit "op_flags", kecuali "OPf_KIDS" akan ditetapkan
secara automatik, dan, beralih ke atas lapan bit, lapan bit "op_private", kecuali
bahawa bit dengan nilai 1 atau 2 ditetapkan secara automatik seperti yang diperlukan. pertama and lepas
membekalkan sehingga dua op untuk menjadi anak langsung op binari; mereka dimakan
oleh fungsi ini dan menjadi sebahagian daripada pokok op yang dibina.

OP * newBINOP(jenis I32, bendera I32, OP *pertama,
OP *terakhir)

KONDOP baru
Membina, menyemak dan mengembalikan op ungkapan bersyarat ("cond_expr". bendera
memberikan lapan bit "op_flags", kecuali "OPf_KIDS" akan ditetapkan
secara automatik, dan, beralih ke atas lapan bit, lapan bit "op_private", kecuali
bahawa bit dengan nilai 1 ditetapkan secara automatik. pertama membekalkan ungkapan
memilih antara dua cabang, dan trueop and falseop membekalkan cawangan;
mereka digunakan oleh fungsi ini dan menjadi sebahagian daripada pokok op yang dibina.

OP * newCONDOP(bendera I32, OP *pertama, OP *trueop,
OP *falseop)

newDEFSVOP
Membina dan mengembalikan op untuk mengakses $_, sama ada sebagai pembolehubah leksikal (jika
diisytiharkan sebagai "$_ saya") dalam skop semasa, atau $_ global.

OP * newDEFSVOP()

newFOROP
Membina, menyemak dan mengembalikan pokok op yang menyatakan gelung "foreach" (lelaran
melalui senarai nilai). Ini adalah gelung kelas berat, dengan struktur yang membolehkan
keluar dari gelung dengan "terakhir" dan seumpamanya.

sv secara pilihan membekalkan pembolehubah yang akan dialiaskan kepada setiap item secara bergilir-gilir; jika
null, ia lalai kepada $_ (sama ada leksikal atau global). expr membekalkan senarai
nilai untuk berulang. menyekat membekalkan badan utama gelung, dan akaun
secara pilihan membekalkan blok "teruskan" yang beroperasi sebagai separuh kedua badan.
Semua input optree ini digunakan oleh fungsi ini dan menjadi sebahagian daripada
pokok op yang dibina.

bendera memberikan lapan bit "op_flags" untuk op "leaveloop" dan, beralih ke atas
lapan bit, lapan bit "op_private" untuk op "leaveloop", kecuali itu (dalam
kedua-dua kes) beberapa bit akan ditetapkan secara automatik.

OP * newFOROP(bendera I32, OP *sv, OP *expr, OP *blok,
OP *samb)

newGIVENOP
Membina, menyemak dan mengembalikan pokok op yang menyatakan blok "diberikan". cond
membekalkan ungkapan yang akan ditugaskan secara tempatan kepada pembolehubah leksikal, dan
menyekat membekalkan badan binaan "diberikan"; mereka termakan oleh ini
berfungsi dan menjadi sebahagian daripada pokok op yang dibina. defsv_off ialah pad offset
pembolehubah leksikal skalar yang akan terjejas. Jika 0, $_ global
akan digunakan.

OP * newGIVENOP(OP *cond, OP *block,
PADOFFSET defsv_off)

newGVOP Membina, menyemak dan mengembalikan op apa-apa jenis yang melibatkan terbenam
merujuk kepada GV. jenis ialah opcode. bendera memberikan lapan bit "op_flags".
gv mengenal pasti GV yang harus dirujuk oleh op; memanggil fungsi ini tidak
memindahkan pemilikan apa-apa rujukan kepadanya.

OP * newGVOP(jenis I32, bendera I32, GV *gv)

LISTOP baharu
Membina, menyemak dan mengembalikan op apa-apa jenis senarai. jenis ialah opcode.
bendera memberikan lapan bit "op_flags", kecuali "OPf_KIDS" akan ditetapkan
secara automatik jika diperlukan. pertama and lepas membekalkan sehingga dua ops untuk terus
kanak-kanak senarai op; mereka digunakan oleh fungsi ini dan menjadi sebahagian daripada
pokok op yang dibina.

Bagi kebanyakan pengendali senarai, fungsi semak menjangkakan semua ops kanak-kanak akan hadir
sudah, jadi memanggil "newLISTOP(OP_JOIN, ...)" (cth) adalah tidak sesuai. Apa yang anda
ingin lakukan dalam kes itu ialah mencipta op jenis OP_LIST, tambahkan lebih ramai kanak-kanak
itu, dan kemudian panggil "op_convert_list". Lihat "op_convert_list" untuk mendapatkan maklumat lanjut.

OP * newLISTOP(jenis I32, bendera I32, OP *pertama,
OP *terakhir)

newLOGOP
Membina, menyemak dan mengembalikan op logik (kawalan aliran). jenis ialah opcode.
bendera memberikan lapan bit "op_flags", kecuali "OPf_KIDS" akan ditetapkan
secara automatik, dan, beralih ke atas lapan bit, lapan bit "op_private", kecuali
bahawa bit dengan nilai 1 ditetapkan secara automatik. pertama membekalkan ungkapan
mengawal aliran, dan lain membekalkan rantaian sampingan (ganti) ops; mereka
digunakan oleh fungsi ini dan menjadi sebahagian daripada pokok op yang dibina.

OP * newLOGOP(jenis I32, bendera I32, OP *pertama,
OP *lain)

newLOOPEX
Membina, menyemak dan mengembalikan op keluar gelung (seperti "goto" atau "terakhir").
jenis ialah opcode. label membekalkan parameter yang menentukan sasaran
op; ia digunakan oleh fungsi ini dan menjadi sebahagian daripada pokok op yang dibina.

OP * newLOOPEX(jenis I32, OP *label)

newLOOPOP
Membina, menyemak dan mengembalikan pokok op yang menyatakan gelung. Ini hanya gelung
dalam aliran kawalan melalui pokok op; ia tidak mempunyai gelung kelas berat
struktur yang membolehkan keluar dari gelung dengan "terakhir" dan seumpamanya. bendera memberikan
lapan bit "op_flags" untuk op peringkat atas, kecuali beberapa bit akan ditetapkan
secara automatik mengikut keperluan. expr membekalkan gelung mengawal ekspresi
lelaran, dan menyekat membekalkan badan gelung; mereka termakan oleh ini
berfungsi dan menjadi sebahagian daripada pokok op yang dibina. boleh nyahpepijat kini
tidak digunakan dan hendaklah sentiasa 1.

OP * newLOOPOP(bendera I32, I32 boleh nyahpepijat, OP *expr,
OP *blok)

newMETHOP
Membina, menyemak dan mengembalikan op jenis kaedah dengan nama kaedah dinilai
pada waktu runtime. jenis ialah opcode. bendera memberikan lapan bit "op_flags", kecuali
bahawa "OPf_KIDS" akan ditetapkan secara automatik, dan, beralih ke atas lapan bit, lapan
bit "op_private", kecuali bit dengan nilai 1 ditetapkan secara automatik.
dynamic_meth membekalkan op yang menilai nama kaedah; ia dimakan oleh ini
berfungsi dan menjadi sebahagian daripada pokok op yang dibina. Optype yang disokong:
OP_METHOD.

OP * newMETHOP(jenis I32, bendera I32, OP *pertama)

newMETHOP_named
Membina, menyemak dan mengembalikan op jenis kaedah dengan nama kaedah tetap.
jenis ialah opcode. bendera memberikan lapan bit "op_flags", dan, beralih ke atas
lapan bit, lapan bit "op_private". const_meth membekalkan kaedah yang berterusan
nama; ia mestilah rentetan LEMBU yang dikongsi. Optype yang disokong: OP_METHOD_NAMED.

OP * newMETHOP_named(jenis I32, bendera I32,
SV *const_meth)

newNULLLIST
Membina, menyemak dan mengembalikan op "stub" baharu, yang mewakili senarai kosong
ungkapan.

OP * newNULLLIST()

newOP Membina, menyemak dan mengembalikan op daripada sebarang jenis asas (sebarang jenis yang tidak mempunyai tambahan
padang). jenis ialah opcode. bendera memberikan lapan bit "op_flags", dan,
beralih ke atas lapan bit, lapan bit "op_private".

OP * newOP(jenis I32, bendera I32)

PADOP baharu
Membina, menyemak dan mengembalikan op apa-apa jenis yang melibatkan rujukan kepada a
elemen pad. jenis ialah opcode. bendera memberikan lapan bit "op_flags". A
slot pad diperuntukkan secara automatik dan diisi dengan sv; fungsi ini mengambil
pemilikan satu rujukan kepadanya.

Fungsi ini hanya wujud jika Perl telah disusun untuk menggunakan ithreads.

OP * PADOP baharu(jenis I32, bendera I32, SV *sv)

newPMOP Membina, menyemak dan mengembalikan op daripada sebarang jenis padanan corak. jenis adalah
opcode. bendera memberikan lapan bit "op_flags" dan, beralih ke atas lapan bit,
lapan bit "op_private".

OP * PMOP baharu(jenis I32, bendera I32)

newPVOP Membina, menyemak dan mengembalikan op apa-apa jenis yang melibatkan terbenam
Penunjuk aras C (PV). jenis ialah opcode. bendera memberikan lapan bit
"op_flags". pv membekalkan penunjuk tahap C, yang mesti diperuntukkan menggunakan
"PerlMemShared_malloc"; ingatan akan dibebaskan apabila op dimusnahkan.

OP * PVOP baharu(jenis I32, bendera I32, aksara *pv)

newRANGE
Membina dan mengembalikan op "julat", dengan op "flip" dan "flop" bawahan.
bendera memberikan lapan bit "op_flags" untuk op "flip" dan, beralih ke atas lapan
bit, lapan bit "op_private" untuk kedua-dua ops "flip" dan "range", kecuali
bahawa bit dengan nilai 1 ditetapkan secara automatik. kiri and kanan membekalkan
ungkapan yang mengawal titik akhir julat; mereka termakan oleh ini
berfungsi dan menjadi sebahagian daripada pokok op yang dibina.

OP * newRANGE(bendera I32, OP *kiri, OP *kanan)

newSLICEOP
Membina, menyemak dan mengembalikan op "lslice" (kepingan senarai). bendera memberikan
lapan bit "op_flags", kecuali "OPf_KIDS" akan ditetapkan secara automatik dan,
beralih ke atas lapan bit, lapan bit "op_private", kecuali bit dengan
nilai 1 atau 2 ditetapkan secara automatik mengikut keperluan. listval and langganan membekalkan
parameter kepingan; mereka digunakan oleh fungsi ini dan menjadi sebahagian daripada
pokok op yang dibina.

OP * newSLICEOP(bendera I32, OP *subskrip,
OP *listval)

newSTATEOP
Membina op negeri (COP). Operasi negeri biasanya op "nextstate", tetapi akan
menjadi op "dbstate" jika penyahpepijatan didayakan untuk kod yang sedang disusun. Negeri
op diisi daripada "PL_curcop" (atau "PL_compiling"). Jika label bukan batal, ia
membekalkan nama label untuk dilampirkan pada op negeri; fungsi ini mengambil
pemilikan ingatan yang ditunjuk oleh label, dan akan membebaskannya. bendera memberikan
lapan bit "op_flags" untuk op negeri.

If o adalah batal, op negeri dikembalikan. Jika tidak op negeri digabungkan dengan o
ke dalam op senarai "lineseq", yang dikembalikan. o digunakan oleh fungsi ini dan
menjadi sebahagian daripada pokok op yang dikembalikan.

OP * newSTATEOP(bendera I32, aksara *label, OP *o)

newSVOP Membina, menyemak dan mengembalikan op apa-apa jenis yang melibatkan SV terbenam.
jenis ialah opcode. bendera memberikan lapan bit "op_flags". sv memberikan SV kepada
benamkan dalam op; fungsi ini mengambil pemilikan satu rujukan kepadanya.

OP * newSVOP(jenis I32, bendera I32, SV *sv)

newUNOP Membina, menyemak dan mengembalikan op daripada sebarang jenis unary. jenis ialah opcode.
bendera memberikan lapan bit "op_flags", kecuali "OPf_KIDS" akan ditetapkan
secara automatik jika diperlukan, dan, beralih ke atas lapan bit, lapan bit daripada
"op_private", kecuali bit dengan nilai 1 ditetapkan secara automatik. pertama
membekalkan op pilihan untuk menjadi anak langsung op unary; ia dimakan oleh
fungsi ini dan menjadi sebahagian daripada pokok op yang dibina.

OP * newUNOP(jenis I32, bendera I32, OP *pertama)

baruUNOP_AUX
Serupa dengan "newUNOP", tetapi sebaliknya mencipta struct UNOP_AUX, dengan op_aux
dimulakan kepada aux

OP* newUNOP_AUX(jenis I32, bendera I32, OP* pertama,
UNOP_AUX_item *aux)

newWHENOP
Membina, menyemak dan mengembalikan pokok op yang menyatakan blok "bila". cond
membekalkan ungkapan ujian, dan menyekat membekalkan blok yang akan dilaksanakan
jika ujian dinilai benar; mereka dimakan oleh fungsi ini dan menjadi sebahagian
daripada pokok op yang dibina. cond akan ditafsirkan secara DWIM, selalunya sebagai a
perbandingan terhadap $_, dan mungkin batal untuk menjana blok "lalai".

OP * newWHENOP(OP *cond, OP *block)

baruWHILEOP
Membina, menyemak dan mengembalikan pokok op yang menyatakan gelung "sementara". Ini adalah satu
gelung heavyweight, dengan struktur yang membolehkan keluar dari gelung dengan "terakhir" dan
seperti itu.

gelung ialah pilihan "enterloop" yang telah dibina terlebih dahulu untuk digunakan dalam gelung; jika ia adalah
null maka op yang sesuai akan dibina secara automatik. expr membekalkan
ungkapan mengawal gelung. menyekat membekalkan badan utama gelung, dan akaun
secara pilihan membekalkan blok "teruskan" yang beroperasi sebagai separuh kedua badan.
Semua input optree ini digunakan oleh fungsi ini dan menjadi sebahagian daripada
pokok op yang dibina.

bendera memberikan lapan bit "op_flags" untuk op "leaveloop" dan, beralih ke atas
lapan bit, lapan bit "op_private" untuk op "leaveloop", kecuali itu (dalam
kedua-dua kes) beberapa bit akan ditetapkan secara automatik. boleh nyahpepijat pada masa ini tidak digunakan
dan hendaklah sentiasa 1. has_my boleh dibekalkan sebagai benar untuk memaksa badan gelung
disertakan dalam skopnya sendiri.

OP * newWHILEOP(bendera I32, I32 boleh nyahpepijat,
LOOP *gelung, OP *expr, OP *sekat,
OP *samb, I32 has_my)

Optree Manipulasi Fungsi


allocopstash
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Hanya tersedia di bawah binaan berulir, fungsi ini memperuntukkan entri masuk
"PL_stashpad" untuk simpanan diserahkan kepadanya.

PADOFFSET alloccopstash(HV *hv)

blok_akhir
Mengendalikan keluar skop masa kompilasi. lantai ialah indeks simpanan yang dikembalikan oleh
"block_start", dan seq ialah badan blok. Mengembalikan blok, mungkin
diubah suai.

OP * block_end(tingkat I32, OP *seq)

block_start
Mengendalikan kemasukan skop masa kompilasi. Mengatur pembayang untuk dipulihkan semasa keluar blok
dan juga mengendalikan nombor jujukan pad untuk menjadikan pembolehubah leksikal skop betul.
Mengembalikan indeks simpanan untuk digunakan dengan "block_end".

int block_start(int penuh)

ck_entersub_args_list
Melaksanakan pembetulan lalai bahagian argumen bagi pokok op "entersub". ini
terdiri daripada menggunakan konteks senarai pada setiap ops hujah. Ini adalah
rawatan standard yang digunakan pada panggilan bertanda "&", atau panggilan kaedah, atau panggilan
melalui rujukan subrutin, atau sebarang panggilan lain yang tidak dapat dihubungi oleh penerima
dikenal pasti pada masa penyusunan, atau panggilan di mana penerima tidak mempunyai prototaip.

OP * ck_entersub_args_list(OP *entersubop)

ck_entersub_args_proto
Melaksanakan pembetulan bahagian argumen pokok op "entersub" berdasarkan a
prototaip subrutin. Ini membuat pelbagai pengubahsuaian kepada ops hujah, daripada
menggunakan konteks sehingga memasukkan ops "refgen", dan menyemak nombor dan
jenis hujah sintaksis, seperti yang diarahkan oleh prototaip. Ini adalah piawaian
rawatan yang digunakan pada panggilan subrutin, tidak ditandakan dengan "&", di mana penerima boleh berada
dikenal pasti pada masa penyusunan dan mempunyai prototaip.

protosv membekalkan prototaip subrutin untuk digunakan pada panggilan. Ia mungkin a
skalar yang ditentukan biasa, yang mana nilai rentetan akan digunakan. Sebagai alternatif, untuk
kemudahan, ia mungkin objek subrutin ("CV*" yang telah dihantar ke "SV*")
yang mempunyai prototaip. Prototaip yang dibekalkan, dalam apa jua bentuk, tidak diperlukan
untuk memadankan penerima sebenar yang dirujuk oleh pokok op.

Jika ops hujah tidak bersetuju dengan prototaip, contohnya dengan mempunyai
bilangan hujah yang tidak boleh diterima, pokok op yang sah akan dikembalikan. Kesalahan
dicerminkan dalam keadaan parser, biasanya menghasilkan satu pengecualian pada
peringkat atas penghuraian yang merangkumi semua ralat kompilasi yang berlaku. Dalam
mesej ralat, penerima dirujuk dengan nama yang ditakrifkan oleh namegv
parameter.

OP * ck_entersub_args_proto(OP *entersubop,
GV *namegv, SV *protosv)

ck_entersub_args_proto_or_list
Melaksanakan pembetulan bahagian argumen pokok op "entersub" sama ada berdasarkan
prototaip subrutin atau menggunakan pemprosesan konteks senarai lalai. Ini adalah
rawatan standard yang digunakan pada panggilan subrutin, tidak ditandakan dengan "&", di mana
callee boleh dikenal pasti pada masa penyusunan.

protosv membekalkan prototaip subrutin untuk digunakan pada panggilan, atau menunjukkan
bahawa tidak ada prototaip. Ia mungkin skalar biasa, dalam kes ini jika ia
ditakrifkan maka nilai rentetan akan digunakan sebagai prototaip, dan jika ia tidak ditentukan
maka tiada prototaip. Sebagai alternatif, untuk kemudahan, ia mungkin a
objek subrutin ("CV*" yang telah dihantar ke "SV*"), yang mana prototaipnya
akan digunakan jika ia mempunyai satu. Prototaip (atau kekurangannya) yang dibekalkan, dalam
mana-mana bentuk, tidak perlu sepadan dengan penerima sebenar yang dirujuk oleh op
pokok.

Jika ops hujah tidak bersetuju dengan prototaip, contohnya dengan mempunyai
bilangan hujah yang tidak boleh diterima, pokok op yang sah akan dikembalikan. Kesalahan
dicerminkan dalam keadaan parser, biasanya menghasilkan satu pengecualian pada
peringkat atas penghuraian yang merangkumi semua ralat kompilasi yang berlaku. Dalam
mesej ralat, penerima dirujuk dengan nama yang ditakrifkan oleh namegv
parameter.

OP * ck_entersub_args_proto_or_list(OP *entersubop,
GV *namegv,
SV *protosv)

cv_const_sv
Jika "cv" ialah sub pemalar yang layak untuk sebaris, mengembalikan nilai malar
dikembalikan oleh sub. Jika tidak, mengembalikan NULL.

Subs tetap boleh dibuat dengan "newCONSTSUB" atau seperti yang diterangkan dalam "Constant
Fungsi" dalam perlsub.

SV* cv_const_sv(const CV *const cv)

cv_get_call_checker
Mendapatkan semula fungsi yang akan digunakan untuk membetulkan panggilan ke cv. Secara khusus,
fungsi ini digunakan pada pokok op "entersub" untuk panggilan subrutin, tidak ditanda
dengan "&", di mana penerima boleh dikenal pasti pada masa penyusunan sebagai cv.

Penunjuk fungsi tahap C dikembalikan masuk *ckfun_p, dan hujah SV untuknya ialah
kembali masuk *ckobj_p. Fungsi ini bertujuan untuk dipanggil dengan cara ini:

entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));

Dalam panggilan ini, entersubop ialah penunjuk kepada op "entersub", yang boleh diganti
oleh fungsi semak, dan namegv ialah GV yang membekalkan nama yang sepatutnya digunakan
oleh fungsi semak untuk merujuk kepada penerima op "entersub" jika perlu
mengeluarkan sebarang diagnostik. Ia dibenarkan untuk menggunakan fungsi semak dalam bukan standard
situasi, seperti kepada panggilan ke subrutin yang berbeza atau kepada panggilan kaedah.

Secara lalai, fungsinya ialah Perl_ck_entersub_args_proto_or_list, dan SV
parameter ialah cv sendiri. Ini melaksanakan pemprosesan prototaip standard. Ia boleh menjadi
diubah, untuk subrutin tertentu, oleh "cv_set_call_checker".

batal cv_get_call_checker(CV *cv,
Perl_call_checker *ckfun_p,
SV **ckobj_p)

cv_set_call_checker
Bentuk asal "cv_set_call_checker_flags", yang melepasinya
Bendera "CALL_CHECKER_REQUIRE_GV" untuk keserasian ke belakang.

batal cv_set_call_checker(CV *cv,
Perl_call_checker ckfun,
SV *ckobj)

cv_set_call_checker_flags
Menetapkan fungsi yang akan digunakan untuk membetulkan panggilan ke cv. Secara khusus,
fungsi digunakan pada pokok op "entersub" untuk panggilan subrutin, tidak ditanda
dengan "&", di mana penerima boleh dikenal pasti pada masa penyusunan sebagai cv.

Penunjuk fungsi tahap C dibekalkan dalam ckfun, dan hujah SV untuknya ialah
dibekalkan dalam ckobj. Fungsi harus ditakrifkan seperti ini:

OP STATIK * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)

Ia bertujuan untuk dipanggil dengan cara ini:

entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);

Dalam panggilan ini, entersubop ialah penunjuk kepada op "entersub", yang boleh diganti
oleh fungsi semak, dan namegv membekalkan nama yang sepatutnya digunakan oleh
fungsi semak untuk merujuk kepada penerima op "entersub" jika ia perlu mengeluarkan sebarang
diagnostik. Ia dibenarkan untuk menggunakan fungsi semak dalam bukan standard
situasi, seperti kepada panggilan ke subrutin yang berbeza atau kepada panggilan kaedah.

namegv mungkin sebenarnya bukan GV. Untuk kecekapan, perl mungkin melepasi CV atau SV lain
sebaliknya. Apa sahaja yang diluluskan boleh digunakan sebagai hujah pertama untuk "cv_name". awak
boleh memaksa perl untuk melepasi GV dengan memasukkan "CALL_CHECKER_REQUIRE_GV" dalam bendera.

Tetapan semasa untuk CV tertentu boleh diambil dengan "cv_get_call_checker".

batalkan cv_set_call_checker_flags(
CV *cv, Perl_call_checker ckfun, SV *ckobj,
bendera U32
)

SENARAI PAUTAN
Memandangkan punca optree, pautkan pepohon dalam susunan pelaksanaan menggunakan "op_next"
penunjuk dan kembalikan op pertama yang dilaksanakan. Jika ini telah dilakukan, ia akan berlaku
tidak akan dibuat semula, dan "o->op_next" akan dikembalikan. Jika "o->op_next" belum lagi
menetapkan, o hendaklah sekurang-kurangnya "UNOP".

OP* LINKLIST(OP *o)

baruCONSTSUB
Lihat "newCONSTSUB_flags".

CV* newCONSTSUB(HV* simpanan, const char* nama, SV* sv)

newCONSTSUB_flags
Mencipta sub setara tetap dengan Perl "sub FOO () { 123 }" yang layak
untuk sebaris pada masa penyusunan.

Pada masa ini, satu-satunya nilai berguna untuk "bendera" ialah SVf_UTF8.

Subrutin yang baru dibuat mengambil pemilikan rujukan kepada yang diluluskan dalam SV.

Melepasi NULL untuk SV mencipta sub setara dengan "sub BAR () {}", yang
tidak akan dipanggil jika digunakan sebagai pemusnah, tetapi akan menyekat overhed panggilan
kepada "AUTOLOAD". (Walau bagaimanapun, borang ini tidak layak untuk sebaris pada masa penyusunan.)

CV* newCONSTSUB_flags(HV* simpanan, const char* nama,
STRLEN len, bendera U32, SV* sv)

newXS Digunakan oleh "xsubpp" untuk menyambungkan XSUB sebagai subs Perl. nama fail perlu statik
penyimpanan, kerana ia digunakan secara langsung sebagai CvFILE(), tanpa salinan dibuat.

OpHAS_SIBLING
Mengembalikan benar jika o mempunyai adik beradik

bool OpHAS_SIBLING(OP *o)

OpLASTSIB_set
Tanda o sebagai tidak mempunyai adik beradik lagi. Pada binaan "PERL_OP_PARENT", tanda o sebagai
mempunyai ibu bapa yang ditentukan. Lihat juga "OpMORESIB_set" dan "OpMAYBESIB_set". Untuk
antara muka peringkat lebih tinggi, lihat "op_sibling_splice".

batal OpLASTSIB_set(OP *o, OP *ibu bapa)

OpMAYBESIB_set
Secara bersyarat melakukan "OpMORESIB_set" atau "OpLASTSIB_set" bergantung pada sama ada sib
bukan batal. Untuk antara muka peringkat lebih tinggi, lihat "op_sibling_splice".

batal OpMAYBESIB_set(OP *o, OP *sib, OP *ibu bapa)

OpMORESIB_set
Tetapkan adik beradik o kepada nilai bukan sifar sib. Lihat juga "OpLASTSIB_set" dan
"OpMAYBESIB_set". Untuk antara muka peringkat lebih tinggi, lihat "op_sibling_splice".

batal OpMORESIB_set(OP *o, OP *sib)

OpSIBLING
Mengembalikan adik beradik o, atau NULL jika tiada adik beradik

OP* OpSIBLING(OP *o)

op_append_elem
Tambahkan item pada senarai ops yang terkandung terus dalam op jenis senarai,
mengembalikan senarai yang dipanjangkan. pertama ialah op jenis senarai, dan lepas adalah op kepada
tambahkan pada senarai. optype menentukan opcode yang dimaksudkan untuk senarai. Jika pertama
belum lagi senarai jenis yang betul, ia akan dinaik taraf menjadi satu. Jika sama ada
pertama or lepas adalah batal, yang lain dikembalikan tidak berubah.

OP * op_append_elem(I32 optype, OP *first, OP *last)

op_append_list
Gabungkan senarai ops yang terkandung terus dalam dua ops jenis senarai,
mengembalikan senarai gabungan. pertama and lepas ialah ops jenis senarai untuk digabungkan.
optype menentukan opcode yang dimaksudkan untuk senarai. Jika sama ada pertama or lepas tidak
sudah senarai jenis yang betul, ia akan dinaik taraf menjadi satu. Jika sama ada pertama
or lepas adalah batal, yang lain dikembalikan tidak berubah.

OP * op_append_list(I32 optype, OP *first, OP *last)

OP_CLASS
Kembalikan kelas OP yang disediakan: iaitu, struktur *OP yang mana yang digunakannya.
Untuk operasi teras, ini pada masa ini mendapatkan maklumat daripada PL_opargs, yang tidak
sentiasa menggambarkan dengan tepat jenis yang digunakan. Untuk ops tersuai jenis dikembalikan daripada
pendaftaran, dan terpulang kepada pendaftar untuk memastikan ia tepat. The
nilai yang dikembalikan akan menjadi salah satu pemalar OA_* daripada op.h.

U32 OP_CLASS(OP *o)

op_contextualize
Menggunakan konteks sintaksis pada pokok op yang mewakili ungkapan. o ialah op
pokok, dan konteks mestilah "G_SCALAR", "G_ARRAY", atau "G_VOID" untuk menentukan
konteks untuk digunakan. Pokok op yang diubah suai dikembalikan.

OP * op_contextualize(OP *o, konteks I32)

op_convert_list
Menukar o ke dalam senarai op jika ia belum lagi, dan kemudian menukarnya menjadi
dinyatakan jenis, memanggil fungsi semaknya, memperuntukkan sasaran jika ia memerlukannya,
dan pemalar lipatan.

Operasi jenis senarai biasanya dibina seorang kanak-kanak pada satu masa melalui "NEwLISTOP",
"op_prepend_elem" dan "op_append_elem". Kemudian akhirnya ia diserahkan kepada
"op_convert_list" untuk menjadikannya jenis yang betul.

OP * op_convert_list(jenis I32, bendera I32, OP *o)

OP_DESC Kembalikan penerangan ringkas tentang OP yang disediakan.

const char * OP_DESC(OP *o)

op_free Percuma op. Hanya gunakan ini apabila op tidak lagi dipautkan daripada mana-mana optree.

batal op_free(OP *o)

op_linklist
Fungsi ini ialah pelaksanaan makro "LINKLIST". Ia tidak sepatutnya
dipanggil terus.

OP* op_linklist(OP *o)

op_lvalue
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Sebarkan konteks nilai ("boleh diubah suai") kepada op dan anak-anaknya. jenis
mewakili jenis konteks, secara kasarnya berdasarkan jenis op yang akan melakukan
mengubah suai, walaupun "local()" diwakili oleh OP_NULL, kerana ia tidak mempunyai jenis op
sendiri (ia diisyaratkan oleh bendera pada operasi lvalue).

Fungsi ini mengesan perkara yang tidak boleh diubah suai, seperti "$x+1", dan menjana
kesilapan bagi mereka. Sebagai contoh, "$x+1 = 2" akan menyebabkan ia dipanggil dengan op
daripada jenis OP_ADD dan hujah "jenis" OP_SASSIGN.

Ia juga membenderakan perkara yang perlu berkelakuan khas dalam konteks nilai, seperti
"$$x = 5" yang mungkin perlu menghidupkan rujukan dalam $x.

OP * op_lvalue(OP *o, jenis I32)

OP_NAME Kembalikan nama OP yang disediakan. Untuk ops teras ini mencari nama dari
op_type; untuk ops tersuai daripada op_ppaddr.

const char * OP_NAME(OP *o)

op_null Meneutralkan op apabila ia tidak lagi diperlukan, tetapi masih dipautkan dari yang lain
ops.

batal op_null(OP *o)

op_parent
Mengembalikan OP induk bagi o, jika ia mempunyai induk. Mengembalikan NULL sebaliknya. ini
fungsi hanya tersedia pada perl yang dibina dengan "-DPERL_OP_PARENT".

OP* op_parent(OP *o)

op_prepend_elem
Sediakan item pada senarai op yang terkandung terus dalam op jenis senarai,
mengembalikan senarai yang dipanjangkan. pertama adalah pilihan untuk menambah senarai, dan lepas
ialah op jenis senarai. optype menentukan opcode yang dimaksudkan untuk senarai. Jika lepas
belum lagi senarai jenis yang betul, ia akan dinaik taraf menjadi satu. Jika sama ada
pertama or lepas adalah batal, yang lain dikembalikan tidak berubah.

OP * op_prepend_elem(I32 optype, OP *first, OP *last)

op_skop
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Membungkus pokok op dengan beberapa op tambahan supaya pada masa jalan skop dinamik
akan diwujudkan. Operasi asal dijalankan dalam skop dinamik baharu, dan kemudian,
dengan syarat mereka keluar seperti biasa, skop akan dibuka. Ops tambahan
digunakan untuk mencipta dan melepaskan skop dinamik biasanya akan menjadi "masuk"/"tinggalkan"
berpasangan, tetapi op "skop" boleh digunakan sebaliknya jika ops cukup mudah untuk tidak
memerlukan struktur skop dinamik penuh.

OP * op_scope(OP *o)

op_sibling_splice
Fungsi umum untuk mengedit struktur rantaian op_sibling yang sedia ada
nod. Dengan analogi dengan peringkat perl sambatan () fungsi, membolehkan anda memadam
sifar atau lebih nod berjujukan, menggantikannya dengan sifar atau lebih nod yang berbeza.
Melakukan pengemasan op_first/op_last yang diperlukan pada nod induk dan
manipulasi op_sibling pada kanak-kanak. Nod terakhir yang dipadam akan ditanda sebagai
sebagai nod terakhir dengan mengemas kini medan op_sibling/op_sibparent atau op_moresib sebagai
sesuai.

Ambil perhatian bahawa op_next tidak dimanipulasi, dan nod tidak dibebaskan; iaitu
tanggungjawab pemanggil. Ia juga tidak akan membuat op senarai baharu untuk kosong
senarai dll; gunakan fungsi peringkat lebih tinggi seperti op_append_elem() untuk itu.

induk ialah nod induk bagi rantai adik-beradik. Ia mungkin diluluskan sebagai NULL jika
penyambungan tidak menjejaskan op pertama atau terakhir dalam rantai.

mula ialah nod mendahului nod pertama yang akan disambungkan. Nod mengikutinya
akan dipadamkan, dan ops akan dimasukkan selepas itu. Jika ia adalah NULL, nod pertama
seterusnya dipadamkan, dan nod dimasukkan pada permulaan.

del_count ialah bilangan nod untuk dipadamkan. Jika sifar, tiada nod dipadamkan. Jika -1
atau lebih daripada atau sama dengan bilangan kanak-kanak yang tinggal, semua kanak-kanak yang tinggal adalah
dipadam.

sisipan adalah yang pertama daripada rantaian nod yang akan dimasukkan sebagai ganti nod. Jika
NULL, tiada nod dimasukkan.

Ketua rantaian ops yang dipadam dikembalikan, atau NULL jika tiada ops dipadamkan.

Sebagai contoh:

tindakan sebelum selepas pulangan
------ ----- ----- -------

PP
sambung(P, A, 2, XYZ) | | BC
ABCD AXYZD

PP
splice(P, NULL, 1, XY) | | A
ABCD XYBCD

PP
splice(P, NULL, 3, NULL) | | ABC
ABCD D

PP
sambatan(P, B, 0, XY) | | NULL
ABCD ABXYCD

Untuk manipulasi langsung peringkat rendah "op_sibparent" dan "op_moresib", lihat
"OpMORESIB_set", "OpLASTSIB_set", "OpMAYBESIB_set".

OP* op_sibling_splice(OP *ibu bapa, OP *mula,
int del_count, sisipan OP*)

OP_TYPE_IS
Mengembalikan benar jika OP yang diberikan bukan penunjuk NULL dan jika ia daripada jenis yang diberikan.

Penafian makro ini, "OP_TYPE_ISNT" juga tersedia
"OP_TYPE_IS_NN" dan "OP_TYPE_ISNT_NN" yang menghilangkan semakan penuding NULL.

bool OP_TYPE_IS(OP *o, jenis Optype)

OP_TYPE_IS_OR_WAS
Mengembalikan benar jika OP yang diberikan bukan penunjuk NULL dan jika ia daripada jenis yang diberikan
atau pernah sebelum digantikan dengan OP jenis OP_NULL.

Penafian makro ini, "OP_TYPE_ISNT_AND_WASNT" juga tersedia serta
"OP_TYPE_IS_OR_WAS_NN" dan "OP_TYPE_ISNT_AND_WASNT_NN" yang menghilangkan NULL
semakan penunjuk.

bool OP_TYPE_IS_OR_WAS(OP *o, jenis Optype)

rv2cv_op_cv
Memeriksa op, yang dijangka mengenal pasti subrutin pada masa jalanan, dan
cuba untuk menentukan pada masa penyusunan subrutin mana yang dikenal pasti. Ini adalah
biasanya digunakan semasa penyusunan Perl untuk menentukan sama ada prototaip boleh
digunakan pada panggilan fungsi. cvop adakah op sedang dipertimbangkan, biasanya "rv2cv"
op. Penunjuk kepada subrutin yang dikenal pasti dikembalikan, jika ia dapat ditentukan
secara statik, dan penuding nol dikembalikan jika tidak dapat ditentukan
secara statik.

Pada masa ini, subrutin boleh dikenal pasti secara statik jika RV yang "rv2cv"
adalah untuk beroperasi disediakan oleh op "gv" atau "const" yang sesuai. Operasi "gv" ialah
sesuai jika slot CV GV dihuni. Operasi "const" sesuai jika
nilai malar mestilah RV yang menunjuk ke CV. Butiran proses ini mungkin berubah
dalam versi masa hadapan Perl. Jika op "rv2cv" mempunyai bendera "OPpENTERSUB_AMPER".
set maka tiada percubaan dibuat untuk mengenal pasti subrutin secara statik: bendera ini ialah
digunakan untuk menyekat sihir masa kompilasi pada panggilan subrutin, memaksanya untuk digunakan
tingkah laku masa jalan lalai.

If bendera mempunyai set bit "RV2CVOPCV_MARK_EARLY", kemudian pengendalian GV
rujukan diubah suai. Jika GV telah diperiksa dan slot CVnya didapati
kosong, maka op "gv" mempunyai set bendera "OPpEARLY_CV". Jika op tidak
dioptimumkan, dan slot CV kemudiannya diisi dengan subrutin yang mempunyai a
prototaip, bendera itu akhirnya mencetuskan amaran "dipanggil terlalu awal untuk menyemak
prototaip".

If bendera mempunyai bit "RV2CVOPCV_RETURN_NAME_GV" ditetapkan, kemudian bukannya mengembalikan
penunjuk kepada subrutin ia mengembalikan penunjuk kepada GV memberikan yang paling banyak
nama yang sesuai untuk subrutin dalam konteks ini. Biasanya ini hanya
"CvGV" subrutin, tetapi untuk subrutin tanpa nama ("CvANON") iaitu
dirujuk melalui GV ia akan menjadi GV rujukan. "GV*" yang terhasil ialah
hantar ke "CV*" untuk dikembalikan. Penunjuk nol dikembalikan seperti biasa jika tiada
subrutin yang boleh ditentukan secara statik.

CV * rv2cv_op_cv(OP *cvop, bendera U32)

Pek and Membongkar


senarai pek
Pelaksana enjin pek() Fungsi Perl.

senarai pek kosong(SV *cat, const char *pat,
const char *patend, SV **beglist,
SV **senarai akhir)

buka rentetan
Enjin yang melaksanakan buka bungkusan() Fungsi Perl.

Menggunakan templat pat..patend, fungsi ini membongkar rentetan s..strend menjadi a
bilangan SV fana, yang ia menolak ke timbunan argumen perl (@_) (jadi anda
perlu mengeluarkan "PUTBACK" sebelum dan "SPAGAIN" selepas panggilan ke ini
fungsi). Ia mengembalikan bilangan elemen yang ditolak.

Penunjuk strend dan paten harus menunjuk ke bait berikut yang terakhir
watak setiap rentetan.

Walaupun fungsi ini mengembalikan nilainya pada timbunan argumen perl, ia tidak
ambil sebarang parameter dari timbunan itu (dan oleh itu khususnya tidak perlu dilakukan
PUSHMARK sebelum memanggilnya, tidak seperti "panggilan_pv" sebagai contoh).

I32 buka rentetan(const char *tepuk,
const char *patend, const char *s,
const char *strend, bendera U32)

Pad Tarikh Struktur


CvPADLIST
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

CV boleh menetapkan CvPADLIST(cv) untuk menunjuk ke PADLIST. Ini adalah CV
scratchpad, yang menyimpan pembolehubah leksikal dan opcode sementara dan per-benang
nilai-nilai.

Untuk tujuan ini "format" adalah sejenis CV; eval"" juga (kecuali mereka tidak
boleh dipanggil sesuka hati dan sentiasa dibuang selepas eval"" selesai dilaksanakan).
Fail yang diperlukan hanyalah eval tanpa sebarang skop leksikal luar.

XSUB tidak mempunyai CvPADLIST. dXSTARG mengambil nilai daripada PL_curpad, tetapi begitulah
benar-benar pad pemanggil (slot yang diperuntukkan oleh setiap entersub). Jangan
dapatkan atau tetapkan CvPADLIST jika CV ialah XSUB (seperti yang ditentukan oleh "CvISXSUB()"), CvPADLIST
slot digunakan semula untuk tujuan dalaman yang berbeza dalam XSUB.

PADLIST mempunyai tatasusunan C tempat pad disimpan.

Entri ke-0 PADLIST ialah PADNAMELIST yang mewakili "nama" atau
sebaliknya "maklumat jenis statik" untuk leksikal. Unsur-unsur individu a
PADNAMELIST ialah PADNAME. Pemfaktoran semula masa hadapan mungkin menghalang PADNAMELIST daripada
disimpan dalam tatasusunan PADLIST, jadi jangan bergantung padanya. Lihat "PadlistNAMES".

Kemasukan ke CvDEPTH PADLIST ialah PAD (AV) yang merupakan bingkai tindanan di
kedalaman rekursi itu ke dalam CV. Slot ke-0 bingkai AV ialah AV iaitu
@_. Entri lain ialah storan untuk pembolehubah dan sasaran op.

Lelaran ke atas PADNAMELIST akan diulang ke atas semua item pad yang mungkin. Slot pad
untuk sasaran (SVs_PADTMP) dan GV akhirnya mempunyai &PL_padname_undef "nama", manakala
slot untuk pemalar mempunyai &PL_padname_const "nama" (lihat pad_alloc()). Itu
&PL_padname_undef dan &PL_padname_const digunakan ialah butiran pelaksanaan
tertakluk kepada perubahan. Untuk mengujinya, gunakan "!PadnamePV(name)" dan "PadnamePV(name)
&& !PadnameLEN(nama)", masing-masing.

Hanya slot pembolehubah saya/kami mendapat nama yang sah. Selebihnya adalah sasaran op/GV/pemalar
yang diperuntukkan atau diselesaikan secara statik pada masa penyusunan. Ini tidak mempunyai
nama yang mana mereka boleh dicari daripada kod Perl pada masa jalan melalui eval"" the
cara pembolehubah saya/kami boleh. Memandangkan mereka tidak boleh dicari dengan "nama" tetapi hanya oleh
indeks mereka diperuntukkan pada masa penyusunan (yang biasanya dalam PL_op->op_targ),
membazirkan nama SV untuk mereka tidak masuk akal.

Nama pad dalam PADNAMELIST mempunyai PV mereka yang memegang nama pembolehubah.
Medan COP_SEQ_RANGE_LOW dan _HIGH membentuk julat (rendah+1..termasuk tinggi) daripada
nombor cop_seq yang mana nama itu sah. Semasa penyusunan, medan ini mungkin
pegang nilai khas PERL_PADSEQ_INTRO untuk menunjukkan pelbagai peringkat:

COP_SEQ_RANGE_LOW _HIGH
----------------- -----
PERL_PADSEQ_INTRO 0 pembolehubah belum diperkenalkan:
{ saya ($x
valid-seq# PERL_PADSEQ_INTRO pembolehubah dalam skop:
{ saya ($x)
valid-seq# valid-seq# kompilasi skop selesai:
{ saya ($x) }

Untuk leksikal yang ditaip PadnameTYPE mata pada simpanan jenis. Untuk leksikal "kami",
PadnameOURSTASH menunjuk pada simpanan global yang berkaitan (supaya pendua
pengisytiharan "kami" dalam pakej yang sama boleh dikesan). PadnameGEN kadangkala
digunakan untuk menyimpan nombor penjanaan semasa penyusunan.

Jika PadnameOUTER ditetapkan pada nama pad, maka slot dalam bingkai AV ialah a
Rujukan REFCNT kepada leksikal dari "luar". Entri sebegitu kadang-kadang
dirujuk sebagai 'palsu'. Dalam kes ini, nama tidak menggunakan 'rendah' ​​dan 'tinggi' untuk
simpan julat cop_seq, kerana ia berada dalam skop keseluruhannya. Sebaliknya kedai 'tinggi'
beberapa bendera yang mengandungi maklumat tentang leksikal sebenar (adakah ia diisytiharkan dalam anon, dan
adakah ia mampu digunakan beberapa kali?), dan untuk ANON palsu, 'rendah'
mengandungi indeks dalam pad induk tempat nilai leksikal disimpan, ke
membuat pengklonan lebih cepat.

Jika 'nama' ialah '&' entri yang sepadan dalam PAD ialah CV yang mewakili a
kemungkinan penutupan.

Ambil perhatian bahawa format dianggap sebagai subs anon, dan diklon setiap kali menulis
dipanggil (jika perlu).

Bendera SVs_PADSTALE dikosongkan pada leksikal setiap kali saya() dilaksanakan, dan
ditetapkan pada pintu keluar skop. Ini membenarkan amaran 'Pembolehubah $x tidak tersedia'
dijana dalam eval, seperti

{ $x saya = 1; sub f { eval '$x'} } f();

Untuk vars negeri, SVs_PADSTALE terlebih muatan bermaksud 'belum dimulakan', tetapi ini
keadaan dalaman disimpan dalam entri pad yang berasingan.

SENARAI PADL * CvPADLIST(CV *cv)

PadARRAY
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Tatasusunan C entri pad.

SV ** PadARRAY(pad PAD)

PadlistARRAY
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Tatasusunan C senarai pad, yang mengandungi pad. Hanya subskrip dengan nombor >=
1, kerana entri ke-0 tidak dijamin untuk kekal boleh digunakan.

PAD ** PadlistARRAY(PADLIST padlist)

PadlistMAX
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Indeks ruang yang diperuntukkan terakhir dalam senarai pad. Perhatikan bahawa pad terakhir mungkin
berada dalam slot yang lebih awal. Sebarang entri yang mengikutinya akan menjadi NULL dalam kes itu.

SSize_t PadlistMAX(PADLIST padlist)

PadlistNAMES
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Nama yang dikaitkan dengan entri pad.

PADNAMELIST * PadlistNAMES(PADLIST padlist)

PadlistNAMESARRAY
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Tatasusunan C nama pad.

PADNAME ** PadlistNAMESARRAY(PADLIST padlist)

PadlistNAMESMAX
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Indeks nama pad terakhir.

SSize_t PadlistNAMESMAX(PADLIST padlist)

PadlistREFCNT
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Kiraan rujukan senarai pad. Pada masa ini ini sentiasa 1.

U32 PadlistREFCNT(PADLIST padlist)

NOTA PadMAX: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Indeks entri pad terakhir.

SSize_t PadMAX(pad PAD)

PadnameLEN
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Panjang nama.

STRLEN PadnameLEN(PADNAME pn)

PadnamelistARRAY
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Tatasusunan C nama pad.

PADNAME ** PadnamelistARRAY(PADNAMELIST pnl)

PadnamelistMAX
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Indeks nama pad terakhir.

SSize_t PadnamelistMAX(PADNAMELIST pnl)

PadnamelistREFCNT
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Kiraan rujukan senarai nama pad.

SSize_t PadnamelistREFCNT(PADNAMELIST pnl)

PadnamelistREFCNT_dec
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menurunkan kiraan rujukan senarai nama pad.

batalkan PadnamelistREFCNT_dec(PADNAMELIST pnl)

PadnamePV
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Nama yang disimpan dalam struct nama pad. Ini mengembalikan NULL untuk slot sasaran.

char * PadnamePV(PADNAME pn)

Nama PadREFCNT
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Kiraan rujukan nama pad.

SSize_t PadnameREFCNT(PADNAME pn)

Nama PadREFCNT_dec
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menurunkan kiraan rujukan nama pad.

batal Nama PadREFCNT_dec(PADNAME pn)

Nama PadSV
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Mengembalikan nama pad sebagai SV fana.

SV * PadnameSV(PADNAME pn)

PadnameUTF8
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Sama ada PadnamePV berada dalam UTF8. Pada masa ini, ini sentiasa benar.

bool PadnameUTF8(PADNAME pn)

pad_add_name_pvs
Persis seperti "pad_add_name_pvn", tetapi mengambil rentetan literal dan bukannya a
pasangan rentetan/panjang.

PADOFFSET pad_add_name_pvs(const char *nama, bendera U32,
HV *typestash, HV *ourstash)

pad_findmy_pvs
Persis seperti "pad_findmy_pvn", tetapi mengambil rentetan literal dan bukannya a
pasangan rentetan/panjang.

PADOFFSET pad_findmy_pvs(const char *nama, bendera U32)

pad_new Cipta senarai pad baharu, mengemas kini pembolehubah global untuk penyusunan semasa
padlist untuk menunjuk ke padlist baru. Bendera berikut boleh ATAU disatukan:

padnew_CLONE pad ini adalah untuk CV klon
padnew_SAVE simpan global lama pada timbunan simpan
padnew_SAVESUB juga menyimpan bahan tambahan untuk permulaan sub

PADLIST * pad_new(int flags)

PL_comppad
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Semasa penyusunan, ini menunjuk kepada tatasusunan yang mengandungi bahagian nilai pad
untuk kod yang sedang menyusun. (Pada masa larian, CV mungkin mempunyai banyak nilai sedemikian
tatasusunan; pada masa penyusunan hanya satu dibina.) Pada masa jalan, ini menunjukkan kepada
tatasusunan yang mengandungi nilai yang berkaitan pada masa ini untuk pad untuk
melaksanakan kod.

PL_comppad_name
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Semasa penyusunan, ini menunjuk kepada tatasusunan yang mengandungi bahagian nama pad
untuk kod yang sedang menyusun.

PL_curpad
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Tuding terus ke badan tatasusunan "PL_comppad". (Iaitu, ini
"PAD_ARRAY(PL_comppad)".)

Per-Jurubahasa Pembolehubah


PL_modglobal
"PL_modglobal" ialah tujuan umum, penterjemah HV global untuk digunakan oleh sambungan
yang perlu menyimpan maklumat berdasarkan setiap jurubahasa. Dalam secubit pun boleh
digunakan sebagai jadual simbol untuk sambungan untuk berkongsi data antara satu sama lain. Ia adalah
idea yang baik untuk menggunakan kekunci yang diawali dengan nama pakej sambungan yang memiliki
data.

HV* PL_modglobal

PL_na Pembolehubah kemudahan yang biasanya digunakan dengan "SvPV" apabila seseorang tidak peduli
kira-kira panjang tali. Ia biasanya lebih cekap untuk sama ada mengisytiharkan a
pembolehubah tempatan dan gunakan itu sebagai gantinya atau untuk menggunakan makro "SvPV_nolen".

STRLEN PL_na

PL_opfreehook
Apabila bukan "NULL", fungsi yang ditunjuk oleh pembolehubah ini akan dipanggil setiap kali an
OP dibebaskan dengan OP yang sepadan sebagai hujah. Ini membolehkan sambungan untuk
bebaskan sebarang atribut tambahan yang dilampirkan secara tempatan pada OP. Ia juga terjamin
mula-mula menembak OP ibu bapa dan kemudian untuk anak-anaknya.

Apabila anda menggantikan pembolehubah ini, ia dianggap sebagai amalan yang baik untuk menyimpan
mungkin cangkuk yang dipasang sebelum ini dan anda mengingatinya di dalam cangkuk anda sendiri.

Perl_ophook_t PL_opfreehook

PL_peepp
Tuding kepada pengoptimum lubang intip setiap subrutin. Ini adalah fungsi yang mendapat
dipanggil pada penghujung penyusunan subrutin Perl (atau bebas yang sama
sekeping kod Perl) untuk melakukan pembetulan beberapa ops dan untuk melaksanakan skala kecil
pengoptimuman. Fungsi dipanggil sekali untuk setiap subrutin yang disusun,
dan diluluskan, sebagai parameter tunggal, penunjuk ke op yang merupakan titik masuk ke
subrutin itu. Ia mengubah suai pokok op di tempatnya.

Pengoptimum lubang intip tidak boleh diganti sepenuhnya. Sebaliknya, tambahkan kod pada
ia dengan membungkus pengoptimum sedia ada. Cara asas untuk melakukan ini boleh dilihat dalam
"Kompilasi pas 3: pengoptimuman lubang intip" dalam perlguts. Jika kod baharu mahu
beroperasi pada ops sepanjang struktur subrutin, bukannya hanya di bahagian atas
tahap, mungkin lebih mudah untuk membungkus cangkuk "PL_rpeepp".

peep_t PL_peepp

PL_rpeepp
Tuding kepada pengoptimum lubang intip rekursif. Ini adalah fungsi yang dipanggil
pada penghujung penyusunan subrutin Perl (atau sekeping bebas yang setara
kod Perl) untuk melakukan pembetulan beberapa ops dan untuk melaksanakan skala kecil
pengoptimuman. Fungsi ini dipanggil sekali untuk setiap rantaian ops yang dipautkan
medan "op_next" mereka; ia dipanggil secara rekursif untuk mengendalikan setiap rantai sisi. Ia adalah
lulus, sebagai parameter tunggal, penunjuk ke op yang berada di kepala rantai.
Ia mengubah suai pokok op di tempatnya.

Pengoptimum lubang intip tidak boleh diganti sepenuhnya. Sebaliknya, tambahkan kod pada
ia dengan membungkus pengoptimum sedia ada. Cara asas untuk melakukan ini boleh dilihat dalam
"Kompilasi pas 3: pengoptimuman lubang intip" dalam perlguts. Jika kod baharu mahu
beroperasi hanya pada ops di peringkat atas subrutin, bukannya sepanjang
struktur, mungkin lebih mudah untuk membungkus cangkuk "PL_peepp".

peep_t PL_rpeepp

PL_sv_no
Ini adalah SV "palsu". Lihat "PL_sv_yes". Sentiasa rujuk ini sebagai &PL_sv_no.

SV PL_sv_no

PL_sv_undef
Ini ialah SV "undef". Sentiasa rujuk ini sebagai &PL_sv_undef.

SV PL_sv_undef

PL_sv_ya
Ini adalah SV "sebenar". Lihat "PL_sv_no". Sentiasa rujuk ini sebagai &PL_sv_yes.

SV PL_sv_yes

REGEXP Fungsi


Makro Kemudahan SvRX untuk mendapatkan REGEXP daripada SV. Ini lebih kurang setara
kepada coretan berikut:

jika (SvMAGICAL(sv))
mg_get(sv);
jika (SvROK(sv))
sv = MUTABLE_SV(SvRV(sv));
jika (SvTYPE(sv) == SVt_REGEXP)
kembali (REGEXP*) sv;

NULL akan dikembalikan jika REGEXP* tidak ditemui.

REGEXP * SvRX(SV *sv)

SvRXOK Mengembalikan boolean yang menunjukkan sama ada SV (atau yang dirujuknya) ialah
REGEXP.

Jika anda ingin melakukan sesuatu dengan REGEXP* kemudian gunakan SvRX dan semak
BULAN.

bool SvRXOK(SV* sv)

Menumpukkan Manipulasi Makro


dMARK Isytiharkan pembolehubah penanda tindanan, "tanda", untuk XSUB. Lihat "TANDA" dan
"dORIGMARK".

dMARK;

dORIGMARK
Menyimpan tanda tindanan asal untuk XSUB. Lihat "ORIGMARK".

dORIGMARK;

dSP Mengisytiharkan salinan tempatan penuding tindanan perl untuk XSUB, tersedia melalui "SP"
makro. Lihat "SP".

dSP;

EXTEND Digunakan untuk melanjutkan timbunan argumen untuk nilai pulangan XSUB. Setelah digunakan,
menjamin bahawa terdapat ruang untuk sekurang-kurangnya "nitem" untuk ditolak ke dalam timbunan.

batal EXTEND(SP, SSize_t nitems)

MARK Pembolehubah penanda tindanan untuk XSUB. Lihat "dMARK".

mPUSHi Tolak integer ke tindanan. Tindanan mesti mempunyai ruang untuk elemen ini. Adakah
tidak menggunakan "TARG". Lihat juga "PUSHi", "mXPUSHi" dan "XPUSHi".

kosongkan mPUSHi(IV iv)

mPUSHn Tolak dua kali ganda pada tindanan. Tindanan mesti mempunyai ruang untuk elemen ini. Adakah
tidak menggunakan "TARG". Lihat juga "PUSHn", "mXPUSHn" dan "XPUSHn".

batal mPUSHn(NV nv)

mPUSHp Tolak rentetan pada tindanan. Tindanan mesti mempunyai ruang untuk elemen ini. The
"len" menunjukkan panjang rentetan. Tidak menggunakan "TARG". Lihat juga "PUSHp",
"mXPUSHp" dan "XPUSHp".

batal mPUSHp(char* str, STRLEN len)

mPUSHs Tolak SV ke tindanan dan mematikan SV. Timbunan mesti mempunyai ruang untuk
unsur ini. Tidak menggunakan "TARG". Lihat juga "PUSHs" dan "mXPUSHs".

kosongkan mPUSH(SV* sv)

mPUSHu Tolak integer yang tidak ditandatangani pada tindanan. Timbunan mesti mempunyai ruang untuk ini
unsur. Tidak menggunakan "TARG". Lihat juga "PUSHu", "mXPUSHu" dan "XPUSHu".

kosongkan mPUSHu(UV uv)

mXPUSHi Tolak integer ke tindanan, panjangkan tindanan jika perlu. tidak menggunakan
"TARG". Lihat juga "XPUSHi", "mPUSHi" dan "PUSHi".

batal mXPUSHi(IV iv)

mXPUSHn Tolak dua kali ganda pada tindanan, panjangkan tindanan jika perlu. tidak menggunakan
"TARG". Lihat juga "XPUSHn", "mPUSHn" dan "PUSHn".

batal mXPUSHn(NV nv)

mXPUSHp Tolak rentetan pada tindanan, panjangkan tindanan jika perlu. "len"
menunjukkan panjang tali. Tidak menggunakan "TARG". Lihat juga "XPUSHp",
"mPUSHp" dan "PUSHp".

batal mXPUSHp(char* str, STRLEN len)

mXPUSHs Tolak SV ke dalam tindanan, memanjangkan tindanan jika perlu dan mematikan SV.
Tidak menggunakan "TARG". Lihat juga "XPUSH" dan "mPUSH".

batalkan mXPUSHs(SV* sv)

mXPUSHu Tolak integer yang tidak ditandatangani pada tindanan, panjangkan tindanan jika perlu. Adakah
tidak menggunakan "TARG". Lihat juga "XPUSHu", "mPUSHu" dan "PUSHu".

batal mXPUSHu(UV uv)

ORIGMARK
Tanda tindanan asal untuk XSUB. Lihat "dORIGMARK".

POPi Menimbulkan integer daripada timbunan.

IV POPi

POPl Muncul lama dari timbunan.

POPl panjang

POPn Menimbulkan dua kali ganda daripada timbunan.

NV POPn

POPp Menimbulkan rentetan daripada timbunan.

char* POPp

POPpbytex
Menimbulkan rentetan daripada timbunan yang mesti terdiri daripada bait iaitu aksara < 256.

char* POPpbytex

POPpx Menimbulkan rentetan daripada timbunan. Sama dengan POPp. Terdapat dua nama untuk
sebab sejarah.

char* POPpx

POP Mengeluarkan SV daripada timbunan.

SV* POP

PUSHi Tolak integer ke tindanan. Tindanan mesti mempunyai ruang untuk elemen ini.
Mengendalikan sihir 'set'. Menggunakan "TARG", jadi "dTARGET" atau "dXSTARG" harus dipanggil
mengisytiharkannya. Jangan panggil berbilang makro berorientasikan "TARG" untuk mengembalikan senarai
XSUB's - lihat "mPUSHi" sebaliknya. Lihat juga "XPUSHi" dan "mXPUSHi".

batal PUSHi(IV iv)

TANDA TEKAN
Membuka kurungan untuk hujah pada panggilan balik. Lihat "PUTBACK" dan perlcall.

batal PUSHMARK(SP)

PUSHmortal
Tolak SV fana baharu pada timbunan. Tindanan mesti mempunyai ruang untuk elemen ini.
Tidak menggunakan "TARG". Lihat juga "PUSHs", "XPUSHmortal" dan "XPUSHs".

batal PUSHmortal()

PUSHn Tolak dua kali ganda pada tindanan. Tindanan mesti mempunyai ruang untuk elemen ini. Mengendalikan
'set' sihir. Menggunakan "TARG", jadi "dTARGET" atau "dXSTARG" harus dipanggil untuk mengisytiharkan
ia. Jangan panggil berbilang makro berorientasikan "TARG" untuk mengembalikan senarai daripada XSUB - lihat
"mPUSHn" sebaliknya. Lihat juga "XPUSHn" dan "mXPUSHn".

batal PUSHn(NV nv)

PUSHp Tolak tali pada tindanan. Tindanan mesti mempunyai ruang untuk elemen ini. The
"len" menunjukkan panjang rentetan. Mengendalikan sihir 'set'. Menggunakan "TARG", jadi
"dTARGET" atau "dXSTARG" harus dipanggil untuk mengisytiharkannya. Jangan panggil berbilang
Makro berorientasikan "TARG" untuk mengembalikan senarai daripada XSUB - lihat "mPUSHp" sebaliknya. Lihat
juga "XPUSHp" dan "mXPUSHp".

batal PUSHp(char* str, STRLEN len)

TEKAN Tolak SV ke tindanan. Tindanan mesti mempunyai ruang untuk elemen ini. Tidak
mengendalikan sihir 'set'. Tidak menggunakan "TARG". Lihat juga "PUSHmortal", "XPUSHs" dan
"XPUSHmortal".

batal TEKAN(SV* sv)

PUSHu Tolak integer yang tidak ditandatangani pada tindanan. Timbunan mesti mempunyai ruang untuk ini
unsur. Mengendalikan sihir 'set'. Menggunakan "TARG", jadi "dTARGET" atau "dXSTARG" sepatutnya
dipanggil untuk mengisytiharkannya. Jangan panggil berbilang makro berorientasikan "TARG" untuk mengembalikan senarai
daripada XSUB - lihat "mPUSHu" sebaliknya. Lihat juga "XPUSHu" dan "mXPUSHu".

batal PUSHu(UV uv)

PUTBACK Kurungan penutup untuk argumen XSUB. Ini biasanya dikendalikan oleh "xsubpp". Lihat
"PUSHMARK" dan perlcall untuk kegunaan lain.

LETAK BALIK;

Penunjuk Timbunan SP. Ini biasanya dikendalikan oleh "xsubpp". Lihat "dSP" dan "SPAGAIN".

SPAGAIN Ambil semula penuding tindanan. Digunakan selepas panggilan balik. Lihat perlcall.

SEPANYOL;

XPUSHi Tolak integer ke tindanan, panjangkan tindanan jika perlu. Pemegang 'set'
sihir. Menggunakan "TARG", jadi "dTARGET" atau "dXSTARG" harus dipanggil untuk mengisytiharkannya. buat
tidak memanggil berbilang makro berorientasikan "TARG" untuk mengembalikan senarai daripada XSUB - lihat
"mXPUSHi" sebaliknya. Lihat juga "PUSHi" dan "mPUSHi".

batal XPUSHi(IV iv)

XPUSHmortal
Tolak SV fana baharu ke dalam tindanan, panjangkan tindanan jika perlu. Tidak
gunakan "TARG". Lihat juga "XPUSHs", "PUSHmortal" dan "PUSHs".

batal XPUSHmortal()

XPUSHn Tolak dua kali ganda pada tindanan, panjangkan tindanan jika perlu. Pemegang 'set'
sihir. Menggunakan "TARG", jadi "dTARGET" atau "dXSTARG" harus dipanggil untuk mengisytiharkannya. buat
tidak memanggil berbilang makro berorientasikan "TARG" untuk mengembalikan senarai daripada XSUB - lihat
"mXPUSHn" sebaliknya. Lihat juga "PUSHn" dan "mPUSHn".

batal XPUSHn(NV nv)

XPUSHp Tolak tali pada tindanan, panjangkan tindanan jika perlu. "len"
menunjukkan panjang tali. Mengendalikan sihir 'set'. Menggunakan "TARG", jadi
"dTARGET" atau "dXSTARG" harus dipanggil untuk mengisytiharkannya. Jangan panggil berbilang
Makro berorientasikan "TARG" untuk mengembalikan senarai daripada XSUB - lihat "mXPUSHp" sebaliknya. Lihat
juga "PUSHp" dan "mPUSHp".

batal XPUSHp(char* str, STRLEN len)

XPUSH Tolak SV ke tindanan, panjangkan tindanan jika perlu. tidak mengendalikan
'set' sihir. Tidak menggunakan "TARG". Lihat juga "XPUSHmortal", "PUSHs" dan
"PUSHmortal".

batalkan XPUSH(SV* sv)

XPUSHu Tolak integer yang tidak ditandatangani ke dalam tindanan, memanjangkan tindanan jika perlu.
Mengendalikan sihir 'set'. Menggunakan "TARG", jadi "dTARGET" atau "dXSTARG" harus dipanggil
mengisytiharkannya. Jangan panggil berbilang makro berorientasikan "TARG" untuk mengembalikan senarai
XSUB - lihat "mXPUSHu" sebaliknya. Lihat juga "PUSHu" dan "mPUSHu".

batal XPUSHu(UV uv)

XSRETURN
Kembali dari XSUB, menunjukkan bilangan item pada tindanan. Ini biasanya
dikendalikan oleh "xsubpp".

batal XSRETURN(int nitems)

XSRETURN_EMPTY
Kembalikan senarai kosong daripada XSUB dengan segera.

XSRETURN_EMPTY;

XSRETURN_IV
Kembalikan integer daripada XSUB dengan segera. Menggunakan "XST_mIV".

batal XSRETURN_IV(IV iv)

XSRETURN_NO
Kembalikan &PL_sv_no daripada XSUB dengan segera. Menggunakan "XST_mNO".

XSRETURN_NO;

XSRETURN_NV
Kembalikan dua kali ganda daripada XSUB dengan segera. Menggunakan "XST_mNV".

batal XSRETURN_NV(NV nv)

XSRETURN_PV
Kembalikan salinan rentetan daripada XSUB dengan segera. Menggunakan "XST_mPV".

batal XSRETURN_PV(char* str)

XSRETURN_UNDEF
Kembalikan &PL_sv_undef daripada XSUB dengan segera. Menggunakan "XST_mUNDEF".

XSRETURN_UNDEF;

XSRETURN_UV
Kembalikan integer daripada XSUB dengan segera. Menggunakan "XST_mUV".

batal XSRETURN_UV(IV uv)

XSRETURN_YA
Kembalikan &PL_sv_yes daripada XSUB dengan segera. Menggunakan "XST_mYES".

XSRETURN_YA;

XST_mIV Letakkan integer ke dalam kedudukan "pos" yang ditentukan pada tindanan. Nilainya ialah
disimpan dalam SV fana baru.

batal XST_mIV(int pos, IV iv)

XST_mNO Letakkan &PL_sv_no ke dalam kedudukan "pos" yang ditentukan pada tindanan.

batal XST_mNO(int pos)

XST_mNV Letakkan double ke dalam kedudukan "pos" yang ditentukan pada tindanan. Nilainya ialah
disimpan dalam SV fana baru.

batal XST_mNV(int pos, NV nv)

XST_mPV Letakkan salinan rentetan ke dalam kedudukan "pos" yang ditentukan pada tindanan. The
nilai disimpan dalam SV fana baharu.

batal XST_mPV(int pos, char* str)

XST_mUNDEF
Letakkan &PL_sv_undef ke dalam kedudukan "pos" yang ditentukan pada tindanan.

batal XST_mUNDEF(int pos)

XST_mYES
Letakkan &PL_sv_yes ke dalam kedudukan "pos" yang ditentukan pada tindanan.

batal XST_mYES(int pos)

SV Flags


svtype Enum bendera untuk jenis Perl. Ini terdapat dalam fail sv.h dalam "svtype"
enum. Uji bendera ini dengan makro "SvTYPE".

Jenis-jenisnya ialah:

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

Ini paling mudah dijelaskan dari bawah ke atas.

SVt_PVIO adalah untuk objek I/O, SVt_PVFM untuk format, SVt_PVCV untuk subrutin,
SVt_PVHV untuk cincang dan SVt_PVAV untuk tatasusunan.

Semua yang lain adalah jenis skalar, iaitu, perkara yang boleh diikat pada "$"
pembolehubah. Untuk ini, jenis dalaman kebanyakannya ortogon kepada jenis dalam
bahasa Perl.

Oleh itu, menyemak "SvTYPE(sv) < SVt_PVAV" ialah cara terbaik untuk melihat sama ada sesuatu
ialah skalar.

SVt_PVGV mewakili glob jenis. Jika !SvFAKE(sv), maka ia adalah nyata, tidak boleh dipaksa
glob jenis. Jika SvFAKE(sv), maka ia adalah skalar yang pernah digunakan oleh typeglob
ditugaskan. Menugaskan kepadanya sekali lagi akan menghalangnya daripada menjadi glob jenis. SVt_PVLV
mewakili skalar yang mewakilkan skalar lain di belakang tabir. Ia adalah
digunakan, contohnya, untuk nilai pulangan "substr" dan untuk elemen cincang dan tatasusunan terikat.
Ia boleh memegang sebarang nilai skalar, termasuk typeglob. SVt_REGEXP adalah untuk biasa
ungkapan. SVt_INVLIST adalah untuk kegunaan dalaman teras Perl sahaja.

SVt_PVMG mewakili skalar "biasa" (bukan glob jenis, ungkapan biasa atau
perwakilan). Oleh kerana kebanyakan skalar tidak memerlukan semua medan dalaman PVMG, kami
simpan memori dengan memperuntukkan struct yang lebih kecil apabila boleh. Semua jenis lain adalah
hanya bentuk SVt_PVMG yang lebih ringkas, dengan lebih sedikit medan dalaman.
SVt_NULL hanya boleh menahan undef. SVt_IV boleh menahan undef, integer atau rujukan.
(SVt_RV ialah alias untuk SVt_IV, yang wujud untuk keserasian ke belakang.) SVt_NV
boleh memegang mana-mana daripada mereka atau berganda. SVt_PV hanya boleh menahan undef atau rentetan.
SVt_PVIV ialah superset SVt_PV dan SVt_IV. SVt_PVNV adalah serupa. SVt_PVMG boleh
pegang apa sahaja yang boleh dipegang SVt_PVNV, tetapi boleh, tetapi tidak perlu, diberkati atau
ajaib.

SVt_INVLIST
Taip bendera untuk skalar. Lihat "svtype".

SVt_IV Jenis bendera untuk skalar. Lihat "svtype".

SVt_NULL
Taip bendera untuk skalar. Lihat "svtype".

Bendera jenis SVt_NV untuk skalar. Lihat "svtype".

Bendera jenis SVt_PV untuk skalar. Lihat "svtype".

SVt_PVAV
Taip bendera untuk tatasusunan. Lihat "svtype".

SVt_PVCV
Taip bendera untuk subrutin. Lihat "svtype".

SVt_PVFM
Taip bendera untuk format. Lihat "svtype".

SVt_PVGV
Taip bendera untuk typeglobs. Lihat "svtype".

SVt_PVHV
Taip bendera untuk cincang. Lihat "svtype".

SVt_PVIO
Taip bendera untuk objek I/O. Lihat "svtype".

SVt_PVIV
Taip bendera untuk skalar. Lihat "svtype".

SVt_PVLV
Taip bendera untuk skalar. Lihat "svtype".

SVt_PVMG
Taip bendera untuk skalar. Lihat "svtype".

SVt_PVNV
Taip bendera untuk skalar. Lihat "svtype".

SVt_REGEXP
Taip bendera untuk ungkapan biasa. Lihat "svtype".

SV Manipulasi Fungsi


boolSV Mengembalikan SV benar jika "b" ialah nilai benar, atau SV palsu jika "b" ialah 0.

Lihat juga "PL_sv_yes" dan "PL_sv_no".

SV * boolSV(bool b)

croak_xs_usage
Varian khusus "croak()" untuk memancarkan mesej penggunaan untuk xsubs

croak_xs_usage(cv, "eee_yow");

menyelesaikan nama pakej dan nama subrutin daripada "cv", dan kemudian memanggil
"Kuak()". Oleh itu, jika "cv" ialah &ouch::awk, ia akan memanggil "croak" sebagai:

Perl_croak(aTHX_ "Penggunaan: %"SVf"::%"SVf"(%s)", "aduh" "awk",
"eee_yow");

void croak_xs_usage(const CV *const cv,
const char *const params)

get_sv Mengembalikan SV skalar Perl yang ditentukan. "bendera" dihantar kepada "gv_fetchpv".
Jika "GV_ADD" ditetapkan dan pembolehubah Perl tidak wujud maka ia akan dibuat.
Jika "bendera" adalah sifar dan pembolehubah tidak wujud maka NULL dikembalikan.

NOTA: bentuk perl_ bagi fungsi ini tidak digunakan lagi.

SV* get_sv(const char *nama, bendera I32)

newRV_inc
Mencipta pembungkus RV untuk SV. Kiraan rujukan untuk SV asal ialah
bertambah.

SV* newRV_inc(SV* sv)

newSVpadname
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Mencipta SV baharu yang mengandungi nama pad.

SV* newSVpadname(PADNAME *pn)

newSVpvn_utf8
Mencipta SV baharu dan menyalin rentetan (yang mungkin mengandungi aksara "NUL" ("\0"))
ke dalamnya. Jika utf8 adalah benar, panggil "SvUTF8_on" pada SV baharu. Dilaksanakan sebagai a
bungkus di sekeliling "newSVpvn_flags".

SV* newSVpvn_utf8(NULLOK const char* s, STRLEN len,
U32 utf8)

SvCUR Mengembalikan panjang rentetan yang ada dalam SV. Lihat "SvLEN".

STRLEN SvCUR(SV* sv)

SvCUR_set
Tetapkan panjang semasa rentetan yang ada dalam SV. Lihat "SvCUR" dan
"SvIV_set".

batal SvCUR_set(SV* sv, STRLEN len)

SvEND Mengembalikan penuding ke tempat sejurus selepas aksara terakhir dalam rentetan iaitu
dalam SV, di mana biasanya terdapat watak "NUL" yang mengekori (walaupun Perl
skalar tidak memerlukannya dengan ketat). Lihat "SvCUR". Akses watak sebagai
*(SvEND(sv)).

Amaran: Jika "SvCUR" bersamaan dengan "SvLEN", maka "SvEND" menunjukkan kepada tidak diperuntukkan
memori.

char* SvEND(SV* sv)

SvGAMAGIC
Mengembalikan benar jika SV telah mendapat sihir atau beban berlebihan. Jika salah satu adalah benar maka
skalar ialah data aktif, dan berpotensi untuk mengembalikan nilai baharu setiap kali ia
diakses. Oleh itu anda mesti berhati-hati untuk hanya membacanya sekali bagi setiap logik pengguna
operasi dan bekerja dengan nilai yang dikembalikan itu. Jika kedua-duanya tidak benar maka skalar
nilai tidak boleh berubah melainkan ditulis kepada.

U32 SvGAMAGIC(SV* sv)

SvGROW Kembangkan penimbal aksara dalam SV supaya ia mempunyai ruang untuk yang ditunjukkan
bilangan bait (ingat untuk menyimpan ruang untuk aksara tambahan "NUL" di belakang).
Panggil "sv_grow" untuk melakukan pengembangan jika perlu. Mengembalikan penunjuk kepada
penimbal watak. SV mestilah jenis >= SVt_PV. Satu alternatif ialah menelefon
"sv_grow" jika anda tidak pasti jenis SV.

char * SvGROW(SV* sv, STRLEN len)

SvIOK Mengembalikan nilai U32 yang menunjukkan sama ada SV mengandungi integer.

U32 SvIOK(SV* sv)

SvIOKp Mengembalikan nilai U32 yang menunjukkan sama ada SV mengandungi integer. Memeriksa
swasta tetapan. Gunakan "SvIOK" sebaliknya.

U32 SvIOKp(SV* sv)

SvIOK_notUV
Mengembalikan boolean yang menunjukkan sama ada SV mengandungi integer yang ditandatangani.

bool SvIOK_notUV(SV* sv)

SvIOK_off
Menyahset status IV SV.

batalkan SvIOK_off(SV* sv)

SvIOK_on
Memberitahu SV bahawa ia adalah integer.

batal SvIOK_on(SV* sv)

SvIOK_sahaja
Memberitahu SV bahawa ia adalah integer dan melumpuhkan semua bit OK yang lain.

batal SvIOK_sahaja(SV* sv)

SvIOK_only_UV
Memberitahu SV bahawa ia adalah integer tidak bertanda dan melumpuhkan semua bit OK yang lain.

batalkan SvIOK_only_UV(SV* sv)

SvIOK_UV
Mengembalikan boolean yang menunjukkan sama ada SV mengandungi integer yang mesti ada
ditafsirkan sebagai tidak ditandatangani. Integer bukan negatif yang nilainya berada dalam julat
IV dan UV mungkin dibenderakan sebagai SvUOK atau SVIOK.

bool SvIOK_UV(SV* sv)

SvIsCOW Mengembalikan nilai U32 yang menunjukkan sama ada SV adalah Copy-On-Write (sama ada cincangan dikongsi
skalar utama, atau skalar Copy On Write penuh jika 5.9.0 dikonfigurasikan untuk COW).

U32 SvIsCOW(SV* sv)

SvIsCOW_shared_hash
Mengembalikan boolean yang menunjukkan sama ada SV ialah kunci cincang kongsi Copy-On-Write
skalar.

bool SvIsCOW_shared_hash(SV* sv)

SvIV Memaksa SV yang diberikan kepada integer dan mengembalikannya. Lihat "SvIVx" untuk versi
yang menjamin untuk menilai sv sekali sahaja.

IV SvIV(SV* sv)

SvIVX Mengembalikan nilai mentah dalam slot IV SV, tanpa semakan atau penukaran. Sahaja
gunakan apabila anda pasti SvIOK adalah benar. Lihat juga "SvIV()".

IV SvIVX(SV* sv)

SvIVx Memaksa SV yang diberikan kepada integer dan mengembalikannya. Jaminan untuk menilai "sv"
hanya sekali. Hanya gunakan ini jika "sv" ialah ungkapan dengan kesan sampingan, jika tidak
gunakan "SvIV" yang lebih cekap.

IV SvIVx(SV* sv)

SvIV_nomg
Seperti "SvIV" tetapi tidak memproses sihir.

IV SvIV_nomg(SV* sv)

SvIV_set
Tetapkan nilai penunjuk IV dalam sv kepada val. Ia adalah mungkin untuk melakukan perkara yang sama
fungsi makro ini dengan penetapan nilai kepada "SvIVX". Dengan Perls masa depan,
walau bagaimanapun, ia akan menjadi lebih cekap untuk menggunakan "SvIV_set" dan bukannya lvalue
tugasan kepada "SvIVX".

batal SvIV_set(SV* sv, IV val)

SvLEN Mengembalikan saiz penimbal rentetan dalam SV, tidak termasuk mana-mana bahagian
dikaitkan dengan "SvOOK". Lihat "SvCUR".

STRLEN SvLEN(SV* sv)

SvLEN_set
Tetapkan panjang sebenar rentetan yang ada dalam SV. Lihat "SvIV_set".

batal SvLEN_set(SV* sv, STRLEN len)

SvMAGIC_set
Tetapkan nilai penunjuk MAGIC dalam sv kepada val. Lihat "SvIV_set".

batal SvMAGIC_set(SV* sv, MAGIC* val)

SvNIOK Mengembalikan nilai U32 yang menunjukkan sama ada SV mengandungi nombor, integer atau
berganda.

U32 SvNIOK(SV* sv)

SvNIOKp Mengembalikan nilai U32 yang menunjukkan sama ada SV mengandungi nombor, integer atau
berganda. Memeriksa swasta tetapan. Gunakan "SvNIOK" sebaliknya.

U32 SvNIOKp(SV* sv)

SvNIOK_off
Menyahset status NV/IV SV.

batalkan SvNIOK_off(SV* sv)

SvNOK Mengembalikan nilai U32 yang menunjukkan sama ada SV mengandungi dua kali ganda.

U32 SvNOK(SV* sv)

SvNOKp Mengembalikan nilai U32 yang menunjukkan sama ada SV mengandungi dua kali ganda. Memeriksa
swasta tetapan. Gunakan "SvNOK" sebaliknya.

U32 SvNOKp(SV* sv)

SvNOK_off
Menyahset status NV SV.

batalkan SvNOK_off(SV* sv)

SvNOK_on
Memberitahu SV bahawa ia adalah berganda.

batal SvNOK_on(SV* sv)

SvNOK_sahaja
Memberitahu SV bahawa ia adalah berganda dan melumpuhkan semua bit OK yang lain.

batal SvNOK_sahaja(SV* sv)

SvNV Paksa SV yang diberikan kepada dua kali ganda dan kembalikannya. Lihat "SvNVx" untuk versi yang
jaminan untuk menilai sv sekali sahaja.

NV SvNV(SV* sv)

SvNVX Mengembalikan nilai mentah dalam slot NV SV, tanpa semakan atau penukaran. Sahaja
gunakan apabila anda pasti SvNOK adalah benar. Lihat juga "SvNV()".

NV SvNVX(SV* sv)

SvNVx Memaksa SV yang diberikan kepada dua kali ganda dan mengembalikannya. Jaminan untuk menilai "sv" sahaja
sekali. Hanya gunakan ini jika "sv" ialah ungkapan dengan kesan sampingan, jika tidak gunakan
lebih cekap "SvNV".

NV SvNVx(SV* sv)

SvNV_nomg
Seperti "SvNV" tetapi tidak memproses sihir.

NV SvNV_nomg(SV* sv)

SvNV_set
Tetapkan nilai penunjuk NV dalam sv kepada val. Lihat "SvIV_set".

batal SvNV_set(SV* sv, NV val)

SvOK Mengembalikan nilai U32 yang menunjukkan sama ada nilai itu ditakrifkan. Ini sahaja
bermakna untuk skalar.

U32 SvOK(SV* sv)

SvOOK Mengembalikan U32 yang menunjukkan sama ada penuding kepada penimbal rentetan diimbangi. ini
hack digunakan secara dalaman untuk mempercepatkan penyingkiran aksara dari permulaan a
SvPV. Apabila SvOOK adalah benar, maka permulaan penimbal rentetan yang diperuntukkan ialah
sebenarnya "SvOOK_offset()" bait sebelum SvPVX. Offset ini pernah disimpan dalam
SvIVX, tetapi kini disimpan dalam bahagian ganti penimbal.

U32 SvOOK(SV* sv)

SvOOK_offset
Membaca ke dalam len offset daripada SvPVX kembali kepada permulaan sebenar yang diperuntukkan
penimbal, yang akan menjadi bukan sifar jika "sv_chop" telah digunakan untuk mengalih keluar dengan cekap
aksara dari permulaan penimbal. Dilaksanakan sebagai makro, yang mengambil
alamat daripada len, yang mestilah jenis "STRLEN". Menilai sv lebih dari sekali.
Set len kepada 0 jika "SvOOK(sv)" adalah palsu.

batal SvOOK_offset(NN SV*sv, STRLEN len)

SvPOK Mengembalikan nilai U32 yang menunjukkan sama ada SV mengandungi rentetan aksara.

U32 SvPOK(SV* sv)

SvPOKp Mengembalikan nilai U32 yang menunjukkan sama ada SV mengandungi rentetan aksara. Cek
yang swasta tetapan. Gunakan "SvPOK" sebaliknya.

U32 SvPOKp(SV* sv)

SvPOK_off
Menyahset status PV SV.

batalkan SvPOK_off(SV* sv)

SvPOK_on
Memberitahu SV bahawa ia adalah rentetan.

batal SvPOK_on(SV* sv)

SvPOK_sahaja
Memberitahu SV bahawa ia adalah rentetan dan melumpuhkan semua bit OK yang lain. Juga akan berpaling
di luar status UTF-8.

batal SvPOK_sahaja(SV* sv)

SvPOK_only_UTF8
Memberitahu SV bahawa ia adalah rentetan dan melumpuhkan semua bit OK yang lain, dan meninggalkan
Status UTF-8 seperti dahulu.

batal SvPOK_only_UTF8(SV* sv)

SvPV Mengembalikan penuding kepada rentetan dalam SV, atau bentuk SV bertali jika
SV tidak mengandungi rentetan. SV mungkin cache versi bergaris menjadi
"SvPOK". Mengendalikan sihir 'dapat'. Pembolehubah "len" akan ditetapkan kepada panjang
rentetan (ini adalah makro, jadi jangan gunakan &len). Lihat juga "SvPVx" untuk versi
yang menjamin untuk menilai sv sekali sahaja.

Ambil perhatian bahawa tiada jaminan bahawa nilai pulangan "SvPV()" adalah sama dengan
"SvPVX(sv)", atau "SvPVX(sv)" itu mengandungi data yang sah, atau panggilan berturut-turut ke
"SvPV(sv)" akan mengembalikan nilai penunjuk yang sama setiap kali. Ini disebabkan oleh cara
bahawa perkara seperti terlebih muatan dan Salin-Tulis dikendalikan. Dalam kes ini,
nilai pulangan mungkin menunjuk kepada penimbal sementara atau serupa. Jika anda benar-benar memerlukan
medan SvPVX adalah sah (contohnya, jika anda berhasrat untuk menulis kepadanya), kemudian lihat
"SvPV_force".

char* SvPV(SV* sv, STRLEN len)

SvPVbyte
Seperti "SvPV", tetapi menukar perwakilan sv kepada bait dahulu jika perlu.

char* SvPVbyte(SV* sv, STRLEN len)

SvPVbytex
Seperti "SvPV", tetapi menukar perwakilan sv kepada bait dahulu jika perlu.
Jaminan untuk menilai sv sekali sahaja; gunakan "SvPVbyte" yang lebih cekap sebaliknya.

char* SvPVbytex(SV* sv, STRLEN len)

SvPVbytex_force
Seperti "SvPV_force", tetapi menukar perwakilan sv kepada bait dahulu jika perlu.
Jaminan untuk menilai sv sekali sahaja; gunakan "SvPVbyte_force" yang lebih cekap
sebaliknya.

char* SvPVbytex_force(SV* sv, STRLEN len)

SvPVbyte_force
Seperti "SvPV_force", tetapi menukar perwakilan sv kepada bait dahulu jika perlu.

char* SvPVbyte_force(SV* sv, STRLEN len)

SvPVbyte_nolen
Seperti "SvPV_nolen", tetapi menukar perwakilan sv kepada bait dahulu jika perlu.

char* SvPVbyte_nolen(SV* sv)

SvPVutf8
Seperti "SvPV", tetapi menukar sv kepada utf8 dahulu jika perlu.

char* SvPVutf8(SV* sv, STRLEN len)

SvPVutf8x
Seperti "SvPV", tetapi menukar sv kepada utf8 dahulu jika perlu. Jaminan untuk dinilai
sv sekali sahaja; gunakan "SvPVutf8" yang lebih cekap sebaliknya.

char* SvPVutf8x(SV* sv, STRLEN len)

SvPVutf8x_force
Seperti "SvPV_force", tetapi menukar sv kepada utf8 dahulu jika perlu. Menjamin kepada
menilai sv sekali sahaja; gunakan "SvPVutf8_force" yang lebih cekap sebaliknya.

char* SvPVutf8x_force(SV* sv, STRLEN len)

SvPVutf8_force
Seperti "SvPV_force", tetapi menukar sv kepada utf8 dahulu jika perlu.

char* SvPVutf8_force(SV* sv, STRLEN len)

SvPVutf8_nolen
Seperti "SvPV_nolen", tetapi tukar sv kepada utf8 dahulu jika perlu.

char* SvPVutf8_nolen(SV* sv)

SvPVX Mengembalikan penuding kepada rentetan fizikal dalam SV. SV mesti mengandungi rentetan.
Sebelum 5.9.3 adalah tidak selamat untuk melaksanakan makro ini melainkan jenis SV >=
SVt_PV.

Ini juga digunakan untuk menyimpan nama subrutin yang dimuatkan secara automatik dalam AUTOLOAD XS
rutin. Lihat "Automuat dengan XSUB" dalam perlguts.

char* SvPVX(SV* sv)

SvPVx Versi "SvPV" yang menjamin untuk menilai "sv" sekali sahaja. Hanya gunakan ini jika
"sv" ialah ungkapan dengan kesan sampingan, jika tidak gunakan "SvPV" yang lebih cekap.

char* SvPVx(SV* sv, STRLEN len)

SvPV_force
Seperti "SvPV" tetapi akan memaksa SV mengandungi rentetan ("SvPOK"), dan hanya
rentetan ("SvPOK_only"), dengan cangkuk atau dengan crook. Anda memerlukan kekerasan jika anda mahu
kemas kini "SvPVX" secara langsung. Proses mendapat sihir.

Ambil perhatian bahawa pemaksaan skalar sewenang-wenang ke dalam PV biasa berpotensi akan dilucutkan
data berguna daripadanya. Contohnya jika SV ialah "SvROK", maka rujukan akan
mempunyai kiraan rujukannya dikurangkan, dan SV itu sendiri boleh ditukar kepada a
Skalar "SvPOK" dengan penimbal rentetan yang mengandungi nilai seperti "SELAMAT(0x1234)".

char* SvPV_force(SV* sv, STRLEN len)

SvPV_force_nomg
Seperti "SvPV_force", tetapi tidak memproses mendapatkan sihir.

char* SvPV_force_nomg(SV* sv, STRLEN len)

SvPV_nolen
Seperti "SvPV" tetapi tidak menetapkan pembolehubah panjang.

char* SvPV_nolen(SV* sv)

SvPV_nomg
Seperti "SvPV" tetapi tidak memproses sihir.

char* SvPV_nomg(SV* sv, STRLEN len)

SvPV_nomg_nolen
Seperti "SvPV_nolen" tetapi tidak memproses sihir.

char* SvPV_nomg_nolen(SV* sv)

SvPV_set
Ini mungkin bukan yang anda mahu gunakan, anda mungkin mahu "sv_usepvn_flags"
atau "sv_setpvn" atau "sv_setpvs".

Tetapkan nilai penuding PV dalam "sv" kepada Perl yang diperuntukkan "NUL" -ditamatkan
rentetan "val". Lihat juga "SvIV_set".

Ingat untuk membebaskan penimbal PV sebelumnya. Terdapat banyak perkara untuk diperiksa. Awas
bahawa penunjuk sedia ada mungkin terlibat dalam salin-tulis atau kerosakan lain, jadi
lakukan "SvOOK_off(sv)" dan gunakan "sv_force_normal" atau "SvPV_force" (atau semak SvIsCOW
flag) terlebih dahulu untuk memastikan pengubahsuaian ini selamat. Kemudian akhirnya, jika ia bukan a
COW, panggil "SvPV_free" untuk membebaskan penimbal PV sebelumnya.

batal SvPV_set(SV* sv, char* val)

SvREFCNT
Mengembalikan nilai kiraan rujukan objek.

U32 SvREFCNT(SV* sv)

SvREFCNT_dec
Mengurangkan kiraan rujukan SV yang diberikan. sv mungkin NULL.

batal SvREFCNT_dec(SV* sv)

SvREFCNT_dec_NN
Sama seperti SvREFCNT_dec, tetapi hanya boleh digunakan jika anda tahu sv bukan NULL. Sejak kami
tidak perlu menyemak NULLness, ia lebih cepat dan lebih kecil.

batal SvREFCNT_dec_NN(SV* sv)

SvREFCNT_inc
Menambahkan kiraan rujukan SV yang diberikan, mengembalikan SV.

Semua makro SvREFCNT_inc* berikut ialah versi SvREFCNT_inc yang dioptimumkan,
dan boleh digantikan dengan SvREFCNT_inc.

SV* SvREFCNT_inc(SV* sv)

SvREFCNT_inc_NN
Sama seperti SvREFCNT_inc, tetapi hanya boleh digunakan jika anda tahu sv bukan NULL. Sejak kami
tidak perlu menyemak NULLness, ia lebih cepat dan lebih kecil.

SV* SvREFCNT_inc_NN(SV* sv)

SvREFCNT_inc_simple
Sama seperti SvREFCNT_inc, tetapi hanya boleh digunakan dengan ungkapan tanpa kesan sampingan.
Oleh kerana kita tidak perlu menyimpan nilai sementara, ia lebih pantas.

SV* SvREFCNT_inc_simple(SV* sv)

SvREFCNT_inc_simple_NN
Sama seperti SvREFCNT_inc_simple, tetapi hanya boleh digunakan jika anda tahu sv bukan NULL.
Oleh kerana kita tidak perlu menyemak NULLness, ia lebih cepat dan lebih kecil.

SV* SvREFCNT_inc_simple_NN(SV* sv)

SvREFCNT_inc_simple_void
Sama seperti SvREFCNT_inc_simple, tetapi hanya boleh digunakan jika anda tidak memerlukan pulangan
nilai. Makro tidak perlu mengembalikan nilai yang bermakna.

batal SvREFCNT_inc_simple_void(SV* sv)

SvREFCNT_inc_simple_void_NN
Sama seperti SvREFCNT_inc, tetapi hanya boleh digunakan jika anda tidak memerlukan nilai pulangan dan
anda tahu bahawa sv bukan NULL. Makro tidak perlu mengembalikan yang bermakna
nilai, atau semak NULLness, jadi ia lebih kecil dan lebih pantas.

batal SvREFCNT_inc_simple_void_NN(SV* sv)

SvREFCNT_inc_void
Sama seperti SvREFCNT_inc, tetapi hanya boleh digunakan jika anda tidak memerlukan nilai pulangan.
Makro tidak perlu mengembalikan nilai yang bermakna.

batal SvREFCNT_inc_void(SV* sv)

SvREFCNT_inc_void_NN
Sama seperti SvREFCNT_inc, tetapi hanya boleh digunakan jika anda tidak memerlukan nilai pulangan dan
anda tahu bahawa sv bukan NULL. Makro tidak perlu mengembalikan yang bermakna
nilai, atau semak NULLness, jadi ia lebih kecil dan lebih pantas.

batal SvREFCNT_inc_void_NN(SV* sv)

SvROK Menguji jika SV ialah RV.

U32 SvROK(SV* sv)

SvROK_off
Menyahset status RV SV.

batalkan SvROK_off(SV* sv)

SvROK_on
Memberitahu SV bahawa ia adalah RV.

batal SvROK_on(SV* sv)

SvRV Menyahrujuk RV untuk mengembalikan SV.

SV* SvRV(SV* sv)

SvRV_set
Tetapkan nilai penunjuk RV dalam sv kepada val. Lihat "SvIV_set".

batal SvRV_set(SV* sv, SV* val)

SvSTASH Mengembalikan simpanan SV.

HV* SvSTASH(SV* sv)

SvSTASH_set
Tetapkan nilai penuding STASH dalam sv kepada val. Lihat "SvIV_set".

batal SvSTASH_set(SV* sv, HV* val)

SvTAINT Mencemarkan SV jika mengotorkan didayakan, dan jika beberapa input kepada ungkapan semasa
tercemar--biasanya pembolehubah, tetapi mungkin juga input tersirat seperti tempat
tetapan. "SvTAINT" menyebarkan kekotoran itu kepada output ungkapan
dengan cara pesimis; iaitu, tanpa memberi perhatian kepada yang mana
output dipengaruhi oleh input yang mana.

batal SvTAINT(SV* sv)

SvTAINTED
Semak untuk melihat sama ada SV tercemar. Mengembalikan BENAR jika ia, SALAH jika tidak.

bool SvTAINTED(SV* sv)

SvTAINTED_off
Mencemarkan SV. Jadilah sangat berhati-hati dengan rutin ini, kerana ia menyebabkan litar pintas beberapa
Ciri keselamatan asas Perl. Pengarang modul XS tidak seharusnya menggunakan ini
berfungsi melainkan mereka memahami sepenuhnya semua implikasi tanpa syarat
tidak mencemarkan nilai. Untainting harus dilakukan dalam fesyen perl standard, melalui
regexp yang dibuat dengan teliti, bukannya pembolehubah yang tidak mengotori secara langsung.

batalkan SvTAINTED_off(SV* sv)

SvTAINTED_on
Menandai SV sebagai tercemar jika mengotorkan didayakan.

batal SvTAINTED_on(SV* sv)

SvTRUE Mengembalikan boolean yang menunjukkan sama ada Perl akan menilai SV sebagai benar atau palsu.
Lihat SvOK() untuk ujian yang ditakrifkan/tidak ditentukan. Mengendalikan sihir 'dapat' melainkan skalarnya
sudah pun SvPOK, SvIOK atau SvNOK (orang awam, bukan bendera peribadi).

bool SvTRUE(SV* sv)

SvTRUE_nomg
Mengembalikan boolean yang menunjukkan sama ada Perl akan menilai SV sebagai benar atau palsu.
Lihat SvOK() untuk ujian yang ditakrifkan/tidak ditentukan. Tidak mengendalikan sihir 'dapat'.

bool SvTRUE_nomg(SV* sv)

SvTYPE Mengembalikan jenis SV. Lihat "svtype".

svtype SvTYPE(SV* sv)

SvUOK Mengembalikan boolean yang menunjukkan sama ada SV mengandungi integer yang mesti ada
ditafsirkan sebagai tidak ditandatangani. Integer bukan negatif yang nilainya berada dalam julat
IV dan UV mungkin dibenderakan sebagai SvUOK atau SVIOK.

bool SvUOK(SV* sv)

SvUPGRADE
Digunakan untuk menaik taraf SV kepada bentuk yang lebih kompleks. Menggunakan "sv_upgrade" untuk melaksanakan
naik taraf jika perlu. Lihat "svtype".

batal SvUPGRADE(SV* sv, jenis svtype)

SvUTF8 Mengembalikan nilai U32 yang menunjukkan status UTF-8 SV. Jika perkara sudah diatur
betul, ini menunjukkan sama ada SV mengandungi data berkod UTF-8 atau tidak. awak
patut guna ni selepas panggilan ke SvPV() atau salah satu variannya, sekiranya ada panggilan ke
lebihan rentetan mengemas kini bendera dalaman.

Jika anda ingin mengambil kira pragma bait, gunakan "DO_UTF8" sebaliknya.

U32 SvUTF8(SV* sv)

SvUTF8_off
Menyahset status UTF-8 SV (data tidak ditukar, hanya bendera). Jangan
guna sembrono.

batalkan SvUTF8_off(SV *sv)

SvUTF8_on
Hidupkan status UTF-8 SV (data tidak diubah, hanya bendera). buat
tidak digunakan secara sembarangan.

batalkan SvUTF8_on(SV *sv)

SvUV Memaksa SV yang diberikan kepada integer yang tidak ditandatangani dan mengembalikannya. Lihat "SvUVx" untuk a
versi yang menjamin untuk menilai sv sekali sahaja.

UV SvUV(SV* sv)

SvUVX Mengembalikan nilai mentah dalam slot UV SV, tanpa semakan atau penukaran. Sahaja
gunakan apabila anda pasti SvIOK adalah benar. Lihat juga "SvUV()".

UV SvUVX(SV* sv)

SvUVx Memaksa SV yang diberikan kepada integer yang tidak ditandatangani dan mengembalikannya. Menjamin kepada
nilai "sv" sekali sahaja. Hanya gunakan ini jika "sv" ialah ungkapan dengan sisi
kesan, jika tidak gunakan "SvUV" yang lebih cekap.

UV SvUVx(SV* sv)

SvUV_nomg
Seperti "SvUV" tetapi tidak memproses sihir.

UV SvUV_nomg(SV* sv)

SvUV_set
Tetapkan nilai penuding UV dalam sv kepada val. Lihat "SvIV_set".

batal SvUV_set(SV* sv, UV val)

SvVOK Mengembalikan boolean yang menunjukkan sama ada SV mengandungi rentetan v.

bool SvVOK(SV* sv)

sv_catpvn_nomg
Seperti "sv_catpvn" tetapi tidak memproses sihir.

batal sv_catpvn_nomg(SV* sv, const char* ptr,
STRLEN len)

sv_catpv_nomg
Seperti "sv_catpv" tetapi tidak memproses sihir.

batal sv_catpv_nomg(SV* sv, const char* ptr)

sv_catsv_nomg
Seperti "sv_catsv" tetapi tidak memproses sihir.

batal sv_catsv_nomg(SV* dsv, SV* ssv)

sv_berasal_daripada
Persis seperti "sv_derived_from_pv", tetapi tidak mengambil parameter "bendera".

bool sv_derived_from(SV* sv, const char *const name)

sv_derived_from_pv
Persis seperti "sv_derived_from_pvn", tetapi mengambil rentetan nul-terminated dan bukannya
pasangan rentetan/panjang.

bool sv_derived_from_pv(SV* sv,
const char *nama const,
bendera U32)

sv_derived_from_pvn
Mengembalikan boolean yang menunjukkan sama ada SV diperoleh daripada kelas yang ditentukan at
yang C tahap. Untuk menyemak terbitan pada peringkat Perl, panggil "isa()" sebagai Perl biasa
kaedah.

Pada masa ini, satu-satunya nilai penting untuk "bendera" ialah SVf_UTF8.

bool sv_derived_from_pvn(SV* sv,
const char *nama const,
const STRLEN len, bendera U32)

sv_derived_from_sv
Persis seperti "sv_derived_from_pvn", tetapi mengambil rentetan nama dalam bentuk SV
bukannya pasangan rentetan/panjang.

bool sv_derived_from_sv(SV* sv, SV *namesv,
bendera U32)

sv_does Suka "sv_does_pv", tetapi tidak mengambil parameter "flags".

bool sv_does(SV* sv, const char *const name)

sv_does_pv
Seperti "sv_does_sv", tetapi mengambil rentetan nul-terminated dan bukannya SV.

bool sv_does_pv(SV* sv, const char *const name,
bendera U32)

sv_does_pvn
Seperti "sv_does_sv", tetapi mengambil pasangan rentetan/panjang dan bukannya SV.

bool sv_does_pvn(SV* sv, const char *const name,
const STRLEN len, bendera U32)

sv_does_sv
Mengembalikan boolean yang menunjukkan sama ada SV melaksanakan peranan yang dinamakan khusus. The
SV boleh menjadi objek Perl atau nama kelas Perl.

bool sv_does_sv(SV* sv, SV* namesv, bendera U32)

sv_report_used
Buang kandungan semua SV yang belum dibebaskan (bantuan nyahpepijat).

batal sv_report_used()

sv_setsv_nomg
Seperti "sv_setsv" tetapi tidak memproses sihir.

batal sv_setsv_nomg(SV* dsv, SV* ssv)

sv_utf8_upgrade_nomg
Seperti sv_utf8_upgrade, tetapi tidak melakukan sihir pada "sv".

STRLEN sv_utf8_upgrade_nomg(NN SV *sv)

SV-Badan Peruntukan


nombor_seperti_rupa
Uji sama ada kandungan SV kelihatan seperti nombor (atau ialah nombor). "Inf" dan
"Infiniti" dianggap sebagai nombor (jadi tidak akan mengeluarkan amaran bukan angka), malah
sekiranya anda atof() tidak mengomel mereka. Get-magic diabaikan.

I32 look_like_number(SV *const sv)

newRV_noinc
Mencipta pembungkus RV untuk SV. Kiraan rujukan untuk SV asal ialah tidak
bertambah.

SV* newRV_noinc(SV *const tmpRef)

newSV Mencipta SV baharu. Parameter "len" bukan sifar menunjukkan bilangan bait bagi
ruang rentetan praperuntukan yang sepatutnya ada pada SV. Bait tambahan untuk "NUL" yang tertinggal
juga dikhaskan. (SvPOK tidak ditetapkan untuk SV walaupun ruang rentetan adalah
diperuntukkan.) Kiraan rujukan untuk SV baharu ditetapkan kepada 1.

Dalam 5.9.3, newSV() menggantikan yang lebih tua NEWSV() API, dan menjatuhkan parameter pertama,
x, bantuan nyahpepijat yang membenarkan pemanggil mengenal pasti diri mereka. Bantuan ini telah
digantikan dengan pilihan binaan baharu, PERL_MEM_LOG (lihat "PERL_MEM_LOG" dalam
perlhacktips). API yang lebih lama masih ada untuk digunakan dalam modul XS yang menyokong
perl yang lebih tua.

SV* newSV(const STRLEN len)

newSVhek
Mencipta SV baharu daripada struktur kunci cincang. Ia akan menjana skalar titik itu
ke jadual rentetan kongsi jika boleh. Mengembalikan SV baharu (tidak ditentukan) jika
hek adalah NULL.

SV* newSVhek(const HEK *const hek)

newSViv Mencipta SV baharu dan menyalin integer ke dalamnya. Kiraan rujukan untuk SV ialah
ditetapkan kepada 1.

SV* newSViv(const IV i)

newSVnv Mencipta SV baharu dan menyalin nilai titik terapung ke dalamnya. Kiraan rujukan
untuk SV ditetapkan kepada 1.

SV* newSVnv(const NV n)

newSVpv Mencipta SV baharu dan menyalin rentetan (yang mungkin mengandungi aksara "NUL" ("\0"))
ke dalamnya. Kiraan rujukan untuk SV ditetapkan kepada 1. Jika "len" adalah sifar, Perl akan
hitung panjang menggunakan strlen (), (yang bermaksud jika anda menggunakan pilihan ini, "s" itu
tidak boleh membenamkan aksara "NUL" dan mesti mempunyai bait "NUL" penamat).

Untuk kecekapan, pertimbangkan untuk menggunakan "newSVpvn" sebaliknya.

SV* newSVpv(const char *const s, const STRLEN len)

newSVpvf
Mencipta SV baharu dan memulakannya dengan rentetan yang diformatkan seperti "sprintf".

SV* newSVpvf(const char *const pat, ...)

newSVpvn
Mencipta SV baharu dan menyalin rentetan ke dalamnya, yang mungkin mengandungi aksara "NUL".
("\0") dan data binari lain. Kiraan rujukan untuk SV ditetapkan kepada 1. Nota
bahawa jika "len" adalah sifar, Perl akan mencipta rentetan panjang sifar (Perl). Awak
bertanggungjawab untuk memastikan bahawa penimbal sumber adalah sekurang-kurangnya "len" bait panjang. Jika
hujah "penampan" ialah NULL SV baharu tidak akan ditentukan.

SV* newSVpvn(const char *const s, const STRLEN len)

newSVpvn_flags
Mencipta SV baharu dan menyalin rentetan (yang mungkin mengandungi aksara "NUL" ("\0"))
ke dalamnya. Kiraan rujukan untuk SV ditetapkan kepada 1. Ambil perhatian bahawa jika "len" ialah sifar,
Perl akan mencipta rentetan panjang sifar. Anda bertanggungjawab untuk memastikan bahawa
rentetan sumber sekurang-kurangnya "len" bait panjang. Jika hujah "s" ialah NULL yang baharu
SV tidak akan ditentukan. Pada masa ini satu-satunya bit bendera yang diterima ialah "SVf_UTF8" dan
"SVs_TEMP". Jika "SVs_TEMP" ditetapkan, maka "sv_2mortal()" dipanggil pada hasilnya
sebelum balik. Jika "SVf_UTF8" ditetapkan, "s" dianggap berada dalam UTF-8 dan
Bendera "SVf_UTF8" akan ditetapkan pada SV baharu. "newSVpvn_utf8()" ialah kemudahan
pembungkus untuk fungsi ini, ditakrifkan sebagai

#define newSVpvn_utf8(s, len, u)
newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)

SV* newSVpvn_flags(const char *const s,
const STRLEN len,
bendera const U32)

newSVpvn_share
Mencipta SV baharu dengan SvPVX_constnya menghala ke rentetan kongsi dalam rentetan
meja. Jika rentetan belum wujud dalam jadual, ia dibuat terlebih dahulu.
Hidupkan bendera SvIsCOW (atau BACA SAHAJA dan PALSU dalam 5.16 dan lebih awal). Sekiranya
Parameter "hash" bukan sifar, nilai itu digunakan; jika tidak, cincang dikira.
Cincang rentetan kemudiannya boleh diambil daripada SV dengan "SvSHARED_HASH()"
makro. Idea di sini ialah kerana jadual rentetan digunakan untuk kunci cincang yang dikongsi
rentetan ini akan mempunyai SvPVX_const == HeKEY dan carian hash akan mengelakkan rentetan
membandingkan.

SV* newSVpvn_share(const char* s, I32 len, U32 hash)

newSVpvs
Seperti "newSVpvn", tetapi mengambil rentetan literal yang ditamatkan "NUL" dan bukannya a
pasangan rentetan/panjang.

SV* newSVpvs(const char* s)

newSVpvs_flags
Seperti "newSVpvn_flags", tetapi mengambil rentetan literal yang ditamatkan "NUL" dan bukannya a
pasangan rentetan/panjang.

SV* newSVpvs_flags(const char* s, flags U32)

newSVpvs_share
Seperti "newSVpvn_share", tetapi mengambil rentetan literal yang ditamatkan "NUL" dan bukannya a
pasangan rentetan/panjang dan meninggalkan parameter cincang.

SV* newSVpvs_share(const char* s)

newSVpv_share
Seperti "newSVpvn_share", tetapi mengambil rentetan yang ditamatkan "NUL" dan bukannya a
pasangan rentetan/panjang.

SV* newSVpv_share(const char* s, hash U32)

newSVrv Mencipta SV baharu untuk RV sedia ada, "rv", untuk ditunjukkan. Jika "rv" bukan RV
maka ia akan dinaik taraf kepada satu. Jika "nama kelas" bukan nol maka SV baharu akan
diberkati dalam pakej yang ditetapkan. SV baharu dikembalikan dan rujukannya
kiraan ialah 1. Kiraan rujukan 1 dimiliki oleh "rv".

SV* newSVrv(SV *const rv,
const char *const nama kelas)

newSVsv Mencipta SV baharu yang merupakan pendua tepat SV asal. (Kegunaan
"sv_setsv".)

SV* newSVsv(SV *const lama)

newSVuv Mencipta SV baharu dan menyalin integer yang tidak ditandatangani ke dalamnya. Kiraan rujukan untuk
SV ditetapkan kepada 1.

SV* newSVuv(const UV u)

newSV_type
Mencipta SV baharu, daripada jenis yang ditentukan. Kiraan rujukan untuk SV baharu ialah
ditetapkan kepada 1.

SV* newSV_type(const svtype type)

sv_2bool
Makro ini hanya digunakan oleh sv_true() atau setara makronya, dan hanya jika
hujah terakhir bukanlah SvPOK, SvIOK mahupun SvNOK. Ia memanggil sv_2bool_flags dengan
bendera SV_GMAGIC.

bool sv_2bool(SV *const sv)

sv_2bool_flags
Fungsi ini hanya digunakan oleh sv_true() dan rakan-rakan, dan hanya jika yang terakhir
hujah bukanlah SvPOK, SvIOK mahupun SvNOK. Jika bendera mengandungi SV_GMAGIC, maka
ia melakukan satu mg_get() dahulu.

bool sv_2bool_flags(SV *sv, bendera I32)

sv_2cv Menggunakan pelbagai permainan, cuba dapatkan CV daripada SV; di samping itu, cuba jika boleh
tetapkan *st dan *gvp kepada simpanan dan GV yang dikaitkan dengannya. Bendera dalam "lref" ialah
diserahkan kepada gv_fetchsv.

CV* sv_2cv(SV* sv, HV **const st, GV **const gvp,
const I32 lref)

sv_2io Menggunakan pelbagai permainan, cuba dapatkan IO daripada SV: slot IO jika ia GV; atau
hasil rekursif jika kita RV; atau slot IO bagi simbol yang dinamakan sempena
PV jika kita rentetan.

Sihir 'Dapatkan' diabaikan pada sv yang diluluskan, tetapi akan dipanggil pada "SvRV(sv)" jika sv
ialah RV.

IO* sv_2io(SV *const sv)

sv_2iv_flags
Kembalikan nilai integer SV, melakukan sebarang penukaran rentetan yang diperlukan. Jika
bendera termasuk SV_GMAGIC, tidak mg_get() pertama. Biasanya digunakan melalui
Makro "SvIV(sv)" dan "SvIVx(sv)".

IV sv_2iv_flags(SV *const sv, const I32 flags)

sv_2mortal
Menandai SV sedia ada sebagai fana. SV akan dimusnahkan "tidak lama lagi", sama ada oleh an
panggilan eksplisit ke FREETMPS, atau melalui panggilan tersirat di tempat seperti kenyataan
sempadan. SvTEMP() dihidupkan yang bermaksud penimbal rentetan SV boleh
"dicuri" jika SV ini disalin. Lihat juga "sv_newmortal" dan "sv_mortalcopy".

SV* sv_2mortal(SV *const sv)

sv_2nv_flags
Kembalikan nilai num SV, melakukan sebarang penukaran rentetan atau integer yang diperlukan.
Jika bendera termasuk SV_GMAGIC, adakah satu mg_get() pertama. Biasanya digunakan melalui
Makro "SvNV(sv)" dan "SvNVx(sv)".

NV sv_2nv_flags(SV *const sv, const I32 flags)

sv_2pvbyte
Kembalikan penuding kepada perwakilan SV yang dikodkan bait dan tetapkan *lp padanya
panjang. Boleh menyebabkan SV diturunkan daripada UTF-8 sebagai kesan sampingan.

Biasanya diakses melalui makro "SvPVbyte".

char* sv_2pvbyte(SV *sv, STRLEN *const lp)

sv_2pvutf8
Kembalikan penuding kepada perwakilan SV yang dikodkan UTF-8 dan tetapkan *lp padanya
panjang. Boleh menyebabkan SV dinaik taraf kepada UTF-8 sebagai kesan sampingan.

Biasanya diakses melalui makro "SvPVutf8".

char* sv_2pvutf8(SV *sv, STRLEN *const lp)

sv_2pv_flags
Mengembalikan penuding kepada nilai rentetan SV dan menetapkan *lp kepada panjangnya. Jika
bendera termasuk SV_GMAGIC, tidak mg_get() pertama. Memaksa sv kepada rentetan jika
perlu. Biasanya dipanggil melalui makro "SvPV_flags". "sv_2pv()" dan
"sv_2pv_nomg" biasanya berakhir di sini juga.

char* sv_2pv_flags(SV *const sv, STRLEN *const lp,
bendera const I32)

sv_2uv_flags
Kembalikan nilai integer yang tidak ditandatangani bagi SV, melakukan sebarang penukaran rentetan yang diperlukan.
Jika bendera termasuk SV_GMAGIC, adakah satu mg_get() pertama. Biasanya digunakan melalui
Makro "SvUV(sv)" dan "SvUVx(sv)".

UV sv_2uv_flags(SV *const sv, const I32 flags)

sv_backoff
Alih keluar sebarang rentetan offset. Anda biasanya harus menggunakan pembalut makro "SvOOK_off".
sebaliknya.

int sv_backoff(SV *const sv)

sv_bless
Memberkati SV ke dalam pakej tertentu. SV mestilah RV. Pakej mesti
ditetapkan oleh simpanannya (lihat "gv_stashpv()"). Kiraan rujukan SV ialah
tidak terjejas.

SV* sv_bless(SV *const sv, HV *const stash)

sv_catpv
Menggabungkan rentetan yang ditamatkan "NUL" pada hujung rentetan yang berada di dalam
SV itu. Jika SV mempunyai status UTF-8 yang ditetapkan, maka bait yang dilampirkan sepatutnya
UTF-8 yang sah. Mengendalikan sihir 'dapat', tetapi bukan sihir 'set'. Lihat "sv_catpv_mg".

void sv_catpv(SV *const sv, const char* ptr)

sv_catpvf
Memproses hujahnya seperti "sprintf" dan menambahkan output yang diformatkan pada SV.
Jika data yang dilampirkan mengandungi aksara "lebar" (termasuk, tetapi tidak terhad kepada,
SV dengan PV UTF-8 yang diformatkan dengan %s dan aksara >255 diformat dengan %c),
SV asal mungkin dinaik taraf kepada UTF-8. Mengendalikan sihir 'dapat', tetapi bukan 'set'
sihir. Lihat "sv_catpvf_mg". Jika SV asal ialah UTF-8, coraknya hendaklah
UTF-8 yang sah; jika SV asal ialah bait, coraknya hendaklah juga.

void sv_catpvf(SV *const sv, const char *const pat,
...)

sv_catpvf_mg
Seperti "sv_catpvf", tetapi juga mengendalikan sihir 'set'.

batal sv_catpvf_mg(SV *const sv,
const char *const pat, ...)

sv_catpvn
Menggabungkan rentetan ke hujung rentetan yang berada dalam SV. "len"
menunjukkan bilangan bait untuk disalin. Jika SV mempunyai set status UTF-8, maka
bait yang dilampirkan mestilah sah UTF-8. Mengendalikan sihir 'dapat', tetapi bukan sihir 'set'.
Lihat "sv_catpvn_mg".

void sv_catpvn(SV *dsv, const char *sstr, STRLEN len)

sv_catpvn_flags
Menggabungkan rentetan ke hujung rentetan yang berada dalam SV. "len"
menunjukkan bilangan bait untuk disalin.

Secara lalai, rentetan yang dilampirkan diandaikan sah UTF-8 jika SV mempunyai
Set status UTF-8 dan rentetan bait sebaliknya. Seseorang boleh memaksa yang dilampirkan
rentetan untuk ditafsirkan sebagai UTF-8 dengan membekalkan bendera "SV_CATUTF8" dan sebagai bait
dengan membekalkan bendera "SV_CATBYTES"; SV atau rentetan yang dilampirkan adalah
dinaik taraf kepada UTF-8 jika perlu.

Jika "bendera" mempunyai set bit "SV_SMAGIC", akan "mg_set" pada "dsv" selepas itu jika
sesuai. "sv_catpvn" dan "sv_catpvn_nomg" dilaksanakan dari segi ini
fungsi.

batal sv_catpvn_flags(SV *const dstr,
const char *sstr,
const STRLEN len,
bendera const I32)

sv_catpvs
Seperti "sv_catpvn", tetapi mengambil rentetan literal dan bukannya pasangan rentetan/panjang.

void sv_catpvs(SV* sv, const char* s)

sv_catpvs_flags
Seperti "sv_catpvn_flags", tetapi mengambil rentetan literal yang ditamatkan "NUL" dan bukannya
pasangan rentetan/panjang.

batal sv_catpvs_flags(SV* sv, const char* s,
bendera I32)

sv_catpvs_mg
Seperti "sv_catpvn_mg", tetapi mengambil rentetan literal dan bukannya pasangan rentetan/panjang.

batal sv_catpvs_mg(SV* sv, const char* s)

sv_catpvs_nomg
Seperti "sv_catpvn_nomg", tetapi mengambil rentetan literal dan bukannya pasangan rentetan/panjang.

void sv_catpvs_nomg(SV* sv, const char* s)

sv_catpv_flags
Menggabungkan rentetan yang ditamatkan "NUL" pada hujung rentetan yang berada di dalam
SV itu. Jika SV mempunyai status UTF-8 yang ditetapkan, maka bait yang dilampirkan sepatutnya
UTF-8 yang sah. Jika "bendera" mempunyai set bit "SV_SMAGIC", akan "mg_set" pada
SV diubah suai jika sesuai.

void sv_catpv_flags(SV *dstr, const char *sstr,
bendera const I32)

sv_catpv_mg
Seperti "sv_catpv", tetapi juga mengendalikan sihir 'set'.

batal sv_catpv_mg(SV *const sv, const char *const ptr)

sv_catsv
Menggabungkan rentetan daripada SV "ssv" ke hujung rentetan dalam SV "dsv". Jika
"ssv" adalah batal, tidak melakukan apa-apa; sebaliknya hanya mengubah suai "dsv". Mengendalikan sihir 'dapat'
pada kedua-dua SV, tetapi tiada sihir 'set'. Lihat "sv_catsv_mg" dan "sv_catsv_nomg".

batal sv_catsv(SV *dstr, SV *sstr)

sv_catsv_flags
Menggabungkan rentetan daripada SV "ssv" ke hujung rentetan dalam SV "dsv". Jika
"ssv" adalah batal, tidak melakukan apa-apa; sebaliknya hanya mengubah suai "dsv". Jika "bendera" termasuk
Set bit "SV_GMAGIC", akan memanggil "mg_get" pada kedua-dua SV jika sesuai. Jika "bendera"
sertakan "SV_SMAGIC", "mg_set" akan dipanggil pada SV yang diubah suai selepas itu, jika
sesuai. "sv_catsv", "sv_catsv_nomg", dan "sv_catsv_mg" dilaksanakan dalam
syarat fungsi ini.

batal sv_catsv_flags(SV *const dsv, SV *const ssv,
bendera const I32)

sv_chop Penyingkiran aksara yang cekap dari permulaan penimbal rentetan.
SvPOK(sv), atau sekurang-kurangnya SvPOKp(sv), mestilah benar dan "ptr" mestilah penunjuk kepada
di suatu tempat di dalam penimbal rentetan. "ptr" menjadi watak pertama bagi
rentetan terlaras. Menggunakan "OOK hack". Semasa pemulangan, hanya SvPOK(sv) dan SvPOKp(sv)
antara bendera OK akan menjadi benar.

Berhati-hati: selepas fungsi ini kembali, "ptr" dan SvPVX_const(sv) mungkin tidak lagi merujuk
kepada bahagian data yang sama.

Persamaan malang nama fungsi ini dengan "cincang" Perl
operator adalah secara kebetulan. Fungsi ini berfungsi dari kiri; "cincang"
berfungsi dari kanan.

void sv_chop(SV *const sv, const char *const ptr)

sv_clear
Kosongkan SV: panggil mana-mana pemusnah, kosongkan sebarang memori yang digunakan oleh badan dan bebaskan
badan itu sendiri. Kepala SV ni tidak dibebaskan, walaupun jenisnya ditetapkan kepada semua 1
supaya ia tidak secara tidak sengaja diandaikan sebagai hidup semasa kemusnahan global
dsb. Fungsi ini hanya perlu dipanggil apabila REFCNT adalah sifar. Selalunya
anda perlu memanggil "sv_free()" (atau pembalut makronya "SvREFCNT_dec") sebaliknya.

void sv_clear(SV *const orig_sv)

sv_cmp Membandingkan rentetan dalam dua SV. Mengembalikan -1, 0, atau 1 yang menunjukkan sama ada
rentetan dalam "sv1" adalah kurang daripada, sama dengan, atau lebih besar daripada rentetan dalam "sv2". Adakah
UTF-8 dan 'menggunakan bait' sedar, mengendalikan mendapat sihir, dan akan memaksa argsnya untuk
rentetan jika perlu. Lihat juga "sv_cmp_locale".

I32 sv_cmp(SV *const sv1, SV *const sv2)

sv_cmp_flags
Membandingkan rentetan dalam dua SV. Mengembalikan -1, 0, atau 1 yang menunjukkan sama ada
rentetan dalam "sv1" adalah kurang daripada, sama dengan, atau lebih besar daripada rentetan dalam "sv2". Adakah
UTF-8 dan 'menggunakan bait' sedar dan akan memaksa hujahnya kepada rentetan jika perlu. Jika
bendera termasuk SV_GMAGIC, ia mengendalikan get magic. Lihat juga
"sv_cmp_locale_flags".

I32 sv_cmp_flags(SV *const sv1, SV *const sv2,
bendera const U32)

sv_cmp_locale
Membandingkan rentetan dalam dua SV dalam cara yang menyedari setempat. Adakah UTF-8 dan 'use
bait sedar, pemegang mendapat sihir, dan akan memaksa argsnya kepada rentetan jika perlu.
Lihat juga "sv_cmp".

I32 sv_cmp_locale(SV *const sv1, SV *const sv2)

sv_cmp_locale_flags
Membandingkan rentetan dalam dua SV dalam cara yang menyedari setempat. Adakah UTF-8 dan 'use
bytes' sedar dan akan memaksa argsnya kepada rentetan jika perlu. Jika bendera
mengandungi SV_GMAGIC, ia mengendalikan get magic. Lihat juga "sv_cmp_flags".

I32 sv_cmp_locale_flags(SV *const sv1,
SV *const sv2,
bendera const U32)

sv_collxfrm
Ini memanggil "sv_collxfrm_flags" dengan bendera SV_GMAGIC. Lihat "sv_collxfrm_flags".

char* sv_collxfrm(SV *const sv, STRLEN *const nxp)

sv_collxfrm_flags
Tambahkan keajaiban Collate Transform pada SV jika ia belum memilikinya. Jika bendera
mengandungi SV_GMAGIC, ia mengendalikan get-magic.

Mana-mana pembolehubah skalar mungkin membawa sihir PERL_MAGIC_collxfrm yang mengandungi skalar
data pembolehubah, tetapi diubah kepada format sedemikian sehingga memori biasa
perbandingan boleh digunakan untuk membandingkan data mengikut tetapan setempat.

char* sv_collxfrm_flags(SV *const sv,
STRLEN *const nxp,
bendera const I32)

sv_copypv_flags
Pelaksanaan sv_copypv dan sv_copypv_nomg. Panggilan mendapat bendera magic iff termasuk
SV_GMAGIC.

batal sv_copypv_flags(SV *const dsv, SV *const ssv,
bendera const I32)

sv_copypv_nomg
Seperti sv_copypv, tetapi tidak menggunakan get magic dahulu.

batal sv_copypv_nomg(SV *const dsv, SV *const ssv)

sv_dec Penurunan automatik nilai dalam SV, melakukan rentetan kepada penukaran berangka jika
perlu. Mengendalikan sihir 'dapat' dan operator lebih muatan.

batal sv_dec(SV *const sv)

sv_dec_nomg
Penurunan automatik nilai dalam SV, melakukan penukaran rentetan kepada angka jika
perlu. Mengendalikan lebihan beban operator. Melangkau mengendalikan sihir 'dapat'.

void sv_dec_nomg(SV *const sv)

sv_eq Mengembalikan boolean yang menunjukkan sama ada rentetan dalam dua SV adalah sama. Adakah
UTF-8 dan 'menggunakan bait' sedar, mengendalikan mendapat sihir, dan akan memaksa argsnya untuk
rentetan jika perlu.

I32 sv_eq(SV* sv1, SV* sv2)

sv_eq_flags
Mengembalikan boolean yang menunjukkan sama ada rentetan dalam dua SV adalah sama. Adakah
UTF-8 dan 'menggunakan bait' sedar dan memaksa hujahnya kepada rentetan jika perlu. Sekiranya
bendera termasuk SV_GMAGIC, ia juga mengendalikan get-magic.

I32 sv_eq_flags(SV* sv1, SV* sv2, const U32 flags)

sv_force_normal_flags
Buat asal pelbagai jenis pemalsuan pada SV, dengan pemalsuan bermaksud "lebih daripada" rentetan: jika
PV ialah rentetan kongsi, buat salinan peribadi; jika kita seorang ref, berhenti refing; jika
kami adalah glob, turun taraf kepada xpvmg; jika kita skalar copy-on-write, ini ialah
masa semasa menulis apabila kami membuat salinan, dan juga digunakan secara tempatan; jika ini adalah vstring,
lepaskan sihir vstring. Jika "SV_COW_DROP_PV" ditetapkan maka skalar salin atas tulis
menjatuhkan penimbal PVnya (jika ada) dan menjadi SvPOK_off daripada membuat salinan.
(Digunakan di mana skalar ini akan ditetapkan kepada beberapa nilai lain.) Di samping itu,
Parameter "flags" dihantar kepada "sv_unref_flags()" apabila menyahreff.
"sv_force_normal" memanggil fungsi ini dengan bendera ditetapkan kepada 0.

Fungsi ini dijangka akan digunakan untuk memberi isyarat kepada perl bahawa SV ini akan menjadi
ditulis kepada, dan sebarang simpanan buku tambahan perlu dijaga. Oleh itu, ia
croaks pada nilai baca sahaja.

batalkan sv_force_normal_flags(SV *const sv,
bendera const U32)

sv_free Kurangkan kiraan rujukan SV, dan jika ia jatuh kepada sifar, panggil "sv_clear" ke
memanggil pemusnah dan membebaskan sebarang memori yang digunakan oleh badan; akhirnya, deallocation
kepala SV sendiri. Biasanya dipanggil melalui makro pembalut "SvREFCNT_dec".

batal sv_free(SV *const sv)

sv_gets Dapatkan baris daripada pemegang fail dan simpannya ke dalam SV, secara pilihan ditambah pada
rentetan yang disimpan sekarang. Jika "tambah" bukan 0, baris itu dilampirkan pada SV
bukannya menimpanya. "tambah" hendaklah ditetapkan kepada mengimbangi bait yang
rentetan yang ditambahkan hendaklah bermula pada dalam SV (biasanya, "SvCUR(sv)" adalah sesuai
pilihan).

char* sv_gets(SV *const sv, PerlIO *const fp,
I32 lampiran)

sv_get_backrefs
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Jika sv adalah sasaran rujukan yang lemah maka ia mengembalikan rujukan belakang
struktur yang berkaitan dengan sv; sebaliknya kembalikan NULL.

Apabila mengembalikan hasil bukan nol, jenis pulangan adalah berkaitan. Jika ia adalah
AV maka unsur-unsur AV adalah RV rujukan yang lemah yang menunjuk pada ini
item. Jika ia adalah jenis lain maka item itu sendiri adalah rujukan yang lemah.

Lihat juga Perl_sv_add_backref(), Perl_sv_del_backref(), Perl_sv_kill_backrefs()

SV* sv_get_backrefs(SV *const sv)

sv_grow Mengembangkan penimbal aksara dalam SV. Jika perlu, gunakan "sv_unref" dan
menaik taraf SV kepada "SVt_PV". Mengembalikan penuding kepada penimbal aksara. Menggunakan
"SvGROW" sebaliknya.

char* sv_grow(SV *const sv, STRLEN newlen)

sv_inc Auto-kenaikan nilai dalam SV, melakukan rentetan kepada penukaran berangka jika
perlu. Mengendalikan sihir 'dapat' dan operator lebih muatan.

batal sv_inc(SV *const sv)

sv_inc_nomg
Autokenaikan nilai dalam SV, melakukan penukaran rentetan kepada angka jika
perlu. Mengendalikan lebihan beban operator. Melangkau mengendalikan sihir 'dapat'.

batal sv_inc_nomg(SV *const sv)

sv_insert
Memasukkan rentetan pada ofset/panjang yang ditentukan dalam SV. Serupa dengan
Perl substr() fungsi. Pegangan mendapat sihir.

void sv_insert(SV *const bigstr, const STRLEN offset,
const STRLEN len,
const char *const little,
const STRLEN littlelen)

sv_insert_flags
Sama seperti "sv_insert", tetapi "bendera" tambahan dihantar ke "SvPV_force_flags"
yang terpakai kepada "bigstr".

batal sv_insert_flags(SV *const bigstr,
const STRLEN offset,
const STRLEN len,
const char *const little,
const STRLEN littlelen,
bendera const U32)

sv_isa Mengembalikan boolean yang menunjukkan sama ada SV diberkati ke dalam kelas yang ditentukan.
Ini tidak menyemak subjenis; gunakan "sv_derived_from" untuk mengesahkan warisan
hubungan.

int sv_isa(SV* sv, const char *const name)

sv_isobject
Mengembalikan boolean yang menunjukkan sama ada SV ialah RV yang menunjuk ke objek yang diberkati.
Jika SV bukan RV, atau jika objek itu tidak diberkati, maka ini akan kembali
salah.

int sv_isobject(SV* sv)

sv_len Mengembalikan panjang rentetan dalam SV. Mengendalikan sihir dan paksaan jenis dan
menetapkan bendera UTF8 dengan sewajarnya. Lihat juga "SvCUR", yang memberikan akses mentah kepada
slot xpv_cur.

STRLEN sv_len(SV *const sv)

sv_len_utf8
Mengembalikan bilangan aksara dalam rentetan dalam SV, mengira UTF-8 bait lebar
sebagai satu watak. Mengendalikan sihir dan paksaan jenis.

STRLEN sv_len_utf8(SV *const sv)

sv_magic
Menambah sihir pada SV. Mula-mula naik taraf "sv" untuk menaip "SVt_PVMG" jika perlu, kemudian
menambah item ajaib baharu jenis "bagaimana" pada kepala senarai sihir.

Lihat "sv_magicext" (yang dipanggil "sv_magic" sekarang) untuk penerangan tentang pengendalian
daripada hujah "nama" dan "namlen".

Anda perlu menggunakan "sv_magicext" untuk menambah sihir pada SvREADONLY SV dan juga untuk menambah lagi
daripada satu contoh 'bagaimana' yang sama.

void sv_magic(SV *const sv, SV *const obj,
const int how, const char *const name,
const I32 namlen)

sv_magicext
Menambah sihir pada SV, menaik tarafnya jika perlu. Menggunakan vtable yang dibekalkan dan
mengembalikan penunjuk kepada sihir yang ditambahkan.

Ambil perhatian bahawa "sv_magicext" akan membenarkan perkara yang "sv_magic" tidak akan. Dalam
khususnya, anda boleh menambah sihir pada SvREADONLY SV, dan menambah lebih daripada satu contoh
sama 'bagaimana'.

Jika "namlen" lebih besar daripada sifar maka "savepvn" salinan daripada "nama" disimpan, jika
"namlen" adalah sifar kemudian "nama" disimpan seperti sedia ada dan - sebagai satu lagi kes khas - jika
"(nama && namlen == HEf_SVKEY)" kemudian "nama" diandaikan mengandungi "SV*" dan
disimpan seperti sedia ada dengan peningkatan REFCNTnya.

(Ini kini digunakan sebagai subrutin oleh "sv_magic".)

MAGIC * sv_magicext(SV *const sv, SV *const obj,
const int bagaimana,
const MGVTBL *const vtbl,
const char *nama const,
const I32 namlen)

sv_mortalcopy
Mencipta SV baharu yang merupakan salinan SV asal (menggunakan "sv_setsv"). Baru
SV ditandakan sebagai fana. Ia akan dimusnahkan "tidak lama lagi", sama ada melalui panggilan eksplisit
kepada FREETMPS, atau melalui panggilan tersirat di tempat seperti sempadan kenyataan. Lihat
juga "sv_newmortal" dan "sv_2mortal".

SV* sv_mortalcopy(SV *const oldsv)

sv_newmortal
Mencipta SV null baharu yang bersifat fana. Kiraan rujukan SV ditetapkan kepada 1.
Ia akan dimusnahkan "tidak lama lagi", sama ada melalui panggilan eksplisit ke FREETMPS, atau oleh
panggilan tersirat di tempat-tempat seperti sempadan kenyataan. Lihat juga "sv_mortalcopy"
dan "sv_2mortal".

SV* sv_newmortal()

sv_newref
Tambah kiraan rujukan SV. Gunakan pembalut "SvREFCNT_inc()" sebaliknya.

SV* sv_newref(SV *const sv)

sv_pos_b2u
Menukar nilai yang ditunjuk oleh offsetp daripada kiraan bait dari permulaan
rentetan, kepada kiraan bilangan aksara UTF-8 yang setara. Mengendalikan sihir dan
jenis paksaan.

Gunakan "sv_pos_b2u_flags" sebagai keutamaan, yang mengendalikan rentetan dengan betul lebih lama daripada
2GB.

batal sv_pos_b2u(SV *const sv, I32 *const offsetp)

sv_pos_b2u_flags
Menukar offset daripada kiraan bait dari permulaan rentetan, kepada kiraan
daripada bilangan aksara UTF-8 yang setara. Mengendalikan paksaan jenis. bendera dilalui
kepada "SvPV_flags", dan biasanya harus "SV_GMAGIC|SV_CONST_RETURN" untuk dikendalikan
silap mata.

STRLEN sv_pos_b2u_flags(SV *const sv,
STRLEN const offset, bendera U32)

sv_pos_u2b
Menukar nilai yang ditunjukkan oleh offsetp daripada kiraan aksara UTF-8 daripada
permulaan rentetan, kepada kiraan bilangan bait yang setara; jika lenp bukan
sifar, ia melakukan perkara yang sama untuk lenp, tetapi kali ini bermula dari offset, sebaliknya
daripada dari permulaan rentetan. Mengendalikan sihir dan paksaan jenis.

Gunakan "sv_pos_u2b_flags" sebagai keutamaan, yang mengendalikan rentetan dengan betul lebih lama daripada
2GB.

void sv_pos_u2b(SV *const sv, I32 *const offsetp,
I32 *const lenp)

sv_pos_u2b_flags
Menukar offset daripada kiraan aksara UTF-8 dari permulaan rentetan, kepada a
kiraan bilangan bait yang setara; jika lenp bukan sifar, ia melakukan perkara yang sama kepada
lenp, tetapi kali ini bermula dari offset, bukannya dari permulaan
tali. Mengendalikan paksaan jenis. bendera dihantar kepada "SvPV_flags", dan biasanya
hendaklah "SV_GMAGIC|SV_CONST_RETURN" untuk mengendalikan sihir.

STRLEN sv_pos_u2b_flags(SV *const sv, STRLEN uoffset,
STRLEN *const lenp, bendera U32)

sv_pvbyten_force
Bahagian belakang untuk makro "SvPVbytex_force". Sentiasa gunakan makro sebaliknya.

char* sv_pvbyten_force(SV *const sv, STRLEN *const lp)

sv_pvn_force
Dapatkan rentetan yang masuk akal daripada SV entah bagaimana. Pelaksanaan persendirian bagi
Makro "SvPV_force" untuk pengkompil yang tidak dapat mengatasi ekspresi makro yang kompleks.
Sentiasa gunakan makro sebaliknya.

char* sv_pvn_force(SV* sv, STRLEN* lp)

sv_pvn_force_flags
Dapatkan rentetan yang masuk akal daripada SV entah bagaimana. Jika "bendera" mempunyai set bit "SV_GMAGIC",
akan "mg_get" pada "sv" jika sesuai, jika tidak, tidak. "sv_pvn_force" dan
"sv_pvn_force_nomg" dilaksanakan dari segi fungsi ini. Anda biasanya mahu
untuk menggunakan pelbagai makro pembalut sebaliknya: lihat "SvPV_force" dan "SvPV_force_nomg"

char* sv_pvn_force_flags(SV *const sv,
STRLEN *const lp,
bendera const I32)

sv_pvutf8n_force
Bahagian belakang untuk makro "SvPVutf8x_force". Sentiasa gunakan makro sebaliknya.

char* sv_pvutf8n_force(SV *const sv, STRLEN *const lp)

sv_reftype
Mengembalikan rentetan yang menerangkan maksud SV sebagai rujukan.

const char* sv_reftype(const SV *const sv, const int ob)

sv_replace
Jadikan hujah pertama sebagai salinan kedua, kemudian padamkan hujah asal. The
sasaran SV secara fizikal mengambil alih pemilikan badan SV sumber dan
mewarisi benderanya; walau bagaimanapun, sasaran menyimpan sebarang sihir yang dimilikinya, dan sebarang sihir yang masuk
sumbernya dibuang. Ambil perhatian bahawa ini adalah penyalinan SV yang agak pakar
operasi; kebanyakan masa anda akan mahu menggunakan "sv_setsv" atau salah satu daripada banyak makronya
bahagian hadapan.

void sv_replace(SV *const sv, SV *const nsv)

sv_reset
Pelaksanaan asas untuk fungsi Perl "set semula". Perhatikan bahawa peringkat perl
fungsi tidak digunakan secara samar-samar.

void sv_reset(const char* s, HV *const stash)

sv_rvweaken
Lemahkan rujukan: tetapkan bendera "SvWEAKREF" pada RV ini; berikan SV yang dirujuk
"PERL_MAGIC_backref" sihir jika ia belum lagi; dan tolak rujukan belakang kepada ini
RV ke pelbagai rujukan belakang yang dikaitkan dengan sihir itu. Jika RV adalah
ajaib, sihir set akan dipanggil selepas RV dibersihkan.

SV* sv_rvweaken(SV *const sv)

sv_setiv
Menyalin integer ke dalam SV yang diberikan, menaik taraf dahulu jika perlu. Tidak
mengendalikan sihir 'set'. Lihat juga "sv_setiv_mg".

void sv_setiv(SV *const sv, const IV num)

sv_setiv_mg
Seperti "sv_setiv", tetapi juga mengendalikan sihir 'set'.

batal sv_setiv_mg(SV *const sv, const IV i)

sv_setnv
Salin dua kali ganda ke dalam SV yang diberikan, naik taraf dahulu jika perlu. tidak mengendalikan
'set' sihir. Lihat juga "sv_setnv_mg".

void sv_setnv(SV *const sv, const NV num)

sv_setnv_mg
Seperti "sv_setnv", tetapi juga mengendalikan sihir 'set'.

void sv_setnv_mg(SV *const sv, const NV num)

sv_setpv
Menyalin rentetan ke dalam SV. Rentetan mesti ditamatkan dengan aksara "NUL".
Tidak mengendalikan sihir 'set'. Lihat "sv_setpv_mg".

void sv_setpv(SV *const sv, const char *const ptr)

sv_setpvf
Berfungsi seperti "sv_catpvf" tetapi menyalin teks ke dalam SV dan bukannya menambahkannya.
Tidak mengendalikan sihir 'set'. Lihat "sv_setpvf_mg".

void sv_setpvf(SV *const sv, const char *const pat,
...)

sv_setpvf_mg
Seperti "sv_setpvf", tetapi juga mengendalikan sihir 'set'.

batal sv_setpvf_mg(SV *const sv,
const char *const pat, ...)

sv_setpviv
Menyalin integer ke dalam SV yang diberikan, juga mengemas kini nilai rentetannya. Tidak
mengendalikan sihir 'set'. Lihat "sv_setpviv_mg".

void sv_setpviv(SV *const sv, const IV num)

sv_setpviv_mg
Seperti "sv_setpviv", tetapi juga mengendalikan sihir 'set'.

batal sv_setpviv_mg(SV *const sv, const IV iv)

sv_setpvn
Menyalin rentetan (mungkin mengandungi aksara "NUL" terbenam) ke dalam SV. The
Parameter "len" menunjukkan bilangan bait yang akan disalin. Jika hujah "ptr".
ialah NULL SV akan menjadi tidak ditentukan. Tidak mengendalikan sihir 'set'. Lihat
"sv_setpvn_mg".

void sv_setpvn(SV *const sv, const char *const ptr,
const STRLEN len)

sv_setpvn_mg
Seperti "sv_setpvn", tetapi juga mengendalikan sihir 'set'.

batal sv_setpvn_mg(SV *const sv,
const char *const ptr,
const STRLEN len)

sv_setpvs
Seperti "sv_setpvn", tetapi mengambil rentetan literal dan bukannya pasangan rentetan/panjang.

void sv_setpvs(SV* sv, const char* s)

sv_setpvs_mg
Seperti "sv_setpvn_mg", tetapi mengambil rentetan literal dan bukannya pasangan rentetan/panjang.

batal sv_setpvs_mg(SV* sv, const char* s)

sv_setpv_mg
Seperti "sv_setpv", tetapi juga mengendalikan sihir 'set'.

void sv_setpv_mg(SV *const sv, const char *const ptr)

sv_setref_iv
Menyalin integer ke dalam SV baharu, secara pilihan memberkati SV. Hujah "rv".
akan dinaik taraf kepada RV. RV itu akan diubah suai untuk menunjuk kepada SV baharu. The
Hujah "nama kelas" menunjukkan pakej untuk berkat. Tetapkan "nama kelas" kepada
"NULL" untuk mengelakkan keberkatan. SV baharu akan mempunyai kiraan rujukan 1, dan
RV akan dikembalikan.

SV* sv_setref_iv(SV *const rv,
const char *const nama kelas,
const IV iv)

sv_setref_nv
Menyalin dua kali ganda ke dalam SV baharu, secara pilihan memberkati SV. Hujah "rv" akan
dinaik taraf kepada RV. RV itu akan diubah suai untuk menunjuk kepada SV baharu. The
Hujah "nama kelas" menunjukkan pakej untuk berkat. Tetapkan "nama kelas" kepada
"NULL" untuk mengelakkan keberkatan. SV baharu akan mempunyai kiraan rujukan 1, dan
RV akan dikembalikan.

SV* sv_setref_nv(SV *const rv,
const char *const nama kelas,
const NV nv)

sv_setref_pv
Menyalin penunjuk ke SV baharu, secara pilihan memberkati SV. Hujah "rv".
akan dinaik taraf kepada RV. RV itu akan diubah suai untuk menunjuk kepada SV baharu. Jika
hujah "pv" adalah NULL kemudian "PL_sv_undef" akan diletakkan ke dalam SV. The
Hujah "nama kelas" menunjukkan pakej untuk berkat. Tetapkan "nama kelas" kepada
"NULL" untuk mengelakkan keberkatan. SV baharu akan mempunyai kiraan rujukan 1, dan
RV akan dikembalikan.

Jangan gunakan dengan jenis Perl lain seperti HV, AV, SV, CV, kerana objek tersebut
akan menjadi rosak oleh proses salinan penunjuk.

Ambil perhatian bahawa "sv_setref_pvn" menyalin rentetan sementara ini menyalin penunjuk.

SV* sv_setref_pv(SV *const rv,
const char *const nama kelas,
batal *const pv)

sv_setref_pvn
Menyalin rentetan ke dalam SV baharu, secara pilihan memberkati SV. Panjangnya
rentetan mesti dinyatakan dengan "n". Argumen "rv" akan dinaik taraf kepada RV.
RV itu akan diubah suai untuk menunjuk kepada SV baharu. Hujah "nama kelas".
menunjukkan bungkusan untuk berkat. Tetapkan "nama kelas" kepada "NULL" untuk mengelakkan
berkat. SV baharu akan mempunyai kiraan rujukan 1 dan RV akan menjadi
kembali.

Ambil perhatian bahawa "sv_setref_pv" menyalin penunjuk sementara ini menyalin rentetan.

SV* sv_setref_pvn(SV *const rv,
const char *const nama kelas,
const char *const pv,
const STRLEN n)

sv_setref_pvs
Seperti "sv_setref_pvn", tetapi mengambil rentetan literal dan bukannya pasangan rentetan/panjang.

SV * sv_setref_pvs(const char* s)

sv_setref_uv
Menyalin integer yang tidak ditandatangani ke dalam SV baharu, secara pilihan memberkati SV. "rv"
argumen akan dinaik taraf kepada RV. RV itu akan diubah suai untuk menunjuk kepada yang baharu
SV. Hujah "nama kelas" menunjukkan pakej untuk berkat. Tetapkan
"nama kelas" kepada "NULL" untuk mengelakkan keberkatan. SV baharu akan mempunyai rujukan
kiraan 1, dan RV akan dikembalikan.

SV* sv_setref_uv(SV *const rv,
const char *const nama kelas,
const UV uv)

sv_setsv
Menyalin kandungan SV sumber "ssv" ke dalam SV destinasi "dsv". The
sumber SV mungkin dimusnahkan jika ia adalah fana, jadi jangan gunakan fungsi ini jika
sumber SV perlu digunakan semula. Tidak mengendalikan sihir 'set' pada destinasi SV.
Panggilan 'dapat' sihir pada sumber SV. Secara longgar, ia melakukan salinan demi nilai,
menghapuskan sebarang kandungan destinasi sebelumnya.

Anda mungkin mahu menggunakan salah satu daripada pelbagai pembungkus, seperti "SvSetSV",
"SvSetSV_nosteal", "SvSetMagicSV" dan "SvSetMagicSV_nosteal".

batal sv_setsv(SV *dstr, SV *sstr)

sv_setsv_flags
Menyalin kandungan SV sumber "ssv" ke dalam SV destinasi "dsv". The
sumber SV mungkin dimusnahkan jika ia adalah fana, jadi jangan gunakan fungsi ini jika
sumber SV perlu digunakan semula. Tidak mengendalikan sihir 'set'. Secara longgar, ia
melakukan salinan demi nilai, menghapuskan sebarang kandungan destinasi sebelumnya.
Jika parameter "flags" mempunyai set bit "SV_GMAGIC", adakah "mg_get" pada "ssv" jika
sesuai, kalau tidak. Jika parameter "bendera" mempunyai set bit "SV_NOSTEAL" maka
penampan temps tidak akan dicuri. dan "sv_setsv_nomg" ialah
dilaksanakan dari segi fungsi ini.

Anda mungkin mahu menggunakan salah satu daripada pelbagai pembungkus, seperti "SvSetSV",
"SvSetSV_nosteal", "SvSetMagicSV" dan "SvSetMagicSV_nosteal".

Ini ialah fungsi utama untuk menyalin skalar, dan kebanyakan salinan-ish lain
fungsi dan makro menggunakan ini di bawah.

batal sv_setsv_flags(SV *dstr, SV *sstr,
bendera const I32)

sv_setsv_mg
Seperti "sv_setsv", tetapi juga mengendalikan sihir 'set'.

void sv_setsv_mg(SV *const dstr, SV *const sstr)

sv_setuv
Menyalin integer yang tidak ditandatangani ke dalam SV yang diberikan, menaik taraf dahulu jika perlu. Adakah
tidak mengendalikan sihir 'set'. Lihat juga "sv_setuv_mg".

void sv_setuv(SV *const sv, const UV num)

sv_setuv_mg
Seperti "sv_setuv", tetapi juga mengendalikan sihir 'set'.

batal sv_setuv_mg(SV *const sv, const UV u)

sv_tercemar
Uji SV untuk kekotoran. Gunakan "SvTAINTED" sebaliknya.

bool sv_tainted(SV *const sv)

sv_true Mengembalikan benar jika SV mempunyai nilai sebenar mengikut peraturan Perl. Gunakan makro "SvTRUE".
sebaliknya, yang mungkin memanggil "sv_true()" atau sebaliknya boleh menggunakan versi dalam talian.

I32 sv_true(SV *const sv)

sv_unmagic
Mengeluarkan semua keajaiban jenis "jenis" daripada SV.

int sv_unmagic(SV *const sv, const int type)

sv_unmagicext
Mengalih keluar semua sihir jenis "jenis" dengan "vtbl" yang ditentukan daripada SV.

int sv_unmagicext(SV *const sv, const int type,
MGVTBL *vtbl)

sv_unref_flags
Menyahset status RV SV dan mengurangkan kiraan rujukan apa-apa sahaja
dirujuk oleh RV. Ini hampir boleh dianggap sebagai pembalikan
"newSVrv". Argumen "cflags" boleh mengandungi "SV_IMMEDIATE_UNREF" untuk memaksa
kiraan rujukan untuk dikurangkan (jika tidak pengurangan adalah bersyarat
kiraan rujukan adalah berbeza daripada satu atau rujukan adalah baca sahaja
SV). Lihat "SvROK_off".

batal sv_unref_flags(SV *const ref, const U32 flags)

sv_untain
Mencemarkan SV. Gunakan "SvTAINTED_off" sebaliknya.

batal sv_untaint(SV *const sv)

sv_upgrade
Tingkatkan SV kepada bentuk yang lebih kompleks. Secara amnya menambah jenis badan baharu pada SV,
kemudian menyalin maklumat sebanyak mungkin daripada badan lama. Ia berkokok
jika SV sudah dalam bentuk yang lebih kompleks daripada yang diminta. Anda secara amnya mahu
gunakan pembalut makro "SvUPGRADE", yang menyemak jenis sebelum membuat panggilan
"sv_upgrade", dan oleh itu tidak berkokok. Lihat juga "svtype".

batal sv_upgrade(SV *const sv, svtype new_type)

sv_usepvn_flags
Memberitahu SV untuk menggunakan "ptr" untuk mencari nilai rentetannya. Biasanya rentetan disimpan
di dalam SV, tetapi sv_usepvn membenarkan SV menggunakan rentetan luar. "ptr"
harus menunjuk ke memori yang telah diperuntukkan oleh Newx. Ia mestilah permulaan a
Blok memori Newx-ed, dan bukan penunjuk ke tengahnya (berhati-hati dengan OOK dan
copy-on-write), dan bukan daripada pengalokasi memori bukan Newx seperti "malloc". The
panjang rentetan, "len", mesti dibekalkan. Secara lalai fungsi ini akan "Memperbaharui"
(iaitu realloc, gerakkan) memori yang ditunjuk oleh "ptr", supaya penunjuk itu tidak sepatutnya
dibebaskan atau digunakan oleh pengaturcara selepas memberikannya kepada sv_usepvn, dan tidak sepatutnya
sebarang penunjuk dari "belakang" penunjuk itu (cth ptr + 1) digunakan.

Jika "bendera" & SV_SMAGIC adalah benar, akan memanggil SvSETMAGIC. Jika "bendera" &
SV_HAS_TRAILING_NUL adalah benar, maka "ptr[len]" mestilah "NUL", dan realloc akan
dilangkau (iaitu penimbal sebenarnya sekurang-kurangnya 1 bait lebih panjang daripada "len", dan
sudah memenuhi keperluan untuk menyimpan dalam "SvPVX").

void sv_usepvn_flags(SV *const sv, char* ptr,
const STRLEN len,
bendera const U32)

sv_utf8_decode
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Jika PV SV ialah jujukan oktet dalam UTF-8 dan mengandungi berbilang bait
aksara, bendera "SvUTF8" dihidupkan supaya ia kelihatan seperti aksara. Jika
PV hanya mengandungi aksara bait tunggal, bendera "SvUTF8" kekal dimatikan. Imbasan
PV untuk kesahihan dan mengembalikan palsu jika PV tidak sah UTF-8.

bool sv_utf8_decode(SV *const sv)

sv_utf8_downgrade
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Percubaan untuk menukar PV SV daripada aksara kepada bait. Jika PV mengandungi
aksara yang tidak boleh dimuatkan dalam bait, penukaran ini akan gagal; dalam kes ini,
sama ada mengembalikan palsu atau, jika "fail_ok" tidak benar, croaks.

Ini bukan Unicode tujuan umum untuk antara muka pengekodan bait: gunakan Pengekodan
lanjutan untuk itu.

bool sv_utf8_downgrade(SV *const sv,
const bool fail_ok)

sv_utf8_encode
Menukar PV SV kepada UTF-8, tetapi kemudian mematikan bendera "SvUTF8" supaya ia
kelihatan seperti oktet lagi.

batal sv_utf8_encode(SV *const sv)

sv_utf8_upgrade
Menukar PV SV kepada bentuk yang dikodkan UTF-8. Memaksa SV untuk membentuk rentetan
jika belum. Adakah "mg_get" pada "sv" jika sesuai. Sentiasa menetapkan
Bendera SvUTF8 untuk mengelakkan semakan kesahihan masa hadapan walaupun keseluruhan rentetan adalah sama
dalam UTF-8 sebagai tidak. Mengembalikan bilangan bait dalam rentetan yang ditukar

Ini bukan pengekodan bait tujuan umum kepada antara muka Unicode: gunakan Pengekodan
lanjutan untuk itu.

STRLEN sv_utf8_upgrade(SV *sv)

sv_utf8_upgrade_flags
Menukar PV SV kepada bentuk yang dikodkan UTF-8. Memaksa SV untuk membentuk rentetan
jika belum. Sentiasa tetapkan bendera SvUTF8 untuk mengelakkan semakan kesahihan masa hadapan
walaupun semua bait adalah invarian dalam UTF-8. Jika "bendera" mempunyai set bit "SV_GMAGIC",
akan "mg_get" pada "sv" jika sesuai, jika tidak, tidak.

Jika "bendera" mempunyai set SV_FORCE_UTF8_UPGRADE, fungsi ini menganggap bahawa PV akan
kembangkan apabila ditukar kepada UTF-8 dan melangkau kerja tambahan untuk menyemaknya.
Biasanya bendera ini digunakan oleh rutin yang telah menghuraikan rentetan dan
menemui watak sedemikian, dan menyampaikan maklumat ini supaya kerja itu tidak
terpaksa diulang.

Mengembalikan bilangan bait dalam rentetan yang ditukar.

Ini bukan pengekodan bait tujuan umum kepada antara muka Unicode: gunakan Pengekodan
lanjutan untuk itu.

STRLEN sv_utf8_upgrade_flags(SV *const sv,
bendera const I32)

sv_utf8_upgrade_flags_grow
Seperti sv_utf8_upgrade_flags, tetapi mempunyai parameter tambahan "tambahan", iaitu
bilangan bait yang tidak digunakan rentetan 'sv' dijamin percuma selepas itu
kembali. Ini membolehkan pemanggil menempah ruang tambahan yang ingin diisi
mengelakkan pertumbuhan tambahan.

"sv_utf8_upgrade", "sv_utf8_upgrade_nomg", dan "sv_utf8_upgrade_flags" ialah
dilaksanakan dari segi fungsi ini.

Mengembalikan bilangan bait dalam rentetan yang ditukar (tidak termasuk alat ganti).

STRLEN sv_utf8_upgrade_flags_grow(SV *const sv,
bendera const I32,
STRLEN tambahan)

sv_utf8_upgrade_nomg
Seperti sv_utf8_upgrade, tetapi tidak melakukan sihir pada "sv".

STRLEN sv_utf8_upgrade_nomg(SV *sv)

sv_vcatpvf
Memproses hujahnya seperti "vsprintf" dan menambahkan output yang diformatkan pada SV.
Tidak mengendalikan sihir 'set'. Lihat "sv_vcatpvf_mg".

Biasanya digunakan melalui bahagian hadapannya "sv_catpvf".

void sv_vcatpvf(SV *const sv, const char *const pat,
va_list *const args)

sv_vcatpvfn
batal sv_vcatpvfn(SV *const sv, const char *const pat,
const STRLEN patlen,
va_list *const args,
SV **const svargs, const I32 svmax,
bool *const maybe_tainted)

sv_vcatpvfn_flags
Memproses hujahnya seperti "vsprintf" dan menambahkan output yang diformatkan pada SV.
Menggunakan tatasusunan SV jika senarai hujah pembolehubah gaya C tiada (NULL).
Apabila berjalan dengan pemeriksaan taint didayakan, menunjukkan melalui "mungkin_tercemar" jika hasil
tidak boleh dipercayai (selalunya disebabkan oleh penggunaan tempat).

Jika dipanggil sebagai "sv_vcatpvfn" atau bendera termasuk "SV_GMAGIC", panggilan mendapat sihir.

Biasanya digunakan melalui salah satu bahagian hadapannya "sv_vcatpvf" dan "sv_vcatpvf_mg".

batal sv_vcatpvfn_flags(SV *const sv,
const char *const pat,
const STRLEN patlen,
va_list *const args,
SV **const svargs,
const I32 svmax,
bool *const maybe_tainted,
bendera const U32)

sv_vcatpvf_mg
Seperti "sv_vcatpvf", tetapi juga mengendalikan sihir 'set'.

Biasanya digunakan melalui bahagian hadapannya "sv_catpvf_mg".

batal sv_vcatpvf_mg(SV *const sv,
const char *const pat,
va_list *const args)

sv_vsetpvf
Berfungsi seperti "sv_vcatpvf" tetapi menyalin teks ke dalam SV dan bukannya menambahkannya.
Tidak mengendalikan sihir 'set'. Lihat "sv_vsetpvf_mg".

Biasanya digunakan melalui bahagian hadapannya "sv_setpvf".

batal sv_vsetpvf(SV *const sv, const char *const pat,
va_list *const args)

sv_vsetpvfn
Berfungsi seperti "sv_vcatpvfn" tetapi menyalin teks ke dalam SV dan bukannya menambahkannya.

Biasanya digunakan melalui salah satu bahagian hadapannya "sv_vsetpvf" dan "sv_vsetpvf_mg".

void sv_vsetpvfn(SV *const sv, const char *const pat,
const STRLEN patlen,
va_list *const args,
SV **const svargs, const I32 svmax,
bool *const maybe_tainted)

sv_vsetpvf_mg
Seperti "sv_vsetpvf", tetapi juga mengendalikan sihir 'set'.

Biasanya digunakan melalui bahagian hadapannya "sv_setpvf_mg".

batal sv_vsetpvf_mg(SV *const sv,
const char *const pat,
va_list *const args)

Unicode Khidmat Bantuan


"Sokongan Unicode" dalam perlguts mempunyai pengenalan kepada API ini.

Lihat juga "Klasifikasi aksara", dan "Perubahan huruf besar-besaran". Pelbagai fungsi
di luar bahagian ini juga berfungsi khas dengan Unicode. Cari rentetan "utf8" dalam
dokumen ini.

bait_cmp_utf8
Membandingkan urutan aksara (disimpan sebagai oktet) dalam "b", "blen" dengan
jujukan aksara (disimpan sebagai UTF-8) dalam "u", "ulen". Mengembalikan 0 jika ada
sama, -1 atau -2 jika rentetan pertama kurang daripada rentetan kedua, +1 atau +2 jika
rentetan pertama lebih besar daripada rentetan kedua.

-1 atau +1 dikembalikan jika rentetan yang lebih pendek adalah sama dengan permulaan
rentetan yang lebih panjang. -2 atau +2 dikembalikan jika terdapat perbezaan antara aksara
dalam rentetan.

int bytes_cmp_utf8(const U8 *b, STRLEN blen,
const U8 *u, STRLEN ulen)

bytes_from_utf8
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menukar rentetan "s" panjang "len" daripada UTF-8 kepada pengekodan bait asli.
Tidak seperti "utf8_to_bytes" tetapi seperti "bytes_to_utf8", mengembalikan penunjuk kepada yang baru-
mencipta rentetan, dan mengemas kini "len" untuk mengandungi panjang baharu. Mengembalikan yang asal
rentetan jika tiada penukaran berlaku, "len" tidak berubah. Jangan lakukan apa-apa jika "is_utf8"
mata kepada 0. Tetapkan "is_utf8" kepada 0 jika "s" ditukar atau terdiri sepenuhnya daripada
aksara yang tidak berubah dalam utf8 (iaitu, US-ASCII pada mesin bukan EBCDIC).

U8* bytes_from_utf8(const U8 *s, STRLEN *len,
bool *is_utf8)

bytes_to_utf8
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menukar rentetan "s" panjang "len" bait daripada pengekodan asli kepada UTF-8.
Mengembalikan penuding kepada rentetan yang baru dibuat dan menetapkan "len" untuk mencerminkan yang baharu
panjang dalam bait.

Aksara "NUL" akan ditulis selepas tamat rentetan.

Jika anda ingin menukar kepada UTF-8 daripada pengekodan selain daripada asli (Latin1 atau
EBCDIC), lihat "sv_recode_to_utf8"().

U8* bytes_to_utf8(const U8 *s, STRLEN *len)

DO_UTF8 Mengembalikan pemberian bool sama ada atau tidak PV dalam "sv" akan dianggap sebagai
dikodkan dalam UTF-8.

Anda harus menggunakan ini selepas panggilan ke "SvPV()" atau salah satu variannya, sekiranya ada
panggilan ke rentetan terlebih muatan mengemas kini bendera pengekodan UTF-8 dalaman.

bool DO_UTF8(SV* sv)

foldEQ_utf8
Mengembalikan benar jika bahagian utama rentetan "s1" dan "s2" (sama ada atau kedua-duanya
yang mungkin dalam UTF-8) adalah sama tidak sensitif huruf; palsu sebaliknya. Bagaimana
jauh ke dalam rentetan untuk dibandingkan ditentukan oleh parameter input lain.

Jika "u1" adalah benar, rentetan "s1" diandaikan berada dalam Unicode berkod UTF-8;
sebaliknya ia diandaikan dalam pengekodan 8-bit asli. Sejajar dengan "u2"
berkenaan dengan "s2".

Jika panjang bait "l1" bukan sifar, ia menyatakan sejauh mana ke dalam "s1" untuk menyemak lipatan
kesaksamaan. Dalam erti kata lain, "s1"+"l1" akan digunakan sebagai matlamat untuk dicapai. Imbasan
tidak akan dianggap sebagai perlawanan melainkan matlamat dicapai, dan mengimbas
tidak akan terus melepasi matlamat itu. Sepadan dengan "l2" berkenaan dengan "s2".

Jika "pe1" bukan NULL dan penunjuk yang ditunjuknya bukan NULL, penunjuk itu ialah
dianggap sebagai penunjuk akhir kepada kedudukan 1 bait melepasi titik maksimum dalam "s1"
di luar pengimbasan tidak akan diteruskan dalam apa jua keadaan. (Rutin ini
menganggap bahawa rentetan input yang dikodkan UTF-8 tidak salah bentuk; input yang cacat boleh
menyebabkan ia membaca melepasi "pe1"). Ini bermakna jika kedua-dua "l1" dan "pe1" adalah
ditentukan dan "pe1" kurang daripada "s1"+"l1", perlawanan itu tidak akan berjaya
kerana ia tidak pernah dapat mencapai matlamatnya (dan sebenarnya ditegaskan menentang).
Sejajar dengan "pe2" berkenaan dengan "s2".

Sekurang-kurangnya satu daripada "s1" dan "s2" mesti mempunyai matlamat (sekurang-kurangnya satu daripada "l1" dan "l2" mesti
bukan sifar), dan jika kedua-duanya melakukannya, kedua-duanya perlu dicapai untuk perlawanan yang berjaya.
Selain itu, jika lipatan watak adalah berbilang aksara, kesemuanya mestilah
dipadankan (lihat rujukan tr21 di bawah untuk 'lipatan').

Apabila perlawanan berjaya, jika "pe1" bukan NULL, ia akan ditetapkan untuk menunjuk ke
permulaan seterusnya watak "s1" melebihi apa yang dipadankan. Selaras dengan itu
untuk "pe2" dan "s2".

Untuk ketidakpekaan huruf besar-besaran, "lipat kotak" Unicode digunakan sebagai ganti
huruf atas/kecilkan kedua-dua aksara, lihat
<http://www.unicode.org/unicode/reports/tr21/> (Pemetaan Kes).

I32 foldEQ_utf8(const char *s1, char **pe1, UV l1,
bool u1, const char *s2, char **pe2,
UV l2, bool u2)

isUTF8_CHAR
Mengembalikan bilangan bait bermula pada "s" yang membentuk UTF-8 sah (atau UTF-
EBCDIC) aksara yang dikodkan, tidak mencari lebih jauh daripada "e - s" bait kepada "s".
Mengembalikan 0 jika urutan bermula pada "s" hingga "e - 1" tidak terbentuk dengan baik UTF-8

Ambil perhatian bahawa aksara INVARIANT (iaitu ASCII pada mesin bukan EBCDIC) adalah sah
aksara UTF-8.

STRLEN ialahUTF8_CHAR(const U8 *s, const U8 *e)

is_ascii_string
Ini ialah sinonim yang dinamakan secara mengelirukan untuk "is_invariant_string". Pada ASCII-ish
platform, nama itu tidak mengelirukan: aksara julat ASCII adalah betul-betul
Invarian UTF-8. Tetapi mesin EBCDIC mempunyai lebih banyak invarian daripada ASCII sahaja
aksara, jadi "is_invariant_string" diutamakan.

bool is_ascii_string(const U8 *s, STRLEN len)

is_invariant_string
Mengembalikan benar jika bait "len" pertama rentetan "s" adalah sama tanpa mengira
pengekodan UTF-8 rentetan (atau pengekodan UTF-EBCDIC pada mesin EBCDIC).
Iaitu, jika ia adalah invarian UTF-8. Pada mesin ASCII-ish, semua ASCII
aksara dan hanya aksara ASCII sesuai dengan definisi ini. Pada mesin EBCDIC,
aksara julat ASCII adalah invarian, tetapi begitu juga dengan kawalan C1 dan
"\c?" (yang tiada dalam julat ASCII pada EBCDIC).

Jika "len" ialah 0, ia akan dikira menggunakan strlen(s), (yang bermaksud jika anda menggunakan ini
pilihan, "s" itu tidak boleh membenamkan aksara "NUL" dan mesti mempunyai a
menamatkan bait "NUL").

Lihat juga "is_utf8_string"(), "is_utf8_string_loclen"(), dan
"is_utf8_string_loc"().

bool is_invariant_string(const U8 *s, STRLEN len)

is_utf8_string
Mengembalikan benar jika bait "len" pertama rentetan "s" membentuk rentetan UTF-8 yang sah,
palsu sebaliknya. Jika "len" ialah 0, ia akan dikira menggunakan strlen(s) (which
bermakna jika anda menggunakan pilihan ini, "s" itu tidak boleh membenamkan aksara "NUL" dan
mesti mempunyai bait "NUL" penamat). Ambil perhatian bahawa semua aksara adalah ASCII
membentuk 'rentetan UTF-8 yang sah'.

Lihat juga "is_invariant_string"(), "is_utf8_string_loclen"(), dan
"is_utf8_string_loc"().

bool is_utf8_string(const U8 *s, STRLEN len)

is_utf8_string_loc
Seperti "is_utf8_string" tetapi menyimpan lokasi kegagalan (dalam kes
"utf8ness failure") atau lokasi "s"+"len" (dalam kes "utf8ness success")
dalam "ep".

Lihat juga "is_utf8_string_loclen"() dan "is_utf8_string"().

bool is_utf8_string_loc(const U8 *s, STRLEN len,
const U8 **ep)

is_utf8_string_loclen
Seperti "is_utf8_string"() tetapi menyimpan lokasi kegagalan (dalam kes
"utf8ness failure") atau lokasi "s"+"len" (dalam kes "utf8ness success")
dalam "ep", dan bilangan aksara yang dikodkan UTF-8 dalam "el".

Lihat juga "is_utf8_string_loc"() dan "is_utf8_string"().

bool is_utf8_string_loclen(const U8 *s, STRLEN len,
const U8 **ep, STRLEN *el)

pv_uni_display
Bina kepada skalar "dsv" versi rentetan "spv" yang boleh dipaparkan, panjang "len",
versi boleh dipaparkan adalah paling banyak "pvlim" bait panjang (jika lebih panjang, selebihnya ialah
dipenggal dan "..." akan dilampirkan).

Argumen "bendera" boleh mempunyai UNI_DISPLAY_ISPRINT ditetapkan untuk dipaparkan isPRINT()dapat
aksara sebagai diri mereka sendiri, UNI_DISPLAY_BACKSLASH untuk memaparkan \\[nrfta\\] sebagai
versi bergaris ke belakang (seperti '\n') (UNI_DISPLAY_BACKSLASH diutamakan daripada
UNI_DISPLAY_ISPRINT untuk \\). UNI_DISPLAY_QQ (dan alias UNI_DISPLAY_REGEX)
menghidupkan UNI_DISPLAY_BACKSLASH dan UNI_DISPLAY_ISPRINT.

Penunjuk kepada PV "dsv" dikembalikan.

Lihat juga "sv_uni_display".

char* pv_uni_display(SV *dsv, const U8 *spv,
STRLEN len, STRLEN pvlim,
bendera UV)

sv_cat_decode
Pengekodan diandaikan sebagai objek Encode, PV ssv diandaikan sebagai
oktet dalam pengekodan dan penyahkodan input bermula dari kedudukan yang (PV
+ *offset) menunjuk ke. Dsv akan digabungkan dengan rentetan UTF-8 yang dinyahkodkan daripada
ssv. Penyahkodan akan ditamatkan apabila tstr rentetan muncul dalam output penyahkodan atau
input berakhir pada PV ssv. Nilai yang akan menjadi titik offset
diubah suai kepada kedudukan input terakhir pada ssv.

Mengembalikan TRUE jika penamat ditemui, jika tidak mengembalikan FALSE.

bool sv_cat_decode(SV* dsv, SV *encoding, SV *ssv,
int *offset, char* tstr, int tlen)

sv_recode_to_utf8
Pengekodan diandaikan sebagai objek Encode, pada kemasukan PV sv adalah
diandaikan sebagai oktet dalam pengekodan itu, dan sv akan ditukar kepada Unicode
(dan UTF-8).

Jika sv sudah ialah UTF-8 (atau jika ia bukan POK), atau jika pengekodan bukan
rujukan, tiada apa yang dilakukan kepada sv. Jika pengekodan bukan "Encode::XS"
Mengekod objek, perkara buruk akan berlaku. (Lihat lib/encoding.pm dan Pengekodan.)

PV sv dikembalikan.

char* sv_recode_to_utf8(SV* sv, SV *encoding)

sv_uni_display
Bina kepada skalar "dsv" versi yang boleh dipaparkan bagi skalar "sv", the
versi boleh dipaparkan paling banyak "pvlim" bait panjang (jika lebih panjang, selebihnya ialah
dipenggal dan "..." akan dilampirkan).

Hujah "flags" adalah seperti dalam "pv_uni_display"().

Penunjuk kepada PV "dsv" dikembalikan.

char* sv_uni_display(SV *dsv, SV *ssv, STRLEN pvlim,
bendera UV)

to_utf8_case
"p" mengandungi penuding kepada rentetan UTF-8 yang mengekod watak yang sedang
ditukar. Rutin ini mengandaikan bahawa watak di "p" terbentuk dengan baik.

"ustrp" ialah penunjuk kepada penimbal aksara untuk meletakkan hasil penukaran.
"lenp" ialah penunjuk kepada panjang hasil.

"swashp" ialah penunjuk kepada swash untuk digunakan.

Kedua-dua pemetaan khas dan biasa disimpan dalam lib/unicore/To/Foo.pl, dan
dimuatkan oleh SWASHNEW, menggunakan lib/utf8_heavy.pl. "istimewa" (biasanya, tetapi tidak selalu,
pemetaan berbilang aksara), dicuba terlebih dahulu.

"istimewa" ialah rentetan, biasanya "NULL" atau "". "NULL" bermaksud tidak menggunakan sebarang khas
pemetaan; "" bermaksud menggunakan pemetaan khas. Nilai selain daripada dua ini adalah
dianggap sebagai nama cincang yang mengandungi pemetaan khas, seperti
"utf8::ToSpecLower".

"normal" ialah rentetan seperti "ToLower" yang bermaksud swash %utf8::ToLower.

UV to_utf8_case(const U8 *p, U8* ustrp,
STRLEN *lenp, SV **swashp,
const char *biasa,
const char *istimewa)

to_utf8_fold
Sebaliknya gunakan "toFOLD_utf8".

UV ke_utf8_fold(const U8 *p, U8* ustrp,
STRLEN *lenp)

to_utf8_lower
Sebaliknya gunakan "toLOWER_utf8".

UV ke_utf8_lower(const U8 *p, U8* ustrp,
STRLEN *lenp)

to_utf8_title
Sebaliknya gunakan "toTITLE_utf8".

UV to_utf8_title(const U8 *p, U8* ustrp,
STRLEN *lenp)

to_utf8_upper
Sebaliknya gunakan "toUPPER_utf8".

UV ke_utf8_upper(const U8 *p, U8* ustrp,
STRLEN *lenp)

utf8n_to_uvchr
FUNGSI INI HARUS DIGUNAKAN DALAM KEADAAN YANG SANGAT ISTIMEWA SAHAJA. Kebanyakan kod
harus menggunakan "utf8_to_uvchr_buf"() dan bukannya memanggil ini secara langsung.

Rutin penyahkod UTF-8 peringkat bawah. Mengembalikan nilai mata kod asli bagi
aksara pertama dalam rentetan "s", yang diandaikan berada dalam UTF-8 (atau UTF-EBCDIC)
pengekodan, dan tidak lebih daripada bait "curlen"; *retlen (jika "retlen" bukan NULL) akan
ditetapkan kepada panjang, dalam bait, aksara itu.

Nilai "bendera" menentukan tingkah laku apabila "s" tidak menunjuk kepada telaga-
membentuk aksara UTF-8. Jika "bendera" ialah 0, apabila kecacatan ditemui, sifar ialah
dikembalikan dan *retlen ditetapkan supaya ("s" + *retlen) ialah kedudukan seterusnya yang mungkin
dalam "s" yang boleh memulakan watak yang tidak cacat. Juga, jika amaran UTF-8
belum dilumpuhkan secara leksikal, amaran dibangkitkan.

Pelbagai bendera BENAR boleh ditetapkan dalam "bendera" untuk membenarkan (dan tidak memberi amaran kepada) individu
jenis kecacatan, seperti urutan yang terlalu panjang (iaitu, apabila terdapat
ialah urutan yang lebih pendek yang boleh menyatakan titik kod yang sama; urutan yang lebih panjang ialah
dilarang secara nyata dalam piawaian UTF-8 kerana potensi isu keselamatan).
Satu lagi contoh kepincangan ialah bait pertama watak yang tidak sah
bait pertama. Lihat utf8.h untuk senarai bendera tersebut. Untuk rentetan 0 panjang yang dibenarkan,
fungsi ini mengembalikan 0; untuk jujukan terlalu lama yang dibenarkan, titik kod yang dikira
dikembalikan; untuk semua kecacatan lain yang dibenarkan, PENGGANTIAN Unikod
WATAK dikembalikan, kerana ini tidak mempunyai nilai munasabah yang boleh ditentukan.

Bendera UTF8_CHECK_ONLY mengatasi tingkah laku apabila tidak dibenarkan (oleh yang lain
bendera) kecacatan didapati. Jika bendera ini ditetapkan, rutin menganggap bahawa
pemanggil akan menimbulkan amaran, dan fungsi ini secara senyap hanya akan menetapkan "retlen" kepada
"-1" (buang ke "STRLEN") dan kembalikan sifar.

Ambil perhatian bahawa API ini memerlukan nyahkekaburan antara penyahkodan yang berjaya "NUL"
aksara, dan pemulangan ralat (melainkan bendera UTF8_CHECK_ONLY ditetapkan), seperti dalam
kedua-dua kes, 0 dikembalikan. Untuk menyahkekaburan, apabila pulangan sifar, lihat jika yang pertama
bait "s" adalah 0 juga. Jika ya, input ialah "NUL"; jika tidak, input mempunyai
kesilapan.

Titik kod tertentu dianggap bermasalah. Ini adalah pengganti Unicode,
Unicode bukan aksara dan titik kod di atas maksimum Unicode 0x10FFFF. Oleh
lalai ini dianggap sebagai titik kod biasa, tetapi situasi tertentu memerlukan
pengendalian khas untuk mereka. Jika "bendera" mengandungi UTF8_DISALLOW_ILLEGAL_INTERCHANGE,
ketiga-tiga kelas dianggap sebagai kecacatan dan dikendalikan sedemikian. Bendera
UTF8_DISALLOW_SURROGATE, UTF8_DISALLOW_NONCHAR dan UTF8_DISALLOW_SUPER (maksudnya
melebihi maksimum Unicode undang-undang) boleh ditetapkan untuk tidak membenarkan kategori ini
secara individu.

Benderakan UTF8_WARN_ILLEGAL_INTERCHANGE, UTF8_WARN_SURROGATE, UTF8_WARN_NONCHAR,
dan UTF8_WARN_SUPER akan menyebabkan mesej amaran dibangkitkan untuk masing-masing
kategori, tetapi sebaliknya mata kod dianggap sah (tidak
kecacatan). Untuk mendapatkan kategori untuk kedua-duanya dianggap sebagai kecacatan dan kenaikan
amaran, nyatakan kedua-dua bendera WARN dan DISALLOW. (Tetapi ambil perhatian bahawa amaran adalah
tidak dibangkitkan jika dilumpuhkan secara leksikal atau jika UTF8_CHECK_ONLY juga dinyatakan.)

Titik kod yang sangat besar (di atas 0x7FFF_FFFF) dianggap lebih bermasalah daripada
yang lain yang melebihi maksimum undang-undang Unicode. Terdapat beberapa sebab:
mereka memerlukan sekurang-kurangnya 32 bit untuk mewakili mereka pada platform ASCII, tidak
boleh diwakili sama sekali pada platform EBCDIC, dan spesifikasi UTF-8 asal
tidak pernah melebihi angka ini (had 0x10FFFF semasa telah dikenakan kemudian). (The
yang lebih kecil, yang muat ke dalam 32 bit, boleh diwakili oleh UV pada ASCII
platform, tetapi bukan dengan IV, yang bermaksud bahawa bilangan operasi yang boleh
dilakukan pada mereka agak terhad.) Pengekodan UTF-8 pada platform ASCII untuk
titik kod besar ini bermula dengan bait yang mengandungi 0xFE atau 0xFF. The
Bendera UTF8_DISALLOW_FE_FF akan menyebabkannya dianggap sebagai kecacatan, manakala
membenarkan titik kod Unicode yang lebih kecil di atas. (Sudah tentu UTF8_DISALLOW_SUPER akan
anggap semua titik kod Unicode di atas, termasuk ini, sebagai kecacatan.)
Begitu juga, UTF8_WARN_FE_FF bertindak seperti bendera WARN yang lain, tetapi terpakai hanya
ke titik kod ini.

Semua titik kod lain yang sepadan dengan aksara Unicode, termasuk penggunaan peribadi
dan mereka yang belum ditugaskan, tidak pernah dianggap cacat dan tidak pernah memberi amaran.

UV utf8n_to_uvchr(const U8 *s, STRLEN curlen,
STRLEN *relen, bendera U32)

utf8n_to_uvuni
Sebaliknya gunakan "utf8_to_uvchr_buf", atau jarang, "utf8n_to_uvchr".

Fungsi ini berguna untuk kod yang ingin mengendalikan kedua-dua EBCDIC dan ASCII
platform dengan sifat Unicode, tetapi bermula dalam Perl v5.20, perbezaannya
antara platform kebanyakannya telah dibuat tidak kelihatan kepada kebanyakan kod, jadi ini
fungsi agak tidak mungkin menjadi apa yang anda mahukan. Jika anda memerlukan yang tepat ini
kefungsian, sebaliknya gunakan "NATIVE_TO_UNI(utf8_to_uvchr_buf(...))" atau
"NATIVE_TO_UNI(utf8n_to_uvchr(...))".

UV utf8n_to_uvuni(const U8 *s, STRLEN curlen,
STRLEN *relen, bendera U32)

UTF8SKIP
mengembalikan bilangan bait dalam aksara yang dikodkan UTF-8 yang pertama (mungkin
sahaja) bait ditunjuk oleh "s".

STRLEN UTF8SKIP(char* s)

utf8_jarak
Mengembalikan bilangan aksara UTF-8 antara penuding UTF-8 "a" dan "b".

AMARAN: gunakan hanya jika anda *tahu* bahawa penunjuk menghala ke dalam UTF-8 yang sama
buffer.

IV utf8_jarak(const U8 *a, const U8 *b)

utf8_hop
Kembalikan penuding UTF-8 "s" yang dialihkan oleh aksara "mati", sama ada ke hadapan atau
ke belakang.

AMARAN: jangan gunakan yang berikut melainkan anda *tahu* "mati" berada dalam data UTF-8
ditunjuk oleh "s" *dan* bahawa pada entri "s" dijajarkan pada bait pertama
aksara atau hanya selepas bait terakhir aksara.

U8* utf8_hop(const U8 *s, I32 off)

utf8_length
Kembalikan panjang rentetan "s" yang dikodkan aksara UTF-8 dalam aksara. Berhenti di
"e" (termasuk). Jika "e < s" atau jika imbasan akan berakhir melepasi "e", kuak.

STRLEN utf8_length(const U8* s, const U8 *e)

utf8_to_bait
NOTA: fungsi ini adalah percubaan dan mungkin berubah atau dialih keluar tanpa notis.

Menukar rentetan "s" panjang "len" daripada UTF-8 kepada pengekodan bait asli.
Tidak seperti "bytes_to_utf8", ini terlebih menulis rentetan asal dan mengemas kini "len" kepada
mengandungi panjang baru. Mengembalikan sifar pada kegagalan, menetapkan "len" kepada -1.

Jika anda memerlukan salinan rentetan, lihat "bytes_from_utf8".

U8* utf8_to_bytes(U8 *s, STRLEN *len)

utf8_to_uvchr_buf
Mengembalikan titik kod asli bagi aksara pertama dalam rentetan "s" iaitu
diandaikan dalam pengekodan UTF-8; "hantar" mata kepada 1 di luar penghujung "s".
*retlen akan ditetapkan kepada panjang, dalam bait, aksara itu.

Jika "s" tidak menunjuk kepada aksara UTF-8 yang dibentuk dengan baik dan amaran UTF8 adalah
didayakan, sifar dikembalikan dan *retlen ditetapkan (jika "retlen" bukan NULL) kepada -1. Jika
amaran tersebut dimatikan, nilai yang dikira, jika ditakrifkan dengan baik (atau Unicode
WATAK PENGGANTIAN jika tidak), dikembalikan secara senyap, dan *retlen ditetapkan (jika
"retlen" bukan NULL) supaya ("s" + *retlen) ialah kedudukan seterusnya yang mungkin dalam "s"
yang boleh memulakan watak yang tidak cacat. Lihat "utf8n_to_uvchr" untuk mendapatkan butiran tentang
apabila WATAK PENGGANTIAN dikembalikan.

UV utf8_to_uvchr_buf(const U8 *s, const U8 *hantar,
STRLEN *kembali)

utf8_to_uvuni_buf
DILARANG! Ia merancang untuk mengalih keluar fungsi ini daripada keluaran masa hadapan Perl.
Jangan gunakannya untuk kod baharu; keluarkannya daripada kod sedia ada.

Hanya dalam keadaan yang jarang berlaku kod perlu berurusan dalam Unicode (as
bertentangan dengan mata kod asli). Dalam beberapa kes tersebut, gunakan
"NATIVE_TO_UNI(utf8_to_uvchr_buf(...))" sebaliknya.

Mengembalikan titik kod Unicode (bukan asli) bagi aksara pertama dalam rentetan
"s" yang diandaikan berada dalam pengekodan UTF-8; "hantar" mata kepada 1 selepas penghujung
"s". "retlen" akan ditetapkan kepada panjang, dalam bait, aksara itu.

Jika "s" tidak menunjuk kepada aksara UTF-8 yang dibentuk dengan baik dan amaran UTF8 adalah
didayakan, sifar dikembalikan dan *retlen ditetapkan (jika "retlen" bukan NULL) kepada -1. Jika
amaran tersebut dimatikan, nilai yang dikira jika ditakrifkan dengan baik (atau Unicode
WATAK PENGGANTIAN, jika tidak) dikembalikan secara senyap, dan *retlen ditetapkan (jika
"retlen" bukan NULL) supaya ("s" + *retlen) ialah kedudukan seterusnya yang mungkin dalam "s"
yang boleh memulakan watak yang tidak cacat. Lihat "utf8n_to_uvchr" untuk mendapatkan butiran tentang
apabila WATAK PENGGANTIAN dikembalikan.

UV utf8_to_uvuni_buf(const U8 *s, const U8 *hantar,
STRLEN *kembali)

UVCHR_SKIP
mengembalikan bilangan bait yang diperlukan untuk mewakili titik kod "cp" apabila dikodkan
sebagai UTF-8. "cp" ialah titik kod asli (ASCII atau EBCDIC) jika kurang daripada 255; a
Titik kod Unicode sebaliknya.

STRLEN UVCHR_SKIP(UV cp)

uvchr_to_utf8
Menambah perwakilan UTF-8 bagi titik kod asli "uv" ke penghujung
rentetan "d"; "d" harus mempunyai sekurang-kurangnya "UVCHR_SKIP(uv)+1" (sehingga "UTF8_MAXBYTES+1")
bait percuma tersedia. Nilai pulangan ialah penunjuk kepada bait selepas tamat
daripada watak baharu itu. Dalam kata lain,

d = uvchr_to_utf8(d, uv);

ialah cara yang disyorkan untuk mengetahui watak asli yang luas

*(d++) = uv;

Fungsi ini menerima sebarang UV sebagai input. Untuk melarang atau memberi amaran tentang kod bukan Unicode
mata, atau yang mungkin bermasalah, lihat "uvchr_to_utf8_flags".

U8* uvchr_to_utf8(U8 *d, UV uv)

uvchr_to_utf8_flags
Menambah perwakilan UTF-8 bagi titik kod asli "uv" ke penghujung
rentetan "d"; "d" harus mempunyai sekurang-kurangnya "UVCHR_SKIP(uv)+1" (sehingga "UTF8_MAXBYTES+1")
bait percuma tersedia. Nilai pulangan ialah penunjuk kepada bait selepas tamat
daripada watak baharu itu. Dalam kata lain,

d = uvchr_to_utf8_flags(d, uv, bendera);

atau, dalam kebanyakan kes,

d = uvchr_to_utf8_flags(d, uv, 0);

Ini adalah cara yang sedar Unicode untuk berkata

*(d++) = uv;

Fungsi ini akan menukar kepada UTF-8 (dan tidak memberi amaran) walaupun titik kod yang tidak
Unicode sah atau bermasalah, melainkan "bendera" mengandungi satu atau lebih daripada
bendera berikut:

Jika "uv" ialah titik kod pengganti Unicode dan UNICODE_WARN_SURROGATE ditetapkan,
fungsi akan menimbulkan amaran, dengan syarat amaran UTF8 didayakan. Jika sebaliknya
UNICODE_DISALLOW_SURROGATE ditetapkan, fungsi akan gagal dan mengembalikan NULL. Jika
kedua-dua bendera ditetapkan, fungsi ini akan memberi amaran dan mengembalikan NULL.

Bendera UNICODE_WARN_NONCHAR dan UNICODE_DISALLOW_NONCHAR mempengaruhi cara
fungsi mengendalikan bukan aksara Unicode. Dan begitu juga, UNICODE_WARN_SUPER
dan bendera UNICODE_DISALLOW_SUPER mempengaruhi pengendalian titik kod di atas
maksimum Unicode 0x10FFFF. Titik kod di atas 0x7FFF_FFFF (yang genap
kurang mudah alih) boleh diberi amaran dan/atau tidak dibenarkan walaupun kod Unicode lain di atas
mata diterima, oleh bendera UNICODE_WARN_FE_FF dan UNICODE_DISALLOW_FE_FF.

Dan akhirnya, bendera UNICODE_WARN_ILLEGAL_INTERCHANGE memilih keempat-empatnya
di atas bendera WARN; dan UNICODE_DISALLOW_ILLEGAL_INTERCHANGE memilih keempat-empatnya
TIDAK DIBENARKAN bendera.

U8* uvchr_to_utf8_flags(U8 *d, UV uv, bendera UV)

uvoffuni_to_utf8_flags
FUNGSI INI HARUS DIGUNAKAN DALAM KEADAAN YANG SANGAT ISTIMEWA SAHAJA. Sebaliknya,
Hampir semua kod Sekiranya penggunaan "uvchr_to_utf8" or "uvchr_to_utf8_flags".

Fungsi ini adalah seperti mereka, tetapi input adalah Unicode yang ketat (berbanding dengan
asli) titik kod. Hanya dalam keadaan yang jarang berlaku, kod seharusnya tidak menggunakan
titik kod asli.

Untuk butiran, lihat perihalan untuk "uvchr_to_utf8_flags".

U8* uvoffuni_to_utf8_flags(U8 *d, UV uv, bendera UV)

uvuni_to_utf8_flags
Sebaliknya anda hampir pasti mahu menggunakan "uvchr_to_utf8" atau "uvchr_to_utf8_flags".

Fungsi ini ialah sinonim yang tidak digunakan lagi untuk "uvoffuni_to_utf8_flags", yang dengan sendirinya,
walaupun tidak ditamatkan, hendaklah digunakan hanya dalam keadaan terpencil. Ini
fungsi berguna untuk kod yang ingin mengendalikan kedua-dua EBCDIC dan ASCII
platform dengan sifat Unicode, tetapi bermula dalam Perl v5.20, perbezaannya
antara platform kebanyakannya telah dibuat tidak kelihatan kepada kebanyakan kod, jadi ini
fungsi agak tidak mungkin menjadi apa yang anda mahukan.

U8* uvuni_to_utf8_flags(U8 *d, UV uv, bendera UV)

Pembolehubah diwujudkan by "xsubpp" and "xsubpp" dalaman fungsi


newXSproto
Digunakan oleh "xsubpp" untuk menghubungkan XSUB sebagai subs Perl. Menambah prototaip Perl pada subs.

XS_APIVERSION_BOOTCHECK
Makro untuk mengesahkan bahawa versi perl api modul XS telah dikompilasi
sepadan dengan versi api penterjemah perl yang sedang dimuatkan ke dalamnya.

XS_APIVERSION_BOOTCHECK;

XS_VERSION
Pengecam versi untuk modul XS. Ini biasanya dikendalikan secara automatik oleh
"ExtUtils::MakeMaker". Lihat "XS_VERSION_BOOTCHECK".

XS_VERSION_BOOTCHECK
Makro untuk mengesahkan bahawa pembolehubah $VERSION modul PM sepadan dengan modul XS
Pembolehubah "XS_VERSION". Ini biasanya dikendalikan secara automatik oleh "xsubpp". Lihat
"VERSIONCHECK: Kata Kunci" dalam perlxs.

XS_VERSION_BOOTCHECK;

Versioning


versi baru
Mengembalikan objek versi baharu berdasarkan yang diluluskan dalam SV:

SV *sv = new_version(SV *ver);

Tidak mengubah yang diluluskan dalam ver SV. Lihat "upg_version" jika anda ingin menaik taraf
SV.

SV* new_version(SV *ver)

prescan_version
Sahkan bahawa rentetan yang diberikan boleh dihuraikan sebagai objek versi, tetapi tidak
sebenarnya melakukan penghuraian. Boleh menggunakan sama ada peraturan pengesahan yang ketat atau longgar. boleh
secara pilihan tetapkan beberapa pembolehubah pembayang untuk menyimpan kod penghuraian suatu ketika dahulu
tokenizing.

const char* prescan_version(const char *s, bool strict,
const char** errstr,
bool *sqv,
int *ssaw_decimal,
int *swidth, bool *salpha)

versi imbasan
Mengembalikan penuding kepada aksara seterusnya selepas rentetan versi yang dihuraikan juga
sebagai menaik taraf yang diluluskan dalam SV kepada RV.

Fungsi mesti dipanggil dengan SV seperti yang sedia ada

sv = newSV(0);
s = scan_version(s, SV *sv, bool qv);

Melakukan beberapa prapemprosesan kepada rentetan untuk memastikan bahawa ia mempunyai yang betul
ciri-ciri sesuatu versi. Benderakan objek jika ia mengandungi garis bawah
(yang menandakan ini adalah versi alfa). Qv boolean menandakan bahawa versi
harus ditafsirkan seolah-olah ia mempunyai berbilang perpuluhan, walaupun ia tidak.

const char* scan_version(const char *s, SV *rv, bool qv)

upg_version
Peningkatan di tempat SV yang dibekalkan kepada objek versi.

SV *sv = upg_version(SV *sv, bool qv);

Mengembalikan penuding kepada SV yang dinaik taraf. Tetapkan qv boolean jika anda mahu memaksa
SV ini untuk ditafsirkan sebagai versi "dilanjutkan".

SV* upg_version(SV *ver, bool qv)

vcmp Versi objek sedar cmp. Kedua-dua operan mesti sudah ditukar menjadi
objek versi.

int vcmp(SV *lhv, SV *rhv)

vnormal Menerima objek versi dan mengembalikan perwakilan rentetan yang dinormalkan. Panggil
seperti:

sv = vnormal(rv);

NOTA: anda boleh lulus sama ada objek secara langsung atau SV yang terkandung dalam RV.

SV yang dikembalikan mempunyai kiraan semula sebanyak 1.

SV* vnormal(SV *vs)

vnumify Menerima objek versi dan mengembalikan perwakilan titik terapung yang dinormalkan.
Panggil seperti:

sv = vnumify(rv);

NOTA: anda boleh lulus sama ada objek secara langsung atau SV yang terkandung dalam RV.

SV yang dikembalikan mempunyai kiraan semula sebanyak 1.

SV* vnumify(SV *vs)

vstringify
Untuk mengekalkan keserasian maksimum dengan versi terdahulu Perl, ini
fungsi akan mengembalikan sama ada notasi titik terapung atau berbilang titik
tatatanda, bergantung pada sama ada versi asal mengandungi 1 atau lebih titik,
masing-masing.

SV yang dikembalikan mempunyai kiraan semula sebanyak 1.

SV* vstringify(SV *vs)

vverify Mengesahkan bahawa SV mengandungi struktur dalaman yang sah untuk objek versi. Ia
boleh diluluskan sama ada objek versi (RV) atau cincang itu sendiri (HV). Sekiranya
struktur adalah sah, ia mengembalikan HV. Jika struktur tidak sah, ia akan kembali
BULAN.

SV *hv = vverify(sv);

Ambil perhatian bahawa ia hanya mengesahkan struktur minimum kosong (supaya tidak keliru
oleh kelas terbitan yang mungkin mengandungi entri cincang tambahan):

SV* vverify(SV *vs)

Amaran and mati


croak Ini ialah antara muka XS kepada fungsi "mati" Perl.

Ambil corak format gaya sprintf dan senarai hujah. Ini digunakan untuk menjana
mesej rentetan. Jika mesej tidak berakhir dengan baris baharu, maka ia akan menjadi
dilanjutkan dengan beberapa petunjuk lokasi semasa dalam kod, seperti yang diterangkan
untuk "mess_sv".

Mesej ralat akan digunakan sebagai pengecualian, secara lalai mengembalikan kawalan ke
"eval" yang paling dekat, tetapi tertakluk kepada pengubahsuaian oleh $SIG{__DIE__}
pengendali. Walau apa pun, fungsi "croak" tidak pernah kembali seperti biasa.

Atas sebab sejarah, jika "tepuk" adalah batal maka kandungan "ERRSV" ($@) akan menjadi
digunakan sebagai mesej ralat atau objek dan bukannya membina mesej ralat daripada
hujah. Jika anda ingin membuang objek bukan rentetan, atau membina mesej ralat masuk
SV sendiri, adalah lebih baik untuk menggunakan fungsi "croak_sv", yang tidak
melibatkan clobbering "ERRSV".

void croak(const char *tepuk, ...)

croak_no_modify
Tepat sama dengan "Perl_croak(aTHX_ "%s", PL_no_modify)", tetapi menjana terser
kod objek daripada menggunakan "Perl_croak". Kurang kod digunakan pada laluan kod pengecualian
mengurangkan tekanan cache CPU.

void croak_no_modify()

croak_sv
Ini ialah antara muka XS kepada fungsi "mati" Perl.

"baseex" ialah mesej atau objek ralat. Jika ia adalah rujukan, ia akan digunakan
apa adanya. Jika tidak, ia digunakan sebagai rentetan, dan jika ia tidak berakhir dengan baris baharu
maka ia akan dilanjutkan dengan beberapa petunjuk lokasi semasa dalam kod,
seperti yang diterangkan untuk "mess_sv".

Mesej ralat atau objek akan digunakan sebagai pengecualian, secara lalai kembali
kawalan kepada "eval" bersama yang terdekat, tetapi tertakluk kepada pengubahsuaian oleh a
pengendali $SIG{__DIE__}. Walau apa pun, fungsi "croak_sv" tidak pernah kembali
biasanya.

Untuk mati dengan mesej rentetan ringkas, fungsi "croak" mungkin lebih mudah.

void croak_sv(SV *baseex)

die Berkelakuan sama seperti "croak", kecuali untuk jenis pulangan. Ia sepatutnya digunakan sahaja
di mana jenis pemulangan "OP *" diperlukan. Fungsi itu tidak pernah kembali.

OP * mati(const char *tepuk, ...)

die_sv Berkelakuan sama seperti "croak_sv", kecuali untuk jenis pulangan. Ia harus digunakan
hanya di mana jenis pemulangan "OP *" diperlukan. Fungsi tidak pernah sebenarnya
pulangan.

OP * die_sv(SV *baseex)

vcroak Ini ialah antara muka XS kepada fungsi "mati" Perl.

"pat" dan "args" ialah corak format gaya sprintf dan hujah terkapsul
senarai. Ini digunakan untuk menjana mesej rentetan. Jika mesej tidak tamat
dengan baris baharu, maka ia akan dilanjutkan dengan beberapa petunjuk arus
lokasi dalam kod, seperti yang diterangkan untuk "mess_sv".

Mesej ralat akan digunakan sebagai pengecualian, secara lalai mengembalikan kawalan ke
"eval" yang paling dekat, tetapi tertakluk kepada pengubahsuaian oleh $SIG{__DIE__}
pengendali. Walau apa pun, fungsi "croak" tidak pernah kembali seperti biasa.

Atas sebab sejarah, jika "tepuk" adalah batal maka kandungan "ERRSV" ($@) akan menjadi
digunakan sebagai mesej ralat atau objek dan bukannya membina mesej ralat daripada
hujah. Jika anda ingin membuang objek bukan rentetan, atau membina mesej ralat masuk
SV sendiri, adalah lebih baik untuk menggunakan fungsi "croak_sv", yang tidak
melibatkan clobbering "ERRSV".

void vcroak(const char *pat, va_list *args)

vwarn Ini ialah antara muka XS kepada fungsi "amaran" Perl.

"pat" dan "args" ialah corak format gaya sprintf dan hujah terkapsul
senarai. Ini digunakan untuk menjana mesej rentetan. Jika mesej tidak tamat
dengan baris baharu, maka ia akan dilanjutkan dengan beberapa petunjuk arus
lokasi dalam kod, seperti yang diterangkan untuk "mess_sv".

Mesej ralat atau objek secara lalai akan ditulis kepada ralat standard, tetapi ini
tertakluk kepada pengubahsuaian oleh pengendali $SIG{__WARN__}.

Tidak seperti "vcroak", "tepuk" tidak dibenarkan menjadi batal.

void vwarn(const char *pat, va_list *args)

warn Ini ialah antara muka XS kepada fungsi "amaran" Perl.

Ambil corak format gaya sprintf dan senarai hujah. Ini digunakan untuk menjana
mesej rentetan. Jika mesej tidak berakhir dengan baris baharu, maka ia akan menjadi
dilanjutkan dengan beberapa petunjuk lokasi semasa dalam kod, seperti yang diterangkan
untuk "mess_sv".

Mesej ralat atau objek secara lalai akan ditulis kepada ralat standard, tetapi ini
tertakluk kepada pengubahsuaian oleh pengendali $SIG{__WARN__}.

Tidak seperti "kuak", "tepuk" tidak dibenarkan menjadi batal.

batal amaran(const char *tepuk, ...)

warn_sv Ini ialah antara muka XS kepada fungsi "amaran" Perl.

"baseex" ialah mesej atau objek ralat. Jika ia adalah rujukan, ia akan digunakan
apa adanya. Jika tidak, ia digunakan sebagai rentetan, dan jika ia tidak berakhir dengan baris baharu
maka ia akan dilanjutkan dengan beberapa petunjuk lokasi semasa dalam kod,
seperti yang diterangkan untuk "mess_sv".

Mesej ralat atau objek secara lalai akan ditulis kepada ralat standard, tetapi ini
tertakluk kepada pengubahsuaian oleh pengendali $SIG{__WARN__}.

Untuk memberi amaran dengan mesej rentetan ringkas, fungsi "amaran" mungkin lebih mudah.

batal warn_sv(SV *baseex)

Tidak berdokumen fungsi


Fungsi berikut telah dibenderakan sebagai sebahagian daripada API awam, tetapi pada masa ini
tidak berdokumen. Gunakannya atas risiko anda sendiri, kerana antara muka tertakluk kepada perubahan.
Fungsi yang tidak disenaraikan dalam dokumen ini tidak bertujuan untuk kegunaan awam, dan sepatutnya
TIDAK boleh digunakan dalam apa jua keadaan.

Jika anda menggunakan salah satu fungsi tidak berdokumen di bawah, anda mungkin ingin mempertimbangkan untuk mencipta dan
mengemukakan dokumentasi untuknya. Jika tampalan anda diterima, ini akan menunjukkan bahawa
antara muka adalah stabil (melainkan ia ditandakan sebaliknya secara eksplisit).

GetVars
Gv_AMupdate
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_belum dibaca
PerlIO_write
panggilan_amagic
amagic_deref_call
sebarang_dup
atfork_lock
atfork_unlock
av_arylen_p
av_iter_p
block_gimme
call_atexit
senarai_panggilan
calloc
cast_i32
cast_iv
cast_ulong
cast_uv
ck_warner
ck_warner_d
ckwarn
ckwarn_d
clone_params_del
clone_params_new
croak_memory_wrap
croak_nocontext
csighandler
cx_dump
cx_dup
cxinc
deb
deb_nocontext
debop
debprofdump
timbunan sampah
debstackptrs
delimcpy
despatch_signals
die_nocontext
dirp_dup
do_aspawn
do_binmode
buat_tutup
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
melakukan_cemar
doref
melepas angin
dowantarray
dump_eval
dump_form
dump_indent
dump_mstats
dump_sub
dump_vindent
penapis_tambah
penapis_del
penapis_baca
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_nama penuh3
gv_nama penuh4
gv_fetchfile
gv_fetchfile_flags
gv_fetchpv
gv_fetchpvn_flags
gv_fetchsv
gv_nama penuh
gv_nama penuh3
gv_nama penuh4
gv_handler
gv_name_set
dia_menipu
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
tinggalkan_skop
load_module_nocontext
magic_dump
malloc
markstack_grow
mess_nocontext
mfree
mg_dup
mg_size
mini_mktime
lebih banyak suis
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
indeks_cxt saya
my_cxt_init
my_dirfd
my_exit
my_failure_exit
my_flush_all
my_fork
my_lstat
my_memcmp
my_memset
my_pclose
my_popen
my_popen_list
my_setenv
my_socketpair
my_stat
my_strftime
newANONATTRSUB
newANONHASH
newANONLIST
baruANONSUB
baruATTRSUB
newAVREF
baruCVREF
BENTUK baharu
baruGVREF
newGVgen
newGVgen_flags
baruHVREF
baruHVhv
newIO
newMYSUB
newPROG
RV baharu
newSUB
SVREF baharu
newSVpvf_nocontext
new_stackinfo
ninstr
op_refcnt_lock
op_refcnt_unlock
parser_dup
perl_alloc_using
perl_clone_using
pmop_dump
pop_skop
pregcomp
pregexec
pregfree
pregfree2
printf_nocontext
ptr_table_fetch
ptr_table_free
ptr_table_new
ptr_table_split
ptr_table_store
tolak_skop
re_compile
re_dup_guts
re_intuit_start
re_intuit_string
peruntukkan semula
reentrant_free
reentrant_init
reentrant_retry
saiz_reentrant
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
regdump
regdupe_internal
regexec_flags
regfree_internal
reginitcolors
seterusnya
repeatcpy
rninstr
isyarat
rsignal_state
runops_debug
runops_standard
rvpv_dup
safesyscalloc
safesysfree
safesysmalloc
safesysrealloc
simpan_I16
simpan_I32
simpan_I8
save_adelete
save_aelem
save_aelem_flags
simpan_peruntukkan
save_aptr
save_ary
save_bool
save_clearsv
simpan_padam
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
simpan_petunjuk
save_hptr
save_int
save_item
simpan_iv
save_list
simpan_panjang
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
nombor_imbasan
scan_vstring
benih
set_context
set_numeric_local
set_numeric_radix
set_numeric_standard
share_hek
si_dup
ss_dup
stack_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
unlnk
unsharepvn
utf16_to_utf8
utf16_to_utf8_reversed
uvuni_to_utf8
vdeb
vform
vload_module
vnewSVpvf
vwarner
warn_nocontext
pemberi peringatan
warner_nocontext
whichsig
whichsig_pv
whichsig_pvn
whichsig_sv

PENGARANG


Sehingga Mei 1997, dokumen ini diselenggara oleh Jeff Okamotookamoto@corp.hp.com>. Ia adalah
kini dikekalkan sebagai sebahagian daripada Perl itu sendiri.

Dengan banyak bantuan dan cadangan daripada Dean Roehrich, Malcolm Beattie, Andreas Koenig,
Paul Hudson, Ilya Zakharevich, Paul Marquess, Neil Bowers, Matthew Green, Tim Bunce,
Spider Boardman, Ulrich Pfeifer, Stephen McCamant, dan Gurusamy Sarathy.

Penyenaraian API pada asalnya oleh Dean Roehrichroehrich@cray.com>.

Dikemas kini untuk dijana secara automatik daripada komen dalam sumber oleh Benjamin Stuhl.

Gunakan perlapi dalam talian menggunakan perkhidmatan onworks.net



Program dalam talian Linux & Windows terkini