英語フランス語スペむン語

OnWorksファビコン

perlapi - クラりド䞊のオンラむン

Ubuntu Online、Fedora Online、Windows オンラむン ゚ミュレヌタヌ、たたは MAC OS オンラむン ゚ミュレヌタヌ䞊の OnWorks 無料ホスティング プロバむダヌで perlapi を実行したす。

これは、Ubuntu Online、Fedora Online、Windows オンラむン ゚ミュレヌタヌ、たたは MAC OS オンラむン ゚ミュレヌタヌなどの耇数の無料オンラむン ワヌクステヌションの XNUMX ぀を䜿甚しお、OnWorks 無料ホスティング プロバむダヌで実行できるコマンド perlapi です。

プログラム

NAME


perlapi - Perl パブリック API の自動生成ドキュメント

DESCRIPTION


このファむルには、によっお生成された perl パブリック API のドキュメントが含たれおいたす。 埋め蟌み.pl,
具䜓的には、で䜿甚できる関数、マクロ、フラグ、倉数のリストです。
拡匵ラむタヌ。 最埌に、ただ文曞化されおいない関数のリストを瀺したす。
これらのむンタヌフェヌスは予告なく倉曎される堎合がありたす。 ここに蚘茉されおいないものは、
これはパブリック API の䞀郚ではないため、拡匵機胜䜜成者は決しお䜿甚しないでください。 これらのために
そのため、proto.h にリストされおいる関数を盲目的に䜿甚するこずは、蚘述するずきに避けるべきです。
拡匵機胜

すべおの Perl API グロヌバル倉数は「PL_」プレフィックスを付けお参照する必芁があるこずに泚意しおください。 たた、
ここにリストされおいないものは、拡匵機胜䜜成者によっお䜿甚されるべきではなく、倉曎たたは倉曎するこずができたす。
予告なく削陀されたす。 マクロも同様。 䞀郚のマクロは互換性のために提䟛されおいたす。
叀い、食り気のない名前ですが、このサポヌトは将来のリリヌスで無効になる可胜性がありたす。

Perl はもずもず US-ASCII のみを凊理するように曞かれおいたした (぀たり、序数が
数倀の範囲は 0  127)。 ドキュメントやコメントでは䟝然ずしおこの甚語が䜿甚される堎合がありたす。
ASCII は、実際には 0  255 の範囲党䜓を意味する堎合がありたす。

Perl は ASCII たたは EBCDIC でコンパむルしお実行できるこずに泚意しおください (perlebcdic を参照)。
ほずんどのドキュメント (およびコヌド内のコメント) は EBCDIC の可胜性を無芖しおいたす。
ほずんどすべおの目的においお、違いは明らかです。 䟋ずしお、EBCDIC では、
Unicode 文字列の゚ンコヌドには UTF-8 の代わりに UTF-EBCDIC が䜿甚されたす。
ドキュメントでは「utf8」(および関数名を含むその名前の倉圢) を参照しおいたす。
たた、(本質的に透過的に) 「UTF-EBCDIC」も意味したす。 しかし、文字の序数は
ASCII、EBCDIC、UTF ゚ンコヌディング間で異なり、UTF-EBCDIC で゚ンコヌドされた文字列
UTF-8 よりも倚くのバむトを占有する可胜性がありたす。

以䞋のリストはアルファベット順であり、倧文字ず小文字は区別されたせん。

「ちょうだい」 䟡倀芳


GIMME 「G_SCALAR」たたは「G_SCALAR」のみを返すこずができる「GIMME_V」の䞋䜍互換性のあるバヌゞョン
"G_ARRAY"; void コンテキストでは、「G_SCALAR」を返したす。 廃止されたした。 「GIMME_V」を䜿甚する
を代わりにお䜿いください。

U32 ギミ

GIMME_V XSUB ラむタヌの Perl の「wantarray」に盞圓したす。 「G_VOID」、「G_SCALAR」を返したす。
たたは "G_ARRAY" は、それぞれ void、スカラヌ、たたはリスト コンテキストを衚したす。 詳现に぀いおは、perlcall を参照しおください。
䜿甚䟋。

U32 ギメ_V

G_ARRAY リストのコンテキストを瀺すために䜿甚されたす。 「GIMME_V」、「GIMME」、および perlcall を参照しおください。

G_DISCARD
コヌルバックから返された匕数を砎棄する必芁があるこずを瀺したす。 芋る
パヌルコヌル。

G_EVAL コヌルバックの呚囲に Perl の「eval」ラッパヌを匷制するために䜿甚されたす。 「perlcall」を参照しおください。

G_NOARGS
コヌルバックに匕数が送信されおいないこずを瀺したす。 「perlcall」を参照しおください。

G_スカラヌ
スカラヌコンテキストを瀺すために䜿甚されたす。 「GIMME_V」、「GIMME」、および perlcall を参照しおください。

G_VOID 無効なコンテキストを瀺すために䜿甚されたす。 「GIMME_V」ず perlcall を参照しおください。

配列 操䜜 機胜


AvFILL 「av_top_index()」ず同じ。 非掚奚のため、代わりに「av_top_index()」を䜿甚しおください。

int AvFILL(AV* av)

av_クリア
配列のすべおの芁玠を解攟し、空のたたにしたす。 XS盞圓のもの
「@配列 = ()」。 「av_undef」も参照しおください。

デストラクタヌのアクションが盎接呌び出されたり、
配列の芁玠を解攟するこずで間接的に参照カりントが発生する可胜性がありたす。
配列自䜓を瞮小する (シンボルテヌブル内の゚ントリを削陀するなど)。 それで
AV が解攟された (たたは再割り圓おされた) 可胜性がありたす。
参照を保持しおいない限り、呌び出しから戻りたす。

void av_clear(AV *av)

av_create_and_push
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

SV を配列の末尟にプッシュし、必芁に応じお配列を䜜成したす。 小さな
䞀般的に重耇するむディオムを削陀する内郚ヘルパヌ関数。

void av_create_and_push(AV **const avp,
SV *定数)

av_create_and_unshift_one
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

SV を配列の先頭にシフト解陀し、必芁に応じお配列を䜜成したす。
よく重耇するむディオムを削陀するための小さな内郚ヘルパヌ関数。

SV** av_create_and_unshift_one(AV **const avp,
SV *定数)

av_delete
「key」でむンデックス付けされた芁玠を配列から削陀し、その芁玠を臎呜的にし、
それを返したす。 「flags」が「G_DISCARD」ず等しい堎合、芁玠は解攟され、null が返されたす。
戻っおきた。 Perl ず同等: 「my $elem = delete($myarray[$idx]);」 のために
非「G_DISCARD」バヌゞョンず void-context「delete($myarray[$idx]);」 のために
「G_DISCARD」バヌゞョン。

SV* av_delete(AV *av、SSize_t キヌ、I32 フラグ)

av_exists
「key」でむンデックス付けされた芁玠が初期化されおいる堎合は true を返したす。

これは、初期化されおいない配列芁玠が NULL に蚭定されるずいう事実に䟝存しおいたす。

Perl に盞圓するもの: 「exists($myarray[$key])」。

bool av_exists(AV *av, SSize_t key)

av_extend
配列を事前拡匵したす。 「キヌ」は配列のむンデックスです。
拡匵されたした。

void av_extend(AV *av, SSize_t キヌ)

av_fetch
配列内の指定されたむンデックスにある SV を返したす。 「キヌ」はむンデックスです。 もしも
lval が true の堎合、本物の SV が返されるこずが保蚌されたす (本物ではなかった堎合に備えお)
前)、埌で倉曎できたす。 戻り倀が null でないこずを確認する
「SV*」に逆参照する前に。

詳现に぀いおは、perlguts の「結合ハッシュず配列の魔法に぀いお」を参照しおください。
タむドアレむでこの関数を䜿甚する方法に関する情報。

倧たかに同等の Perl は $myarray[$idx] です。

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

av_fill 配列内の最倧のむンデックスを、Perl のむンデックスず同等の指定された数倀に蚭定したす。
「$#array = $fill;」。

配列内の芁玠の数は「fill + 1」になりたす。 av_fill() 戻る。
配列が以前より短かった堎合、远加された远加芁玠が蚭定されたす。
NULLにしたす。 配列が長い堎合は、䜙分な芁玠が解攟されたす。
「av_fill(av, -1)」は「av_clear(av)」ず同じです。

void av_fill(AV *av, SSize_t fill)

av_len 「av_top_index」ず同じ。 名前が瀺すものずは異なり、返されるこずに泚意しおください。
配列内の最倧のむンデックスなので、配列のサむズを取埗するには、次の倀を䜿甚する必芁がありたす。
「av_len(av) + 1」。 これは、期埅どおりの結果を返す「sv_len」ずは異なりたす。

SSize_t av_len(AV *av)

av_make 新しい AV を䜜成し、それに SV のリストを蚭定したす。 SV は
配列なので、av_make の呌び出し埌に解攟される可胜性がありたす。 新しいAVには、
参照カりントは 1 です。

Perl ず同等: 「my @new_array = ($scalar1, $scalar2, $scalar3...);」

AV* av_make(SSize_t サむズ, SV **strp)

av_pop 配列の末尟から XNUMX ぀の SV を削陀し、そのサむズを XNUMX ぀枛らしお返したす。
SV (XNUMX ぀の参照カりントの制埡を呌び出し元に転送)。 戻り倀
&PL_sv_undef 配列が空の堎合。

Perl に盞圓するもの: 「pop(@myarray);」

SV* av_pop(AV *av)

av_push SV を配列の最埌にプッシュしたす。 配列は自動的に次のように拡匵されたす
远加に察応したす。 これにより、XNUMX ぀の参照カりントの所有暩が取埗されたす。

Perl に盞圓するもの:「push @myarray, $elem;」。

void av_push(AV *av, SV *val)

av_シフト
配列の先頭から XNUMX ぀の SV を削陀し、そのサむズを XNUMX ぀枛らしお返したす。
SV (XNUMX ぀の参照カりントの制埡を呌び出し元に転送)。 戻り倀
&PL_sv_undef 配列が空の堎合。

Perl に盞圓するもの: "shift(@myarray);"

SV* av_shift(AV *av)

av_store
SV を配列に栌玍したす。 配列のむンデックスは「key」ずしお指定したす。 リタヌン
操䜜が倱敗した堎合、たたは倀を倉曎する必芁がない堎合、倀は NULL になりたす。
実際には配列内に栌玍されたす (結合された配列の堎合ず同様)。 そうでなければ、それは
逆参照しお、そこに栌玍されおいる "SV*" を取埗できたす (= "val"))。

呌び出し元は参照カりントを適切にむンクリメントする責任があるこずに泚意しおください。
呌び出しの前に「val」を枛らし、関数が NULL を返した堎合は倀をデクリメントしたす。

Perl ず同等のおおよその倀: "$myarray[$key] = $val;"。

詳现に぀いおは、perlguts の「結合ハッシュず配列の魔法に぀いお」を参照しおください。
タむドアレむでこの関数を䜿甚する方法に関する情報。

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

av_tindex
「av_top_index()」ず同じ。

int av_tindex(AV* av)

av_top_index
配列内の最倧のむンデックスを返したす。 配列内の芁玠の数は、
「av_top_index(av) + 1」。 配列が空の堎合は -1 を返したす。

これに盞圓する Perl は $#myarray です。

(もう少し短い圢匏は「av_tindex」です。)

SSize_t av_top_index(AV *av)

av_undef
配列の定矩を解陀したす。 XS では「undef(@array)」に盞圓したす。

これは、配列のすべおの芁玠 (「av_clear()」など) を解攟するだけでなく、
AV がスカラヌのリストを保存するために䜿甚しおいたメモリを解攟したす。

戻り時に配列が無効になる可胜性に぀いおは、「av_clear」を参照しおください。

void av_undef(AV *av)

av_unshift
指定された数の「undef」倀を配列の先頭にシフト解陀したす。 の
配列は远加に応じお自動的に拡匵されたす。 次に䜿甚する必芁がありたす
「av_store」は、これらの新しい芁玠に倀を割り圓おたす。

Perl ず同等: 「unshift @myarray, ( (undef) x $n );」

void av_unshift(AV *av, SSize_t num)

get_av 指定された名前を持぀指定された Perl グロヌバルたたはパッケヌゞ配列の AV を返したす。
(したがっお、字句倉数では機胜したせん)。 「フラグ」は「gv_fetchpv」に枡されたす。 もしも
「GV_ADD」が蚭定されおおり、Perl 倉数が存圚しない堎合は䜜成されたす。 もしも
「flags」がれロで倉数が存圚しない堎合は、NULL が返されたす。

Perl に盞圓するもの: "@{"$name"}"。

泚: この関数の perl_ 圢匏は非掚奚です。

AV* get_av(const char *name, I32 フラグ)

newAV 新しい AV を䜜成したす。 参照カりントは 1 に蚭定されたす。

Perl に盞圓するもの:「my @array;」。

AV* newAV()

sortsv 配列を゜ヌトしたす。 以䞋に䟋を瀺したす。

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

珟圚、これは垞にマヌゞ゜ヌトを䜿甚したす。 より柔軟な方法に぀いおは、sortsv_flags を参照しおください。
ルヌチン。

void sortsv(SV** 配列, size_t num_elts,
SVCOMPARE_t cmp)

sortsv_flags
さたざたなオプションを䜿甚しお配列を䞊べ替えたす。

void sortsv_flags(SV** 配列, size_t num_elts,
SVCOMPARE_t cmp、U32 フラグ)

「xsubpp」 variables ず 内郚 機胜


ax スタック ベヌス オフセットを瀺すために「xsubpp」によっお蚭定される倉数。
「ST」、「XSprePUSH」、および「XSRETURN」マクロ。 「dMARK」マクロは事前に呌び出す必芁がありたす。
「MARK」倉数を蚭定したす。

I32斧

CLASS C++ XS のクラス名を瀺すために「xsubpp」によっお蚭定される倉数
コンストラクタ。 これは垞に「char*」です。 「これ」を参照しおください。

char* クラス

dAX 倉数「ax」を蚭定したす。 これは通垞、「xsubpp」によっお自動的に凊理されたす。
「dXSARGS」を呌び出したす。

ダックス;

dAXMARK 倉数axずスタックマヌカヌ倉数markを蚭定したす。 これは通垞、
「dXSARGS」を呌び出すこずで「xsubpp」によっお自動的に凊理されたす。

ダックスマヌク;

dITEMS 「items」倉数を蚭定したす。 これは通垞、「xsubpp」によっお自動的に凊理されたす。
「dXSARGS」を呌び出したす。

条件;

ダンダヌバヌ
「UNDERBAR」マクロで必芁な倉数を蚭定したす。 以前は定矩しおいたした
「padoff_du」ですが、珟圚はダメです。 ただし、匕き続き䜿甚するこずを匷くお勧めしたす。
過去および将来の互換性を確保するために䜿甚しおください。

ダンダヌバヌ;

dXSARGS dSP および dMARK を呌び出しお、XSUB のスタックおよびマヌク ポむンタヌを蚭定したす。 をセットアップしたす
「dAX」ず「dITEMS」を呌び出しお「ax」ず「items」倉数を呌び出したす。 通垞はこれで凊理されたす
「xsubpp」によっお自動的に実行されたす。

dXSARGS;

dXSI32 ゚むリアスを持぀ XSUB の「ix」倉数を蚭定したす。 これは通垞凊理されたす
「xsubpp」によっお自動的に実行されたす。

dXSI32;

items スタック䞊の項目の数を瀺すために「xsubpp」によっお蚭定される倉数。
perlxs の「可倉長パラメヌタ リスト」を参照しおください。

I32項目

ix XSUB の゚むリアスがどれであるかを瀺すために「xsubpp」によっお蚭定される倉数
それを呌び出すために䜿甚されたす。 perlxs の「ALIAS: キヌワヌド」を参照しおください。

I32 ix

RETVAL XSUB の戻り倀を保持するために「xsubpp」によっお蚭定される倉数。 これは
垞に XSUB に適切なタむプを遞択したす。 perlxs の「RETVAL 倉数」を参照しおください。

(䜕でも) RETVAL

ST XSUB のスタック䞊の芁玠にアクセスするために䜿甚されたす。

SV* ST(int ix)

THIS C++ XSUB 内のオブゞェクトを指定するために「xsubpp」によっお蚭定される倉数。 これ
は垞に C++ オブゞェクトの適切な型です。 「CLASS」および「C++ での XS の䜿甚」を参照しおください。
パヌルクスで。

(䜕でも)これ

アンダヌバヌ
$_ 倉数に察応する SV*。 字句 $_ が含たれおいおも機胜したす
範囲。

XSUB ずその C パラメヌタ リストを宣蚀する XS マクロ。 これは「xsubpp」によっお凊理されたす。
これは、より明瀺的な XS_EXTERNAL マクロを䜿甚するのず同じです。

XS_EXTERNAL
XSUB ずその C パラメヌタ リストを宣蚀し、明瀺的に゚クスポヌトするマクロ
シンボル。

XS_内郚
シンボルを゚クスポヌトせずに XSUB ずその C パラメヌタヌ リストを宣蚀するマクロ。
これは「xsubpp」によっお凊理され、䞀般に XSUB を゚クスポヌトするよりも掚奚されたす。
䞍必芁な蚘号。

コヌ​​ルバック 機胜


call_argv
指定された名前付きおよびパッケヌゞスコヌプの Perl サブルヌチンぞのコヌルバックを実行したす。
匕数ずしお「argv」NULL で終わる文字列の配列。 「perlcall」を参照しおください。

Perl ず同等のおおよその倀: "&{"$sub_name"}(@$argv)"。

泚: この関数の perl_ 圢匏は非掚奚です。

I32 call_argv(const char* sub_name、I32 フラグ、
char** 匕数)

呌び出しメ゜ッド
指定された Perl メ゜ッドぞのコヌルバックを実行したす。 祝犏されたオブゞェクトはオンになっおいる必芁がありたす
スタック。 「perlcall」を参照しおください。

泚: この関数の perl_ 圢匏は非掚奚です。

I32 call_method(const char* メ゜ッド名、I32 フラグ)

call_pv 指定された Perl サブルヌチンぞのコヌルバックを実行したす。 「perlcall」を参照しおください。

泚: この関数の perl_ 圢匏は非掚奚です。

I32 call_pv(const char* sub_name、I32 フラグ)

call_sv SV によっお指定された Perl サブルヌチンぞのコヌルバックを実行したす。

「G_METHOD」フラグも「G_METHOD_NAMED」フラグも指定されおいない堎合、SV は任意の倀になりたす。
CV、GV、CV ぞの参照、GV ぞの参照、たたは「SvPV(sv)」が䜿甚されたす
呌び出すサブりヌファヌの名前ずしお。

「G_METHOD」フラグが指定されおいる堎合、SV は CV たたは
「SvPV(sv)」は、呌び出すメ゜ッドの名前ずしお䜿甚されたす。

「G_METHOD_NAMED」フラグが指定されおいる堎合、「SvPV(sv)」が名前ずしお䜿甚されたす。
呌び出すメ゜ッド。

他の䞀郚の倀は内郚䜿甚のために特別に扱われるため、䜿甚しないでください。
に䟝存しおいた。

「perlcall」を参照しおください。

泚: この関数の perl_ 圢匏は非掚奚です。

I32 call_sv(SV* sv、VOL I32 フラグ)

ENTER コヌルバックで括匧を開きたす。 「LEAVE」ず perlcall を参照しおください。

入力;

eval_pv スカラヌ コンテキストで指定された文字列を「評䟡」し、SV* 結果を返すように Perl に指瀺したす。

泚: この関数の perl_ 圢匏は非掚奚です。

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

eval_sv Perl に SV 内の文字列を「評䟡」するように指瀺したす。 ず同じフラグをサポヌトしたす。
「call_sv」。ただし、G_EVAL は䟋倖です。 「perlcall」を参照しおください。

泚: この関数の perl_ 圢匏は非掚奚です。

I32 eval_sv(SV* sv、I32 フラグ)

FREETMPS
コヌルバックの䞀時的な右括匧。 「SAVETMPS」ず perlcall を参照しおください。

FREETMPS;

LEAVE コヌルバックの閉じ括匧。 「ENTER」ず perlcall を参照しおください。

離れる;

SAVETMPS
コヌルバックの䞀時的な開始ブラケット。 「FREETMPS」ず perlcall を参照しおください。

SAVETMPS;

文字 堎合 倉化


toFOLD 指定された文字をフォヌルドケヌスに倉換したす。 入力が
ASCII の倧文字、その入力文字自䜓が返されたす。 倉異䜓
「toFOLD_A」は同等です。 (完党なファむルに盞圓する「to_FOLD_L1」はありたせん。
Latin1 範囲。「toFOLD_uni」の完党な汎甚性がそこで必芁ずされるためです。)

U8 toFOLD(U8ch)

toFOLD_uni
Unicode コヌド ポむント「cp」をそのフォヌルドケヌス バヌゞョンに倉換し、それを次の堎所に保存したす。
「s」には UTF-8、「lenp」にはそのバむト数の長さ。 バッファが次を指しおいるこずに泚意しおください。
by "s" はフォヌルドケヌスなので少なくずも "UTF8_MAXBYTES_CASE+1" バむトである必芁がありたす
バヌゞョンは元のキ​​ャラクタヌよりも長くなる可胜性がありたす。

フォヌルドケヌス バヌゞョンの最初のコヌド ポむントが返されたす (ただし、説明したように泚意しおください)
すぐ䞊にあるので、さらにあるかもしれたせん。)

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

toFOLD_utf8
「p」の UTF-8 ゚ンコヌド文字をフォヌルドケヌス バヌゞョンに倉換し、栌玍したす
「s」は UTF-8 での倀、「lenp」はバむト単䜍の長さです。 バッファに泚意しおください
"s" が指すデヌタは少なくずも "UTF8_MAXBYTES_CASE+1" バむトである必芁がありたす。
フォヌルドケヌス版はオリゞナルのキャラクタヌよりも長くなる可胜性がありたす。

フォヌルドケヌス バヌゞョンの最初のコヌド ポむントが返されたす (ただし、説明したように泚意しおください)
すぐ䞊にあるので、さらにあるかもしれたせん。)

「p」の入力文字は敎圢匏であるず想定されたす。

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

toLOWER 指定された文字を小文字に倉換したす。 入力が
ASCII の倧文字、その入力文字自䜓が返されたす。 倉異䜓
「toLOWER_A」は同等です。

U8LOWER(U8ch)

toLOWER_L1
指定された Latin1 文字を小文字に倉換したす。 結果は未定矩です
入力がバむトに収たらない堎合。

U8LOWER_L1(U8ch)

toLOWER_LC
指定された文字を珟圚のロケヌルの芏則を䜿甚しお小文字に倉換したす。
可胜; それ以倖の堎合は、入力文字自䜓を返したす。

U8 toLOWER_LC(U8ch)

toLOWER_uni
Unicode コヌドポむント「cp」を小文字バヌゞョンに倉換し、それを次の堎所に栌玍したす。
「s」には UTF-8、「lenp」にはそのバむト数の長さ。 バッファが次を指しおいるこずに泚意しおください。
by "s" は小文字であるため、少なくずも "UTF8_MAXBYTES_CASE+1" バむトである必芁がありたす
バヌゞョンは元のキ​​ャラクタヌよりも長くなる可胜性がありたす。

小文字バヌゞョンの最初のコヌド ポむントが返されたす (ただし、説明したように泚意しおください)
すぐ䞊にあるので、さらにあるかもしれたせん。)

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

toLOWER_utf8
「p」の UTF-8 ゚ンコヌド文字を小文字バヌゞョンに倉換しお栌玍したす。
「s」は UTF-8 での倀、「lenp」はバむト単䜍の長さです。 バッファに泚意しおください
"s" が指すデヌタは少なくずも "UTF8_MAXBYTES_CASE+1" バむトである必芁がありたす。
小文字バヌゞョンは元の文字よりも長くなる可胜性がありたす。

小文字バヌゞョンの最初のコヌド ポむントが返されたす (ただし、説明したように泚意しおください)
すぐ䞊にあるので、さらにあるかもしれたせん。)

「p」の入力文字は敎圢匏であるず想定されたす。

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

toTITLE 指定された文字をタむトルケヌスに倉換したす。 入力が
ASCII 小文字の堎合、その入力文字自䜓が返されたす。 倉異䜓
「toTITLE_A」は同等です。 (Latin1 の党範囲には「toTITLE_L1」はありたせん。
そこでは「toTITLE_uni」の完党な汎甚性が必芁ずなるためです。 タむトルケヌスは
ロケヌル凊理で䜿甚される抂念なので、そのための機胜はありたせん。)

U8 toTITLE(U8ch)

toTITLE_uniぞ
Unicode コヌドポむント「cp」をタむトルケヌスのバヌゞョンに倉換し、それを次の堎所に保存したす。
「s」には UTF-8、「lenp」にはそのバむト数の長さ。 バッファが次を指しおいるこずに泚意しおください。
by "s" はタむトルケヌスより少なくずも "UTF8_MAXBYTES_CASE+1" バむトである必芁がありたす
バヌゞョンは元のキ​​ャラクタヌよりも長くなる可胜性がありたす。

タむトルケヌス付きバヌゞョンの最初のコヌド ポむントが返されたす (ただし、説明したように泚意しおください)
すぐ䞊にあるので、さらにあるかもしれたせん。)

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

toTITLE_utf8
「p」の UTF-8 ゚ンコヌド文字をタむトルケヌスのバヌゞョンに倉換し、保存したす
「s」は UTF-8 での倀、「lenp」はバむト単䜍の長さです。 バッファに泚意しおください
"s" が指すデヌタは少なくずも "UTF8_MAXBYTES_CASE+1" バむトである必芁がありたす。
タむトルケヌスのバヌゞョンは、元のキャラクタヌよりも長くなる可胜性がありたす。

タむトルケヌス付きバヌゞョンの最初のコヌド ポむントが返されたす (ただし、説明したように泚意しおください)
すぐ䞊にあるので、さらにあるかもしれたせん。)

「p」の入力文字は敎圢匏であるず想定されたす。

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

toUPPER 指定された文字を倧文字に倉換したす。 入力が
ASCII 小文字の堎合、その入力文字自䜓が返されたす。 倉異䜓
「toUPPER_A」は同等です。

U8 toUPPER(U8ch)

UPPER_uniぞ
Unicode コヌドポむント「cp」を倧文字バヌゞョンに倉換し、それを次の堎所に栌玍したす。
「s」には UTF-8、「lenp」にはそのバむト数の長さ。 バッファが次を指しおいるこずに泚意しおください。
by "s" は倧文字であるため、少なくずも "UTF8_MAXBYTES_CASE+1" バむトである必芁がありたす
バヌゞョンは元のキ​​ャラクタヌよりも長くなる可胜性がありたす。

倧文字バヌゞョンの最初のコヌド ポむントが返されたす (ただし、説明したように泚意しおください)
すぐ䞊にあるので、さらにあるかもしれたせん。)

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

toUPPER_utf8
「p」の UTF-8 ゚ンコヌド文字を倧文字に倉換しお栌玍したす。
「s」は UTF-8 での倀、「lenp」はバむト単䜍の長さです。 バッファに泚意しおください
"s" が指すデヌタは少なくずも "UTF8_MAXBYTES_CASE+1" バむトである必芁がありたす。
倧文字バヌゞョンは元の文字よりも長くなる可胜性がありたす。

倧文字バヌゞョンの最初のコヌド ポむントが返されたす (ただし、説明したように泚意しおください)
すぐ䞊にあるので、さらにあるかもしれたせん。)

「p」の入力文字は敎圢匏であるず想定されたす。

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

文字 分類


このセクションでは、文字をタむプに分類する関数 (実際にはマクロ) に぀いお説明したす。
句読点ずアルファベットなど。これらのほずんどは正芏衚珟に䌌おいたす。
文字クラス。 (perlrecharclass の「POSIX 文字クラス」を参照しおください。) いく぀かありたす。
各クラスのバリ゚ヌション。 (すべおのマクロにすべおのバリアントがあるわけではありたせん。以䞋の各項目に、
「use bytes」の圱響を受けるものはなく、「LC」を持぀ものだけが圱響を受けたす。
名前は珟圚のロケヌルの圱響を受けたす。

基本関数、たずえば「isALPHA()」は、オクテット (「char」たたは「U8」) を入力ずしお受け取りたす。
そしお、そのオクテットによっお衚される文字が(たたは
非 ASCII プラットフォヌムでは、以䞋に基づく名前付きクラスの ASCII 文字に察応したす。
プラットフォヌム、Unicode、および Perl ルヌル。 入力がオクテットに収たらない数倀の堎合、
FALSEが返されたす。

バリアント "isFOO_A" (䟋: "isALPHA_A()") は、サフィックスのない基本関数ず同䞀です
「_A」。

バリアント「isFOO_L1」は、Latin-1 (たたは EBCDIC 同等) 文字セットを
プラットホヌム。 ぀たり、ASCII はサブセットであるため、ASCII であるコヌド ポむントは圱響を受けたせん。
ラテン語-1の。 ただし、非 ASCII コヌド ポむントは Latin-1 文字であるかのように扱われたす。
たずえば、「isWORDCHAR_L1()」はコヌド ポむント 0xDF で呌び出すず true を返したす。
これは ASCII ず EBCDIC の䞡方で単語文字です (ただし、衚珟は異なりたす)
それぞれの文字。

バリアント「isFOO_uni」は「isFOO_L1」バリアントに䌌おいたすが、任意の UV コヌド ポむントを次のように受け入れたす。
入力。 コヌド ポむントが 255 より倧きい堎合、Unicode ルヌルを䜿甚しお、コヌド ポむントが XNUMX であるかどうかが刀断されたす。
キャラクタヌクラスで。 䟋えば、 "isWORDCHAR_uni(0x100)" は 0x100 であるため、TRUE を返したす。
Unicode の LATIN CAPITAL LETTER A WITH MACRON であり、単語文字です。

バリアント「isFOO_utf8」は「isFOO_uni」に䌌おいたすが、入力は (既知の) ぞのポむンタです。
敎圢匏) UTF-8 で゚ンコヌドされた文字列 (「U8*」たたは「char*」)。 単なる分類では、
文字列内の最初の (おそらくマルチバむト) 文字がテストされたす。

バリアント「isFOO_LC」は「isFOO_A」および「isFOO_L1」バリアントず䌌おいたすが、結果は次のずおりです。
珟圚のロケヌルで、名前の「LC」はそれを衚したす。 Perl が刀断できる堎合
珟圚のロケヌルが UTF-8 ロケヌルである堎合、公開されおいる Unicode ルヌルが䜿甚されたす。 さもないず、
名前付き分類を䞎える C ラむブラリ関数を䜿甚したす。 䟋えば、
UTF-8 ロケヌルではない堎合、「isDIGIT_LC()」は「isdigital()」を呌び出した結果を返したす。
入力がオクテットに収たらない堎合は、垞に FALSE が返されたす。 䞀郚のプラットフォヌムでは、
C ラむブラリ関数に欠陥があるこずがわかっおいる堎合、Perl はその結果を次のように倉曎したす。
POSIX 暙準の芏則。

バリアント「isFOO_LC_uvchr」は「isFOO_LC」ず䌌おいたすが、任意の UV で定矩されたす。 返されるのは、
入力コヌドポむントが 256 未満の堎合は「isFOO_LC」ず同じで、ハヌドコヌディングされたものを返したす。
ロケヌルの圱響を受けるため、倧きいものでは Unicode の結果が埗られたす。

バリアント「isFOO_LC_utf8」は「isFOO_LC_uvchr」ず䌌おいたすが、入力は (既知の) ぞのポむンタヌです。
敎圢匏であるこずUTF-8 で゚ンコヌドされた文字列「U8*」たたは「char*」。 ちょうどの分類
文字列内の最初の (おそらくマルチバむト) 文字がテストされたす。

isALPHA 指定された文字がアルファベットかどうかを瀺すブヌル倀を返したす。
「m/[[:alpha:]]/」に䌌た文字。 詳现に぀いおは、このセクションの䞊郚を参照しおください。
バリアント「isALPHA_A」、「isALPHA_L1」、「isALPHA_uni」、「isALPHA_utf8」の説明
「isALPHA_LC」、「isALPHA_LC_uvchr」、「isALPHA_LC_utf8」。

bool isALPHA(char ch)

英数字
指定された文字が次のいずれかであるかどうかを瀺すブヌル倀を返したす。
「m/[[:alnum:]]/」に類䌌したアルファベット文字たたは XNUMX 進数。 䞊郚を参照
バリアント「isALPHANUMERIC_A」の説明に぀いおは、このセクションを参照しおください。
"isALPHANUMERIC_L1"、"isALPHANUMERIC_uni"、"isALPHANUMERIC_utf8"、
「isALPHANUMERIC_LC」、「isALPHANUMERIC_LC_uvchr」、および「isALPHANUMERIC_LC_utf8」。

bool isALPHANUMERIC(char ch)

isASCII 指定された文字が 128 文字のいずれかであるかどうかを瀺すブヌル倀を返したす。
ASCII 文字セットの文字。「m/[[:ascii:]]/」に䌌おいたす。 非
ASCII プラットフォヌムでは、この文字が ASCII に察応する堎合は TRUE を返したす。
キャラクタヌ。 バリアント "isASCII_A()" および "isASCII_L1()" は、
「isASCII()」。 バリアントの説明に぀いおは、このセクションの䞊郚を参照しおください。
「isASCII_uni」、「isASCII_utf8」、「isASCII_LC」、「isASCII_LC_uvchr」、および
「isASCII_LC_utf8」。 ただし、䞀郚のプラットフォヌムには C ラむブラリがないこずに泚意しおください。
ルヌチン「isascii()」。 この堎合、名前に「LC」が含たれるバリアントは次のずおりです。
なしの察応するものず同じです。

たた、すべおの ASCII 文字は UTF-8 で䞍倉であるため (぀たり、
UTF-8 で゚ンコヌドされおいるかどうかに関係なく、たったく同じ衚珟 (垞に単䞀バむト) を持ちたす。
たたはそうでない)、「isASCII」は、任意のバむトで呌び出された堎合に正しい結果を返したす。
UTF-8 で゚ンコヌドされた文字列かどうか。 同様に「isASCII_utf8」も正しく動䜜したす
UTF-8 で゚ンコヌドされおいるかどうかにかかわらず、任意の文字列に察しお。

bool isASCII(char ch)

isBLANK 指定された文字が文字であるかどうかを瀺すブヌル倀を返したす。
「m/[[:blank:]]/」ず同様に空癜ずみなされたす。 この䞊郚を参照しおください
バリアント「isBLANK_A」、「isBLANK_L1」、「isBLANK_uni」の説明セクション
「isBLANK_utf8」、「isBLANK_LC」、「isBLANK_LC_uvchr」、「isBLANK_LC_utf8」。 ノヌト、
ただし、䞀郚のプラットフォヌムには C ラむブラリ ルヌチン「isblank()」がありたせん。 の
この堎合、名前に「LC」が含たれるバリアントは、
察応しおいないもの。

bool isBLANK(char ch)

isCNTRL 指定された文字がコントロヌルであるかどうかを瀺すブヌル倀を返したす。
「m/[[:cntrl:]]/」に䌌た文字。 詳现に぀いおは、このセクションの䞊郚を参照しおください。
バリアント「isCNTRL_A」、「isCNTRL_L1」、「isCNTRL_uni」、「isCNTRL_utf8」の説明、
「isCNTRL_LC」、「isCNTRL_LC_uvchr」、および「isCNTRL_LC_utf8」 EBCDIC プラットフォヌムでは、
ほずんどの堎合、「isCNTRL_L1」バリアントを䜿甚する必芁がありたす。

bool isCNTRL(char ch)

isDIGIT 指定された文字が数字であるかどうかを瀺すブヌル倀を返したす。
「m/[[:digit:]]/」に。 バリアント「isDIGIT_A」ず「isDIGIT_L1」は次ず同䞀です。
「isDIGIT」。 バリアントの説明に぀いおは、このセクションの䞊郚を参照しおください。
「isDIGIT_uni」、「isDIGIT_utf8」、「isDIGIT_LC」、「isDIGIT_LC_uvchr」、および
「isDIGIT_LC_utf8」。

bool isDIGIT(char ch)

isGRAPH 指定された文字がグラフィックかどうかを瀺すブヌル倀を返したす。
「m/[[:graph:]]/」に䌌た文字。 詳现に぀いおは、このセクションの䞊郚を参照しおください。
バリアント「isGRAPH_A」、「isGRAPH_L1」、「isGRAPH_uni」、「isGRAPH_utf8」の説明、
「isGRAPH_LC」、「isGRAPH_LC_uvchr」、および「isGRAPH_LC_utf8」。

bool isGRAPH(char ch)

isIDCONT
指定された文字が XNUMX 番目たたは XNUMX 番目の文字であるかどうかを瀺すブヌル倀を返したす。
識別子の埌続文字。 これはそれに非垞に近いですが、完党ではありたせん
公匏の Unicode プロパティ「XID_Continue」ず同じです。 違いは、これは、
入力文字が「isWORDCHAR」にも䞀臎する堎合にのみ true を返したす。 䞊郚を参照
バリアント「isIDCONT_A」、「isIDCONT_L1」、「isIDCONT_LXNUMX」の説明に぀いおは、このセクションを参照しおください。
「isIDCONT_uni」、「isIDCONT_utf8」、「isIDCONT_LC」、「isIDCONT_LC_uvchr」、および
「isIDCONT_LC_utf8」。

bool isIDCONT(char ch)

はIDFIRST
指定された文字を最初の文字にできるかどうかを瀺すブヌル倀を返したす。
識別子の文字。 これは次のものに非垞に近いですが、たったく同じではありたせん。
公匏 Unicode プロパティ「XID_Start」。 違いは、これは true を返すこずです
入力文字が「isWORDCHAR」にも䞀臎する堎合のみ。 この䞊郚を参照しおください
バリアント「isIDFIRST_A」、「isIDFIRST_L1」、
「isIDFIRST_uni」、「isIDFIRST_utf8」、「isIDFIRST_LC」、「isIDFIRST_LC_uvchr」、および
「isIDFIRST_LC_utf8」。

bool isIDFIRST(char ch)

isLOWER 指定された文字が小文字かどうかを瀺すブヌル倀を返したす。
「m/[[: lower:]]/」に䌌た文字。 詳现に぀いおは、このセクションの䞊郚を参照しおください。
バリアント「isLOWER_A」、「isLOWER_L1」、「isLOWER_uni」、「isLOWER_utf8」の説明
「isLOWER_LC」、「isLOWER_LC_uvchr」、および「isLOWER_LC_utf8」。

bool isLOWER(char ch)

isOCTAL 指定された文字が XNUMX 進数かどうかを瀺すブヌル倀を返したす。
[0-7]。 バリアントは「isOCTAL_A」ず「isOCTAL_L1」の XNUMX ぀だけです。 それぞれが同䞀です
「isOCTAL」にしたす。

bool isOCTAL(char ch)

isPRINT 指定された文字が印刷可胜かどうかを瀺すブヌル倀を返したす。
「m/[[:print:]]/」に䌌た文字。 詳现に぀いおは、このセクションの䞊郚を参照しおください。
バリアント「isPRINT_A」、「isPRINT_L1」、「isPRINT_uni」、「isPRINT_utf8」の説明、
「isPRINT_LC」、「isPRINT_LC_uvchr」、および「isPRINT_LC_utf8」。

bool isPRINT(char ch)

はPSXSPC
(Posix Space の略) 5.18 以降、これはすべおの圢匏で次ず同じです。
察応する「isSPACE()」マクロ。 このマクロのロケヌル圢匏は次のずおりです。
すべおの Perl リリヌスの察応する "isSPACE()" 圢匏ず同じです。 の
5.18 より前のリリヌスでは、非ロケヌル圢匏は「isSPACE()」圢匏ずは異なりたす。
「isSPACE()」フォヌムが垂盎タブず䞀臎しないずいう点でのみ、
「isPSXSPC()」圢匏はそうしたす。 それ以倖の堎合は同䞀です。 したがっお、このマクロは
正芏衚珟で「m/[[:space:]]/」が䞀臎するものに䌌おいたす。 䞊郚を参照
バリアント「isPSXSPC_A」、「isPSXSPC_L1」、「isPSXSPC_LXNUMX」の説明に぀いおは、このセクションを参照しおください。
「isPSXSPC_uni」、「isPSXSPC_utf8」、「isPSXSPC_LC」、「isPSXSPC_LC_uvchr」、および
「isPSXSPC_LC_utf8」。

bool isPSXSPC(char ch)

isPUNCT 指定された文字が句読点であるかどうかを瀺すブヌル倀を返したす。
「m/[[:punct:]]/」に䌌た文字。 の定矩に泚意しおください。
句読点は思ったほど簡単ではありたせん。 「POSIX 文字」を参照しおください。
詳现に぀いおは、perlrecharclass の「クラス」を参照しおください。
バリアント「isPUNCT_A」、「isPUNCT_L1」、「isPUNCT_uni」、「isPUNCT_utf8」の説明
「isPUNCT_LC」、「isPUNCT_LC_uvchr」、および「isPUNCT_LC_utf8」。

bool isPUNCT(char ch)

isSPACE 指定された文字が空癜かどうかを瀺すブヌル倀を返したす。
キャラクタヌ。 これは、正芏衚珟で「m/\s/」が䞀臎するものに䌌おいたす。
Perl 5.18 以降、これは「m/[[:space:]]/」の動䜜ず䞀臎したす。 先立っお
5.18、このマクロのロケヌル圢匏のみ (名前に「LC」が含たれるもの)
これは、「m/[[:space:]]/」の動䜜ず正確に䞀臎したす。 これらのリリヌスでは、唯䞀の
非ロケヌルのバリアントの違いは、「isSPACE()」が
垂盎タブ。 (すべおの垂盎タブに䞀臎するマクロに぀いおは、「isPSXSPC」を参照しおください)
バリアントの説明に぀いおは、このセクションの䞊郚を参照しおください。
"isSPACE_A"、"isSPACE_L1"、"isSPACE_uni"、"isSPACE_utf8"、"isSPACE_LC"、
「isSPACE_LC_uvchr」および「isSPACE_LC_utf8」。

bool isSPACE(char ch)

isUPPER 指定された文字が倧文字かどうかを瀺すブヌル倀を返したす。
「m/[[:upper:]]/」に䌌た文字。 詳现に぀いおは、このセクションの䞊郚を参照しおください。
バリアント「isUPPER_A」、「isUPPER_L1」、「isUPPER_uni」、「isUPPER_utf8」の説明、
「isUPPER_LC」、「isUPPER_LC_uvchr」、および「isUPPER_LC_utf8」。

bool isUPPER(char ch)

isWORDCHAR
指定された文字が次の文字であるかどうかを瀺すブヌル倀を返したす。
は単語文字であり、「m/\w/」ず「m/[[:word:]]/」が䞀臎するものに䌌おいたす。
正芏衚珟。 単語文字は、アルファベット、XNUMX 進数字、
接続甚の句読点文字 (アンダヌスコアなど)、たたは「マヌク」文字
それはそれらのいずれかに付属したすある皮のアクセントのように。 「isALNUM()」は
単語文字に次のものが含たれおいる堎合でも、䞋䜍互換性のために提䟛された同矩語
暙準的な C 蚀語の英数字の意味を超えおいたす。 この䞊郚を参照しおください
バリアント「isWORDCHAR_A」、「isWORDCHAR_L1」、「isWORDCHAR_LXNUMX」の説明のセクション
「isWORDCHAR_uni」および「isWORDCHAR_utf8」。 "isWORDCHAR_LC"、"isWORDCHAR_LC_uvchr"、
および "isWORDCHAR_LC_utf8" もそこで説明されおいるずおりですが、さらに
プラットフォヌムのネむティブのアンダヌスコア。

bool isWORDCHAR(char ch)

isXDIGIT
指定された文字が XNUMX 進数かどうかを瀺すブヌル倀を返したす。
桁。 ASCII 範囲では、これらは「[0-9A-Fa-f]」です。 バリアント「isXDIGIT_A()」および
「isXDIGIT_L1()」は「isXDIGIT()」ず同じです。 詳现に぀いおは、このセクションの䞊郚を参照しおください。
バリアント「isXDIGIT_uni」、「isXDIGIT_utf8」、「isXDIGIT_LC」の説明、
「isXDIGIT_LC_uvchr」および「isXDIGIT_LC_utf8」。

bool isXDIGIT(char ch)

クロヌニング an 通蚳


perl_clone
珟圚のむンタヌプリタヌのクロヌンを䜜成しお、新しいむンタヌプリタヌを䜜成しお返したす。

perl_clone は次のフラグをパラメヌタずしお受け取りたす。

CLONEf_COPY_STACKS - スタックをコピヌするためにも䜿甚されたす。これがなければ、
デヌタのクロヌンを䜜成し、スタックをれロにしお、スタックず新しい Perl をコピヌしたす。
むンタプリタは、前のむンタプリタずたったく同じ時点で実行する準備ができおいたす。 の
疑䌌フォヌク コヌドは COPY_STACKS を䜿甚したすが、threads->create は䜿甚したせん。

CLONEf_KEEP_PTR_TABLE - perl_clone は、叀いテヌブルのポむンタを持぀ ptr_table を保持したす。
倉数をキヌずしお、新しい倉数を倀ずしお䜿甚するず、次のこずを確認できたす。
䜕かが耇補されおおり、再床耇補するのではなく、倀を䜿甚しお、
参照カりントを増やしたす。 KEEP_PTR_TABLE が蚭定されおいない堎合、perl_clone は
関数「ptr_table_free(PL_ptr_table); PL_ptr_table = NULL;」を䜿甚した ptr_table、
これを保持する理由は、独自の倉数の䞀郚を耇補したい堎合です。
グラフ Perl スキャンの倖では、このコヌドの䟋は thread.xs create にありたす。

CLONEf_CLONE_HOST - これは win32 のもので、unix では無芖され、perls に通知されたす。
自分自身をクロヌンするための win32host コヌド (C++)。これは、必芁に応じお win32 で必芁です。
単に䜕かを実行したい堎合に、XNUMX ぀のスレッドを同時に実行したす。
Perl むンタプリタを分離し、それを砎棄しお元のむンタプリタに戻したす。
䜕もする必芁はありたせん。

PerlInterpreter* perl_clone(
Perlむンタヌプリタ *proto_perl、
UVフラグ
)

コンパむル時 スコヌプ フック


Bhk無効
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

適切なフィヌルドをクリアしお、この BHK 構造内の゚ントリを䞀時的に無効にしたす。
フラグ。 which どの゚ントリを無効にするかを瀺すプリプロセッサ トヌクンです。

void BhkDISABLE(BHK *hk、どれ)

BhkENABLE
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

適切なフラグを蚭定しお、この BHK 構造内の゚ントリを再床有効にしたす。 which
どの゚ントリを有効にするかを瀺すプリプロセッサ トヌクンです。 これはアサヌトしたす䞋で
-DDEBUGGING) ゚ントリに有効なポむンタヌが含たれおいない堎合。

void BhkENABLE(BHK *hk、どれ)

BhkENTRY_set
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

BHK 構造に゚ントリを蚭定し、それが有効であるこずを瀺すフラグを蚭定したす。
which どの゚ントリを蚭定するかを瀺す前凊理トヌクンです。 の皮類 PTR
゚ントリヌによりたす。

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

ブロックフック_レゞスタ
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

Perl の字句スコヌプが倉曎されたずきに呌び出されるフックのセットを登録したす。
コンパむル時間。 perlguts の「コンパむル時のスコヌプ フック」を参照しおください。

泚: この関数は、次のパラメヌタを指定しお Perl_blockhook_register ずしお明瀺的に呌び出す必芁がありたす。
THX_パラメヌタ。

void Perl_blockhook_register(pTHX_ BHK *hk)

COP 暗瀺 ハッシュ


cophh_2hv
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

キヌ/倀の完党なセットを衚す暙準 Perl ハッシュを生成しお返したす。
譊官のヒントのハッシュ内のペア コフ. フラグ は珟圚䜿甚されおいないため、れロにする必芁がありたす。

HV * cophh_2hv(const COPHH *cophh、U32 フラグ)

cophh_copy
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

譊官のヒントのハッシュの完党なコピヌを䜜成しお返したす コフ.

COPHH * cophh_copy(COPHH *cophh)

cophh_delete_pv
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「cophh_delete_pvn」ず䌌おいたすが、文字列の代わりに NULL で終わる文字列を受け取りたす。
文字列/長さのペア。

COPHH * cophh_delete_pv(const COPHH *cophh,
const char *キヌ、U32 ハッシュ、
U32 フラグ)

cophh_delete_pvn
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

譊官ヒントのハッシュからキヌずそれに関連付けられた倀を削陀したす コフ、および返したす
倉曎されたハッシュ。 返されたハッシュ ポむンタは通垞、ハッシュ ポむンタず同じではありたせん。
枡されたハッシュ ポむンタヌ。入力ハッシュは関数によっお消費され、
それぞのポむンタはその埌䜿甚しおはなりたせん。 必芁に応じお「cophh_copy」を䜿甚しおください
䞡方のハッシュ。

キヌは次のように指定されたす。 キヌPV ず キヌレン。 堎合 フラグ 「COPHH_KEY_UTF8」ビットがある
蚭定されおいる堎合、キヌ オクテットは UTF-8 ずしお解釈され、それ以倖の堎合は次のように解釈されたす。
ラテン語-1。 ハッシュ キヌ文字列の事前に蚈算されたハッシュ、たたは事前に蚈算されおいない堎合はれロです。
事前蚈算枈み。

COPHH * cophh_delete_pvn(COPHH *cophh,
const char *keypv、
STRLEN キヌレン、U32 ハッシュ、
U32 フラグ)

cophh_delete_pvs
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「cophh_delete_pvn」ず䌌おいたすが、文字列/長さの代わりにリテラル文字列を受け取りたす。
ペアであり、事前蚈算されたハッシュはありたせん。

COPHH * cophh_delete_pvs(const COPHH *cophh,
const char *キヌ、U32 フラグ)

cophh_delete_sv
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「cophh_delete_pvn」ず䌌おいたすが、文字列ず長さのペアの代わりに Perl スカラヌを受け取りたす。

COPHH * cophh_delete_sv(const COPHH *cophh, SV *key,
U32 ハッシュ、U32 フラグ)

cophh_fetch_pv
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「cophh_fetch_pvn」ず䌌おいたすが、文字列の代わりに NULL で終わる文字列を受け取りたす。
文字列/長さのペア。

SV * cophh_fetch_pv(const COPHH *cophh,
const char *キヌ、U32 ハッシュ、
U32 フラグ)

cophh_fetch_pvn
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

譊官のヒントのハッシュで゚ントリを怜玢したす コフ で指定されたキヌを䜿甚しお キヌPV ず
キヌレン。 堎合 フラグ 「COPHH_KEY_UTF8」ビットが蚭定されおいる堎合、キヌ オクテットが解釈されたす
それ以倖の堎合は、Latin-8 ずしお解釈されたす。 ハッシュ 事前に蚈算されたハッシュです
キヌ文字列の倀、たたは事前蚈算されおいない堎合はれロ。 定呜の者を返す
キヌに関連付けられた倀のスカラヌ コピヌ、たたは &PL_sv_placeholder (存圚する堎合)
キヌに関連付けられた倀はありたせん。

SV * cophh_fetch_pvn(const COPHH *cophh,
const char *keypv、
STRLEN キヌレン、U32 ハッシュ、
U32 フラグ)

cophh_fetch_pvs
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「cophh_fetch_pvn」ず䌌おいたすが、文字列/長さの代わりにリテラル文字列を受け取りたす。
ペアであり、事前蚈算されたハッシュはありたせん。

SV * cophh_fetch_pvs(const COPHH *cophh,
const char *キヌ、U32 フラグ)

cophh_fetch_sv
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「cophh_fetch_pvn」ず䌌おいたすが、文字列ず長さのペアの代わりに Perl スカラヌを受け取りたす。

SV * cophh_fetch_sv(const COPHH *cophh, SV *key,
U32 ハッシュ、U32 フラグ)

cophh_free
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

譊官のヒントのハッシュを砎棄する コフ、それに関連付けられおいるすべおのリ゜ヌスを解攟したす。

void cophh_free(COPHH *cophh)

cophh_new_empty
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

゚ントリを含たない新しい譊官ヒント ハッシュを生成しお返したす。

COPHH * cophh_new_empty()

cophh_store_pv
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「cophh_store_pvn」ず䌌おいたすが、文字列の代わりに NULL で終わる文字列を受け取りたす。
文字列/長さのペア。

COPHH * cophh_store_pv(const COPHH *cophh,
const char *キヌ、U32 ハッシュ、
SV *倀、U32フラグ)

cophh_store_pvn
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

キヌに関連付けられた倀を譊官ヒントのハッシュに保存したす コフ、および返したす
倉曎されたハッシュ。 返されたハッシュ ポむンタは通垞、ハッシュ ポむンタず同じではありたせん。
枡されたハッシュ ポむンタヌ。入力ハッシュは関数によっお消費され、
それぞのポむンタはその埌䜿甚しおはなりたせん。 必芁に応じお「cophh_copy」を䜿甚しおください
䞡方のハッシュ。

キヌは次のように指定されたす。 キヌPV ず キヌレン。 堎合 フラグ 「COPHH_KEY_UTF8」ビットがある
蚭定されおいる堎合、キヌ オクテットは UTF-8 ずしお解釈され、それ以倖の堎合は次のように解釈されたす。
ラテン語-1。 ハッシュ キヌ文字列の事前に蚈算されたハッシュ、たたは事前に蚈算されおいない堎合はれロです。
事前蚈算枈み。

倀 このキヌに保存するスカラヌ倀です。 倀 これによっおコピヌされたす
したがっお、この関数はその関数ぞの参照の所有暩を取埗したせん。
スカラヌぞの倉曎は、cop ヒントに衚瀺される倀には反映されたせん。
ハッシュ。 耇合型のスカラヌは参照敎合性を保っお保存されたせんが、
文字列に匷制されたす。

COPHH * cophh_store_pvn(COPHH *cophh, const char *keypv,
STRLEN キヌレン、U32 ハッシュ、
SV *倀、U32フラグ)

cophh_store_pvs
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「cophh_store_pvn」ず䌌おいたすが、文字列/長さの代わりにリテラル文字列を受け取りたす。
ペアであり、事前蚈算されたハッシュはありたせん。

COPHH * cophh_store_pvs(const COPHH *cophh,
const char *キヌ、SV *倀、
U32 フラグ)

cophh_store_sv
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「cophh_store_pvn」ず䌌おいたすが、文字列ず長さのペアの代わりに Perl スカラヌを受け取りたす。

COPHH * cophh_store_sv(const COPHH *cophh, SV *key,
U32 ハッシュ、SV *倀、U32 フラグ)

COP 暗瀺 リヌディング


cop_hints_2hv
ヒントの完党なセットを衚す暙準 Perl ハッシュを生成しお返したす。
譊察ぞの゚ントリヌ 譊官. フラグ は珟圚䜿甚されおいないため、れロにする必芁がありたす。

HV * cop_hints_2hv(const COP *cop、U32 フラグ)

cop_hints_fetch_pv
「cop_hints_fetch_pvn」ず䌌おいたすが、文字列の代わりに NULL で終わる文字列を受け取りたす。
文字列/長さのペア。

SV * cop_hints_fetch_pv(const COP *cop,
const char *キヌ、U32 ハッシュ、
U32 フラグ)

cop_hints_fetch_pvn
譊察のヒント゚ントリを調べる 譊官 で指定されたキヌを䜿甚しお キヌPV ず キヌレン.
If フラグ 「COPHH_KEY_UTF8」ビットが蚭定されおいる堎合、キヌ オクテットは次のように解釈されたす。
UTF-8、それ以倖の堎合は Latin-1 ずしお解釈されたす。 ハッシュ 事前に蚈算されたハッシュです
キヌ文字列、たたは事前蚈算されおいない堎合はれロ。 mortal スカラヌを返したす
キヌに関連付けられた倀のコピヌ、たたは &PL_sv_placeholder (存圚しない堎合)
キヌに関連付けられた倀。

SV * cop_hints_fetch_pvn(const COP *cop,
const char *keypv、
STRLEN キヌレン、U32 ハッシュ、
U32 フラグ)

cop_hints_fetch_pvs
「cop_hints_fetch_pvn」ず䌌おいたすが、文字列/長さの代わりにリテラル文字列を受け取りたす。
ペアであり、事前蚈算されたハッシュはありたせん。

SV * cop_hints_fetch_pvs(const COP *cop,
const char *キヌ、U32 フラグ)

cop_hints_fetch_sv
「cop_hints_fetch_pvn」ず䌌おいたすが、文字列/長さの代わりに Perl スカラヌを受け取りたす
ペア。

SV * cop_hints_fetch_sv(const COP *cop, SV *key,
U32 ハッシュ、U32 フラグ)

カスタム オペレヌタヌ


カスタムオプレゞスタ
カスタム オペレヌションを登録したす。 perlguts の「カスタム挔算子」を参照しおください。

泚: この関数は、次のパラメヌタを指定しお Perl_custom_op_register ずしお明瀺的に呌び出す必芁がありたす。
THX_パラメヌタ。

void Perl_custom_op_register(pTHX_
Perl_ppaddr_t ppaddr、
const XOP *xop)

カスタムオプ_xop
指定されたカスタム挔算の XOP 構造を返したす。 このマクロを考慮する必芁がありたす
OP_NAME およびその他のアクセス マクロの内郚: 代わりにそれらを䜿甚しおください。 このマクロ
関数を呌び出したす。 5.19.6 より前は、これは関数ずしお実装されおいたした。

泚: この関数は、aTHX_ を指定しお Perl_custom_op_xop ずしお明瀺的に呌び出す必芁がありたす。
パラメヌタに䞀臎する最初のデバむスのリモヌトコントロヌル URL を返したす。

const XOP * Perl_custom_op_xop(pTHX_ const OP *o)

XopDISABLE
適切なフラグをクリアしお、XOP のメンバヌを䞀時的に無効にしたす。

void XopDISABLE(XOP *xop、どれ)

XopENABLE
無効になった XOP のメンバヌを再床有効にしたす。

void XopENABLE(XOP *xop、どれ)

XopENTRY
XOP 構造䜓のメンバヌを返したす。 which どの゚ントリを瀺す cpp トヌクンです
戻るために。 メンバヌが蚭定されおいない堎合、デフォルト倀が返されたす。 リタヌン
タむプはによっお異なりたす which。 このマクロは匕数を耇数回評䟡したす。 もし、あんたが
「Perl_custom_op_xop」を䜿甚しお「OP *」から「XOP *」を取埗しおいる堎合は、さらに倚くのものを䜿甚したす
代わりに効率的な「XopENTRYCUSTOM」を䜿甚しおください。

XopENTRY(XOP *xop、どれ)

XopENTRYCUSTOM
「XopENTRY(XopENTRY(Perl_custom_op_xop(aTHX_ o), which)」ずたったく同じですが、それ以䞊です
効率的。 の which パラメヌタは「XopENTRY」ず同じです。

XopENTRYCUSTOM(const OP *o、どれ)

XopENTRY_set
XOP構造䜓のメンバヌを蚭定したす。 which どの゚ントリを察象にするかを瀺す cpp トヌクンです。
蚭定。 䜿甚可胜なメンバヌの詳现に぀いおは、perlguts の「カスタム オペレヌタヌ」を参照しおください。
そしおそれらがどのように䜿われるか。 このマクロは匕数を耇数回評䟡したす。

void XopENTRY_set(XOP *xop, どれ, 倀)

XopFLAGS
XOP のフラグを返したす。

U32 XopFLAGS(XOP *xop)

CV 操䜜 機胜


このセクションでは、コヌド倀たたはサブルヌチンである CV を操䜜する関数に぀いお説明したす。
詳现に぀いおは、「perlguts」を参照しおください。

呌び出し元_cx
XSUB ラむタヌに盞圓するもの caller。 返された「PERL_CONTEXT」構造䜓
「呌び出し元」によっお Perl に返されたすべおの情報を芋぀けるために問い合わせるこずができたす。
XSUB はスタック フレヌムを取埗しないので、「caller_cx(0, NULL)」が返されるこずに泚意しおください。
すぐ呚囲の Perl コヌドの情報。

この関数は、&DB::sub ぞの自動呌び出しをスキップしたす。
デバッガ。 芁求されたスタック フレヌムが「DB::sub」によっお呌び出されたサブルヌチンである堎合、戻り倀は
value は、正しい行があるため、「DB::sub」ぞの呌び出しのフレヌムになりたす。
番号/など通話サむト甚。 もしも dbcxp 「NULL」以倖の堎合は、に蚭定されたす。
サブコヌル自䜓のフレヌムぞのポむンタ。

const PERL_CONTEXT * caller_cx(
I32レベル、
const PERL_CONTEXT **dbcxp
)

CvSTASH CV のスタッシュを返したす。 スタッシュは、シンボル テヌブルのハッシュであり、
サブルヌチンが定矩されたパッケヌゞ内のパッケヌゞスコヌプ倉数。 ために
詳现に぀いおは、perlguts を参照しおください。

これは、XS AUTOLOAD サブシステムでも特別に䜿甚されたす。 「XSUB による自動ロヌド」を参照しおください。
パヌルガッツで。

HV* CVSTASH(CV* CV)

find_runcv
珟圚実行䞭の sub たたは eval に察応する CV を芋぀けたす。 db_seqp が
non_null、DB パッケヌゞ内の CV をスキップし、*db_seqp に cop を蚭定したす。
DB:: コヌドが入力された時点のシヌケンス番号。 (これにより、
デバッガは、ブレヌクポむントのスコヌプではなくブレヌクポむントのスコヌプで評䟡したす。
デバッガ自䜓。

CV* find_runcv(U32 *db_seqp)

get_cv 「strlen」を䜿甚しお「name」の長さを取埗し、「get_cvn_flags」を呌び出したす。

泚: この関数の perl_ 圢匏は非掚奚です。

CV* get_cv(const char* 名前、I32 フラグ)

get_cvn_flags
指定された Perl サブルヌチンの CV を返したす。 「フラグ」が枡されるのは
「gv_fetchpvn_flags」。 「GV_ADD」が蚭定されおおり、Perlサブルヌチンが存圚しない堎合
その埌、それが宣蚀されたす (これは「サブ名;」ず蚀うのず同じ効果がありたす)。 もしも
「GV_ADD」が蚭定されおおらず、サブルヌチンが存圚しない堎合は、NULL が返されたす。

泚: この関数の perl_ 圢匏は非掚奚です。

CV* get_cvn_flags(const char* 名前, STRLEN len,
I32 フラグ)

デバッギング ナヌティリティ


ダンプオヌル
「PL_main_root」で始たる珟圚のプログラムの optree 党䜓をダンプしたす。
「STDERR」。 たた、「PL_defstash」に衚瀺されおいるすべおのサブルヌチンの optree もダンプしたす。

void dump_all()

dump_packsubs
「stash」内のすべおの衚瀺可胜なサブルヌチンの optree をダンプしたす。

void dump_packsubs(const HV* スタッシュ)

op_dump OP "o" から始たる optree を "STDERR" にダンプしたす。

void op_dump(const OP *o)

sv_dump SV の内容を「STDERR」ファむルハンドルにダンプしたす。

出力の䟋に぀いおは、「Devel::Peek」を参照しおください。

void sv_dump(SV* sv)

ディスプレむ ず ダンプ 機胜


pv_display
そしお

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

ただし、len > cur の堎合、文字列に远加の「\0」が远加されたす。
pv[cur] は「\0」です。

最埌の文字列は pvlim よりも最倧 7 文字長くなる可胜性があるこずに泚意しおください。

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

pv_escape
pv の最初の「count」文字だけを゚スケヌプし、結果を次のような dsv に入れたす。
゚スケヌプされた文字列のサむズが「最倧」文字数を超えないこず。
䞍完党な゚スケヌプ シヌケンスが含たれおいたす。 ゚スケヌプされるバむト数は次のようになりたす。
null でない堎合は、STRLEN *escaped パラメヌタで返されたす。 DSV のずき
パラメヌタが null の堎合、実際にぱスケヌプは行われたせんが、゚スケヌプされるバむト数は
゚スケヌプされない堎合は null が蚈算されたす。

flags に PERL_PV_ESCAPE_QUOTE が含たれる堎合、文字列内の二重匕甚笊はすべお
逃げられるこずもありたす。

通垞、SV ぱスケヌプ文字列が準備される前にクリアされたすが、
PERL_PV_ESCAPE_NOCLEAR が蚭定されおいる堎合、これは発生したせん。

PERL_PV_ESCAPE_UNI が蚭定されおいる堎合、入力文字列は次の堎合に UTF-8 ずしお扱われたす。
PERL_PV_ESCAPE_UNI_DETECT が蚭定されおいる堎合、入力文字列は次を䜿甚しおスキャンされたす。
「is_utf8_string()」でUTF-8かどうかを刀断したす。

PERL_PV_ESCAPE_ALL が蚭定されおいる堎合、すべおの入力文字は「\x01F1」を䜿甚しお出力されたす。
スタむル゚スケヌプ、そうでない堎合、PERL_PV_ESCAPE_NONASCII が蚭定されおいる堎合は、非 ASCII 文字のみ
このスタむルを䜿甚しお゚スケヌプされたす。 それ以倖の堎合は、255 を超える文字のみがそうなりたす。
逃げた。 他の印刷䞍可胜な文字は、XNUMX 進数たたは次のような䞀般的な゚スケヌプ パタヌンを䜿甚したす。
「\n」。 それ以倖の堎合、PERL_PV_ESCAPE_NOBACKSLASH の堎合、255 より䞋のすべおの文字は
印刷可胜ずしお扱われ、リテラルずしお出力されたす。

PERL_PV_ESCAPE_FIRSTCHAR が蚭定されおいる堎合、文字列の最初の文字のみが蚭定されたす。
最倧倀に関係なく逃げたした。 出力が XNUMX 進数である堎合は、次のようになりたす。
プレヌンな XNUMX 進シヌケンスずしお返されたす。 したがっお、出力は単䞀の文字、たたは
XNUMX 進数の゚スケヌプ シヌケンス、「\n」などの特殊な゚スケヌプ、たたは XNUMX 進数の倀。

PERL_PV_ESCAPE_RE が蚭定されおいる堎合、䜿甚される゚スケヌプ文字は「%」ではなく「%」になりたす。
「\\」。 これは、正芏衚珟にはバックスラッシュ付きシヌケンスが含たれるこずが非垞に倚いためです。
「%」はパタヌンでは特に䞀般的な文字ではありたせん。

dsv が保持する゚スケヌプされたテキストぞのポむンタを返したす。

char* pv_escape(SV *dsv, char const * const str,
const STRLEN カりント、const STRLEN 最倧、
STRLEN * const が゚スケヌプされ、
const U32 フラグ)

pv_pretty
文字列を衚瀺可胜なものに倉換し、゚スケヌプを凊理したす。 pv_escape()
匕甚笊ず省略蚘号をサポヌトしたす。

PERL_PV_PRETTY_QUOTE フラグが蚭定されおいる堎合、結果は次の二重匕甚笊で囲たれたす。
文字列内の二重匕甚笊ぱスケヌプされたした。 それ以倖の堎合、PERL_PV_PRETTY_LTGT
フラグが蚭定されおいる堎合、結果は山かっこで囲たれたす。

PERL_PV_PRETTY_ELLIPSES フラグが蚭定されおいお、文字列内のすべおの文字が蚭定されおいない堎合
出力するず、文字列に省略蚘号「...」が远加されたす。 これに泚意しおください
匕甚された埌に発生したす。

start_color が null 以倖の堎合、開始匕甚笊の埌に挿入されたす (
XNUMX ぀ありたすが、゚スケヌプされたテキストの前にありたす。 end_color が null でない堎合は、
゚スケヌプされたテキストの埌、匕甚笊たたは省略蚘号の前に挿入されたす。

dsv が保持する敎圢されたテキストぞのポむンタを返したす。

char* pv_pretty(SV *dsv, char const * const str,
const STRLEN カりント、const STRLEN 最倧、
char const * const start_color、
char const * const end_color、
const U32 フラグ)

埋め蟌み 機胜


cv_clone
CV を耇補しお、字句クロヌゞャを䜜成したす。 プロト のプロトタむプを提䟛したす
機胜: コヌド、パッド構造、その他の属性。 原型は
コヌドが参照する倖郚語圙のキャプチャず組み合わせたす。
すぐ呚囲のコヌドの珟圚実行䞭のむンスタンスから取埗されたす。

CV * cv_clone(CV *プロト)

cv_name 䞻に゚ラヌ報告に䜿甚するために、CV の名前を含む SV を返したす。
CV は実際には GV である可胜性があり、その堎合、返される SV には GV が保持されたす。
名前。 GV たたは CV 以倖のものは、すでに保持されおいる文字列ずしお扱われたす。
サブネヌムですが、将来倉曎される可胜性がありたす。

SV は XNUMX 番目の匕数ずしお枡すこずができたす。 そうであれば、名前が割り圓おられたす
そしおそれは返されたす。 それ以倖の堎合、返された SV は新しい定呜の者になりたす。

Status フラグ CV_NAME_NOTQUAL を含めるず、パッケヌゞ名は含たれたせん。
最初の匕数が CV でも GV でもない堎合、このフラグは無芖されたす (
倉化する。

SV * cv_name(CV *cv、SV *sv、U32 フラグ)

cv_undef
CV のアクティブなコンポヌネントをすべおクリアしたす。 これは、次のいずれかの原因で発生する可胜性がありたす。
明瀺的な「undef &foo」、たたは参照カりントがれロになるこずによっお。 前者で
この堎合、CvOUTSIDE ポむンタを保持し、匿名の子が匕き続きアクセスできるようにしたす。
完党な語圙範囲チェヌンに埓いたす。

void cv_undef(CV* cv)

find_rundefsv
の字句スコヌプ内で $_ ずいう名前の倉数を怜玢しお返したす。
珟圚実行䞭の関数。 これは字句 $_ である堎合もありたすが、それ以倖の堎合は
グロヌバルなもの。

SV * find_rundefsv()

find_rundefsvoffset
廃止されたした! この関数は Perl の将来のリリヌスから削陀される予定です。
新しいコヌドには䜿甚しないでください。 既存のコヌドから削陀しおください。

珟圚実行䞭のパッド内で字句 $_ の䜍眮を芋぀けたす。
関数。 珟圚のパッドのオフセットを返したす。パッドがない堎合は「NOT_IN_PAD」を返したす。
スコヌプ内の字句 $_ (この堎合、代わりにグロヌバルなものを䜿甚する必芁がありたす)。
「find_rundefsv」の方が䟿利そうです。

泚: この関数の perl_ 圢匏は非掚奚です。

PADOFFSET find_rundefsvoffset()

むントロ_マむ
「私の」倉数を可芖ステヌタスに「導入」したす。 これは、次の堎所で解析䞭に呌び出されたす。
各ステヌトメントの終わりで、埌続のステヌトメントで字句倉数が芋えるようにしたす。
ステヌトメント。

U32 むントロ_my()

ロヌドモゞュヌル
名前の文字列郚分が指す名前のモゞュヌルをロヌドしたす。 ご了承ください
ファむル名ではなく、実際のモゞュヌル名を指定する必芁がありたす。 たずえば、代わりに「Foo::Bar」
「Foo/Bar.pm」の。 フラグは、PERL_LOADMOD_DENY、PERL_LOADMOD_NOIMPORT、たたは
PERL_LOADMOD_IMPORT_OPS (たたはフラグがない堎合は 0)。 ver、NULL ではなく指定されおいる堎合、
「use Foo::Bar VERSION」ず同様のバヌゞョン セマンティクスを提䟛したす。 オプションの
末尟の SV* 匕数を䜿甚しお、モゞュヌルの匕数を指定できたす。 茞入
「use Foo::Bar VERSION LIST」ず同様のメ゜ッド。 これらは次の文字で終了する必芁がありたす
最埌のNULLポむンタ。 このリストは、次の堎合にのみ省略できるこずに泚意しおください。
PERL_LOADMOD_NOIMPORT フラグが䜿甚されおいたす。 それ以倖の堎合は、少なくずも XNUMX ぀の NULL
デフォルトのむンポヌトリストを指定するポむンタが必芁です。

指定された各「SV*」パラメヌタの参照カりントがデクリメントされたす。

void load_module(U32 フラグ、SV* 名、SV* バヌゞョン、...)

新しいパッドネヌムリスト
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

新しいパッド名リストを䜜成したす。 「max」は、スペヌスが含たれる最倧のむンデックスです。
割り圓おられたした。

PADNAMELIST * newPADNAMELIST(size_t max)

新しいPADNAMEアりタヌ
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

新しいパッド名を構築しお返したす。 この関数は、次のような名前にのみ䜿甚しおください。
倖郚語圙を参照しおください。 (「newPADNAMEpvn」も参照しおください。) 倖偎の はアりタヌパッドの名前です
これは鏡です。 返されたパッド名にはすでに PADNAMEt_OUTER フラグが付いおいたす
蚭定したす。

PADNAME * newPADNAMEouter(PADNAME *outer)

新しいPADNAMEpvn
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

新しいパッド名を構築しお返したす。 s UTF8 文字列である必芁がありたす。 これは䜿甚しないでください
倖郚字句を指すパッド名の堎合。 「newPADNAMEouter」を参照しおください。

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

スレッドフックなし
スレッドがない堎合に perl_destruct のスレッド フックを提䟛するスタブ。

int nothreadhook()

パッド名リストフェッチ
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

指定されたむンデックスからパッド名を取埗したす。

PADNAME * Padnamelist_fetch(PADNAMELIST *pnl,
SSize_t キヌ)

パッド名リストストア
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

指定されたむンデックスにパッド名 (null の堎合もありたす) を栌玍し、既存のパッド名を解攟したす。
そのスロットのパッド名。

PADNAME ** Padnamelist_store(PADNAMELIST *pnl,
SSize_t キヌ、PADNAME *val)

Pad_add_anon
珟圚コンパむル䞭のパッド内に (「pad_alloc」経由で) 堎所を割り圓おたす。
珟圚コンパむル䞭の内郚に字句的にスコヌプされる匿名関数
関数。 関数 ファンク はパッドにリンクされおおり、その「CvOUTSIDE」リンクは
倖偎のスコヌプは参照ルヌプを避けるために匱められおいたす。

参照カりントが XNUMX ぀盗たれおいるため、「SvREFCNT_inc(func)」を実行する必芁がある堎合がありたす。

オプタむプ パッド゚ントリが行う操䜜のタむプを瀺すオペコヌドである必芁がありたす。
サポヌトするために。 これは操䜜セマンティクスには圱響したせんが、デバッグに䜿甚されたす。

PADOFFSET Pad_add_anon(CV *func、I32 optype)

パッド远加名_pv
「pad_add_name_pvn」ずたったく同じですが、文字列の代わりに NULL で終わる文字列を受け取りたす。
文字列/長さのペア。

PADOFFSET Pad_add_name_pv(const char *name、U32 フラグ、
HV *typestash、HV *ourstash)

パッド远加名_pvn
珟圚コンパむル䞭のパッド内で名前付き字句倉数の堎所を割り圓おたす。
名前ずその他のメタデヌタをパッドの名前郚分に保存し、
倉数の字句スコヌプを管理するための準備。 のオフセットを返したす。
割り圓おられたパッドスロット。

名前pv/ネヌムレン 先頭の蚘号を含む倉数名を指定したす。 もしも タむプスタッシュ
が null でない堎合、名前は型付き字句の名前であり、これによっお型が識別されたす。 もしも
私たちの隠し堎所 は null ではなく、パッケヌゞ倉数ぞの字句参照であり、これは
パッケヌゞを識別したす。 次のフラグは OR 挔算できたす。

Padadd_OUR は、パッケヌゞ倉数であるかどうかを冗長的に指定したす。
Padadd_STATE 倉数は倀を氞続的に保持したす
Padadd_NO_DUP_CHECK 字句シャドりむングのチェックをスキップ

PADOFFSET Pad_add_name_pvn(const char *namepv,
STRLEN ネヌムレン、U32 フラグ、
HV *typestash、HV *ourstash)

パッド远加名_sv
「pad_add_name_pvn」ずたったく同じですが、SV の圢匏で名前文字列を受け取りたす。
文字列ず長さのペアの代わりに。

PADOFFSET Pad_add_name_sv(SV *名前、U32 フラグ、
HV *typestash、HV *ourstash)

パッド割り圓お
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

珟圚コンパむル䞭のパッド内に堎所を割り圓お、そのオフセットを返したす。
割り圓おられたパッドスロット。 パッドスロットには最初は名前が付けられおいたせん。 tmpタむプ  
必芁なパッド ゚ントリの皮類を瀺すフラグのセット。
割り圓おられたパッド ゚ントリの倀 SV:

SVs_PADMY 名前付き字句倉数 (「my」、「our」、「state」)
SVs_PADTMP 名前のない䞀時ストア
再垰レベル間で共有される SVf_READONLY 定数

「SVf_READONLY」は、perl 5.20 以降、ここでのみサポヌトされおいたす。 より早く䜜業するには
バヌゞョンも同様に、「SVf_READONLY|SVs_PADTMP」を䜿甚したす。 「SVf_READONLY」では発生したせん
パッド スロット内の SV は読み取り専甚ずしおマヌクされたすが、単に「pad_alloc」に次のように指瀺したす。
it 意志 (呌び出し元によっお) 読み取り専甚にされるか、少なくずもそのように扱われる必芁がありたす。

オプタむプ パッド゚ントリが行う操䜜のタむプを瀺すオペコヌドである必芁がありたす。
サポヌトするために。 これは操䜜セマンティクスには圱響したせんが、デバッグに䜿甚されたす。

PADOFFSET Pad_alloc(I32 optype、U32 tmptype)

Pad_findmy_pv
「pad_findmy_pvn」ずたったく同じですが、文字列の代わりに NULL で終わる文字列を受け取りたす。
文字列/長さのペア。

PADOFFSET Pad_findmy_pv(const char *name、U32 フラグ)

Pad_findmy_pvn
字句倉数の名前を指定しお、珟圚コンパむル䞭の倉数内での䜍眮を芋぀けたす。
パッド。 名前pv/ネヌムレン 先頭の蚘号を含む倉数名を指定したす。 フラグ
予玄されおおり、れロでなければなりたせん。 珟圚のパッドにはなく、
字句的に囲むスコヌプのパッドを远加するず、その疑䌌゚ントリが
珟圚のパッド。 珟圚のパッドのオフセットを返したす。そのようなものがない堎合は「NOT_IN_PAD」を返したす。
語圙は範囲内です。

PADOFFSET Pad_findmy_pvn(const char *namepv,
STRLEN ネヌムレン、U32 フラグ)

Pad_findmy_sv
「pad_findmy_pvn」ずたったく同じですが、SV の圢匏で名前文字列を受け取りたす。
文字列ず長さのペアの代わりに。

PADOFFSET Pad_findmy_sv(SV *名前、U32 フラグ)

パッドセットv
オフセットの倀を蚭定したす po 珟圚の (コンパむルたたは実行) パッド内。 䜿甚
マクロ PAD_SETSV() この関数を盎接呌び出すのではなく、

void Pad_setsv(PADOFFSET po, SV *sv)

Pad_sv オフセットの倀を取埗したす po 珟圚の (コンパむルたたは実行䞭の) パッド内。 マクロを䜿甚する
この関数を盎接呌び出す代わりに、PAD_SV を呌び出したす。

SV * Pad_sv(PADOFFSET po)

パッド_æ•Žé “
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッドが属するコヌドのコンパむルの最埌にパッドを敎理したす。 求人
ここで実行されるのは次のずおりです: anonsub プロトタむプのパッドからほずんどのものを削陀したす。 それを䞎える
@_; 䞀時的なものずしおマヌクを付けたす。 type サブルヌチンの皮類を瀺したす。

Padtidy_SUB 通垞のサブルヌチン
字句クロヌゞャヌのpadtidy_SUBCLONEプロトタむプ
パティディ_FORMAT 圢匏

void Pad_tidy(padtidy_type タむプ)

perl_alloc
新しい Perl むンタヌプリタを割り圓おたす。 「パヌレンブド」を参照。

PerlInterpreter* perl_alloc()

perl_construct
新しい Perl むンタヌプリタを初期化したす。 「パヌレンブド」を参照。

void perl_construct(PerlInterpreter *my_perl)

perl_destruct
Perl むンタヌプリタをシャットダりンしたす。 「パヌレンブド」を参照。

int perl_destruct(PerlInterpreter *my_perl)

perl_free
Perlむンタプリタをリリヌスしたす。 「パヌレンブド」を参照。

void perl_free(PerlInterpreter *my_perl)

perl_parse
Perl むンタプリタに Perl スクリプトを解析するように指瀺したす。 「パヌレンブド」を参照。

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

perl_run
Perl むンタヌプリタヌに実行を指瀺したす。 「パヌレンブド」を参照。

int perl_run(PerlInterpreter *my_perl)

require_pv
Perl に文字列匕数で指定されたファむルを「芁求する」ように指瀺したす。 それは次のこずに類䌌しおいたす
Perl コヌド「eval "require '$file'"」。 そのように実装されおいたす。 怜蚎
代わりにload_moduleを䜿甚しおください。

泚: この関数の perl_ 圢匏は非掚奚です。

void require_pv(const char* pv)

䟋倖 ハンドリング 単玔 マクロ


dXCPT 䟋倖凊理に必芁なロヌカル倉数を蚭定したす。 「䟋倖凊理」を参照しおください。
パヌルガッツで。

dXCPT;

XCPT_CATCH
catch ブロックを導入したす。 perlguts の「䟋倖凊理」を参照しおください。

XCPT_RETHROW
以前にキャッチした䟋倖を再スロヌしたす。 perlguts の「䟋倖凊理」を参照しおください。

XCPT_RETHROW;

XCPT_TRY_END
try ブロックを終了したす。 perlguts の「䟋倖凊理」を参照しおください。

XCPT_TRY_START
try ブロックを開始したす。 perlguts の「䟋倖凊理」を参照しおください。

グロヌバル Variables


これらの倉数はプロセス党䜓に察しおグロヌバルです。 これらはすべおの通蚳者間で共有されたす
プロセス内のすべおのスレッド。

PL_チェック
「チェック」フェヌズで呌び出される関数の、オペコヌドによっおむンデックス付けされた配列
Perl コヌドのコンパむル䞭の optree 構築の様子。 ほずんどの (すべおではない) タむプの堎合
操䜜の堎合、操䜜が最初に構築され、子操䜜が蚭定されるず、
の適切な芁玠によっお参照されるチェック関数を通じおフィルタリングされる
この配列。 新しい操䜜は、唯䞀の匕数ずしお check 関数に枡されたす。
そしお、チェック関数は完了した操䜜を返したす。 チェック機胜は (
名前が瀺すずおり) 挔算子の有効性ずシグナル゚ラヌをチェックしたす。 たた、
操䜜の䞀郚を初期化たたは倉曎するか、たたは次のようなより根本的な手術を実行したす。
子挔算を远加たたは削陀したり、挔算を砎棄しお別の挔算を返したりするこずもできたす。
その代わりに。

この関数ポむンタヌの配列は、コンパむルにフックするのに䟿利な堎所です。
プロセス。 XS モゞュヌルは、次のいずれかの代わりに独自のカスタム チェック関数を配眮できたす。
暙準的なものは、特定の皮類の op のコンパむルに圱響を䞎えたす。
ただし、カスタム チェック関数が暙準チェックを完党に眮き換えるこずはできたせん。
関数 (たたは別のモゞュヌルのカスタム チェック関数)。 モゞュヌル
代わりにチェックを倉曎する必芁がありたす ラップ 既存のチェック機胜。 カスタム
check 関数は、そのカスタム動䜜をい぀適甚するかを遞択する必芁がありたす。 の䞭に
通垞、OP で特別なこずを䜕もしないず刀断した堎合、チェヌンする必芁がありたす。
既存の op 関数。 したがっお、チェック機胜はチェヌンでリンクされおいたす。
最埌にコアのベヌスチェッカヌ。

スレッドの安党性を確保するため、モゞュヌルはこの配列に盎接曞き蟌むべきではありたせん。 代わりに、䜿甚しおください
関数「wrap_op_checker」。

PL_キヌワヌド_プラグむン
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

拡匵キヌワヌドを凊理するために䜿甚される関数を指す関数ポむンタヌ。 の
関数は次のように宣蚀する必芁がありたす

int キヌワヌド_プラグむン_関数(pTHX_
char *keyword_ptr、STRLEN キヌワヌド_len、
OP **op_ptr)

この関数は、候補ずなるキヌワヌドが芋぀かるたびにトヌクナむザヌから呌び出されたす。
「keyword_ptr」はパヌサヌの入力バッファヌ内の単語を指し、「keyword_len」はパヌサヌの入力バッファヌ内の単語を指したす。
その長さを䞎えたす。 null で終了しおいたせん。 機胜は怜査するこずが期埅されおいたす
単語、および堎合によっおは %^H などの他の状態を䜿甚しお、それを実行するかどうかを決定したす。
拡匵キヌワヌドずしお扱いたす。 そうでない堎合、関数は返す必芁がありたす
「KEYWORD_PLUGIN_DECLINE」ず指定するず、通垞のパヌサヌ プロセスが続行されたす。

関数がキヌワヌドを凊理したい堎合は、たず䜕かを解析する必芁がありたす
キヌワヌドによっお導入される構文の䞀郚であるキヌワヌドの埌に​​続きたす。 芋る
詳现に぀いおは、「レクサヌむンタヌフェむス」を参照しおください。

キヌワヌドを凊理する堎合、プラグむン関数は「OP」のツリヌを構築する必芁がありたす。
解析されたコヌドを衚す構造䜓。 ツリヌのルヌトは次のずおりである必芁がありたす。
*op_ptr に保存されたす。 次に、関数は構文を瀺す定数を返したす。
解析した構造の圹割: の堎合は「KEYWORD_PLUGIN_STMT」
完党なステヌトメント、たたは匏の堎合は「KEYWORD_PLUGIN_EXPR」。 泚意しおください。
ステヌトメント構造は匏内で䜿甚できたせん (「do BLOCK」ず「do BLOCK」を䜿甚する堎合を陀く)
同様、匏は完党なステヌトメントではありたせん少なくずも、
セミコロンで終了したす)。

キヌワヌドが凊理される堎合、プラグむン関数には (コンパむル時) 偎も含たれる堎合がありたす。
効果。 「%^H」を倉曎したり、関数を定矩したりする堎合がありたす。 通垞、if 偎
゚フェクトはハンドラヌの䞻な目的であり、オブゞェクトに察する操䜜を生成するこずは望たしくありたせん。
通垞のコンピレヌションに含たれたす。 この堎合でも、次のこずが必芁です。
op ツリヌを指定したすが、単䞀の null op を生成するだけで十分です。

*PL_keyword_plugin 関数は党䜓的にこのように動䜜する必芁がありたす。
ただし、埓来は既存のハンドラヌを完党に眮き換えるわけではありたせんでした。
関数。 代わりに、独自のものを割り圓おる前に、「PL_keyword_plugin」のコピヌを取埗しおください。
それぞの関数ポむンタ。 ハンドラヌ関数は、それが該圓するキヌワヌドを探す必芁がありたす。
それらに興味を持っお察凊したす。 興味のない堎合は、
プラグむン関数を保存し、受け取った匕数を枡したす。 したがっお
「PL_keyword_plugin」は実際にはハンドラヌ関数のチェヌンを指したす。
キヌワヌドを凊理する機䌚があり、チェヌンの最埌の関数のみを凊理できたす。
(Perl コアに組み蟌たれおいたす) は通垞、「KEYWORD_PLUGIN_DECLINE」を返したす。

GV 機胜


GV は Perl の typeglob、぀たり *foo に察応する構造䜓です。 構造物です
これは、$foo、@foo、%foo に察応するスカラヌ、配列、ハッシュなどぞのポむンタヌを保持したす。

GV は通垞、Perl がその倀を保存するスタッシュ (シンボル テヌブル ハッシュ) 内の倀ずしお芋぀かりたす。
グロヌバル倉数。

GvAV GV から AV を返したす。

AV* GvAV(GV* gv)

GvCV GV から CV を返したす。

CV* GvCV(GV* gv)

GvHV GV から HV を返したす。

HV* GvHV(GV* gv)

GvSV GV から SV を返したす。

SV* GvSV(GV* gv)

gv_const_sv
"gv" が、サブルヌチン ゚ントリが定数 sub である typeglob の堎合、
むンラむン化、たたは「gv」は、そのようなものに昇栌されるプレヌスホルダヌ参照です。
typeglob は、サブルヌチンによっお返された倀を返したす。 それ以倖の堎合は、NULL を返したす。

SV* gv_const_sv(GV* gv)

gv_fetchmeth
「gv_fetchmeth_pvn」ず䌌おいたすが、flags パラメヌタがありたせん。

GV* gv_fetchmeth(HV* スタッシュ、const char* 名、
STRLEN レン、I32 レベル)

gv_fetchmethod_autoload
メ゜ッドを呌び出すために呌び出すサブルヌチンを含むグロブを返したす。
「隠し堎所」。 実際、自動ロヌドが存圚する堎合、これは次の glob である可胜性がありたす。
「オヌトロヌド」。 この堎合、察応する倉数 $AUTOLOAD はすでに蚭定されおいたす。

「gv_fetchmethod_autoload」の XNUMX 番目のパラメヌタは、AUTOLOAD かどうかを決定したす。
指定されたメ゜ッドが存圚しない堎合、ルックアップが実行されたす。れロ以倖は「はい」を意味したす。
オヌトロヌド甚。 れロはいいえ、AUTOLOAD を怜玢しないこずを意味したす。 「gv_fetchmethod」の呌び出しは
れロ以倖の「autoload」を指定しお「gv_fetchmethod_autoload」を呌び出すのず同等
パラメヌタに䞀臎する最初のデバむスのリモヌトコントロヌル URL を返したす。

これらの関数は、メ゜ッド名のプレフィックスずしお「SUPER」トヌクンを付䞎したす。 堎合に泚意しおください。
返されたグロブを長期間保存したい堎合は、それが保存されおいるかどうかを確認する必芁がありたす。
「AUTOLOAD」。埌で呌び出しによっお別のサブルヌチンがロヌドされる可胜性があるため、
$AUTOLOAD にその倀を倉曎したす。 副䜜甚ずしお䜜成された glob を䜿甚しお実行したす


これらの関数には、「level==0」を指定した「gv_fetchmeth」ず同じ副䜜甚がありたす。 の
「gv_fetchmeth」によっお返された GV を「call_sv」に枡すこずに察する譊告が適甚されたす
これらの機胜も同様です。

GV* gv_fetchmethod_autoload(HV* スタッシュ,
const char* 名前、
I32 オヌトロヌド)

gv_fetchmeth_autoload
これは「gv_fetchmeth_pvn_autoload」の叀い圢匏であり、flags パラメヌタがありたせん。

GV* gv_fetchmeth_autoload(HV* スタッシュ,
const char* 名前、
STRLEN レン、I32 レベル)

gv_fetchmeth_pv
「gv_fetchmeth_pvn」ずたったく同じですが、文字列の代わりに NULL で終わる文字列を受け取りたす。
文字列/長さのペア。

GV* gv_fetchmeth_pv(HV* スタッシュ、const char* 名前、
I32 レベル、U32 フラグ)

gv_fetchmeth_pvn
指定された「名前」ず定矩されたサブルヌチンたたは「NULL」を持぀グロブを返したす。 の
glob は、指定された「スタッシュ」、たたは @ISA 経由でアクセスできるスタッシュに存圚し、
ナニバヌサル::。

匕数「level」は 0 たたは -1 のいずれかでなければなりたせん。 「level==0」の堎合、副䜜甚ずしお
指定された「stash」に指定された「名前」のグロブを䜜成したす。
success にはサブルヌチンの゚むリアスが含たれおおり、このサブルヌチンのキャッシュ情報を蚭定したす。
グロブ。

「フラグ」の重芁な倀は GV_SUPER ず SVf_UTF8 のみです。

GV_SUPER は、メ゜ッドをスヌパヌクラスで怜玢するこずを瀺したす。
「隠し堎所」。

「gv_fetchmeth」から返された GV はメ゜ッド キャッシュ ゚ントリである可胜性がありたすが、これはメ゜ッド キャッシュ ゚ントリではありたせん。
Perlコヌドから芋えるようになりたす。 したがっお、「call_sv」を呌び出すずきは、GV を䜿甚しないでください。
盎接; 代わりに、メ゜ッドの CV を䜿甚する必芁がありたす。CV は、
「GvCV」マクロを䜿甚した GV。

GV* gv_fetchmeth_pvn(HV* スタッシュ、const char* 名、
STRLEN レン、I32 レベル、
U32 フラグ)

gv_fetchmeth_pvn_autoload
ず同じ gv_fetchmeth_pvn()、ただし、自動ロヌドされたサブルヌチンも探したす。 を返したす
サブルヌチンのグロブ。

GV のない自動ロヌドされたサブルヌチンの堎合、「レベル < 0」であっおも GV を䜜成したす。
スタブのない自動ロヌドされたサブルヌチンの堎合、 GvCV() 結果はれロになる可胜性がありたす。

珟圚、「flags」の唯䞀の重芁な倀は SVf_UTF8 です。

GV* gv_fetchmeth_pvn_autoload(HV* スタッシュ、
const char* 名前、
STRLEN レン、I32 レベル、
U32 フラグ)

gv_fetchmeth_pv_autoload
「gv_fetchmeth_pvn_autoload」ずたったく同じですが、null で終わる文字列を受け取りたす
文字列ず長さのペアの代わりに。

GV* gv_fetchmeth_pv_autoload(HV* スタッシュ,
const char* 名前、
I32 レベル、U32 フラグ)

gv_fetchmeth_sv
「gv_fetchmeth_pvn」ずたったく同じですが、SV の圢匏で名前文字列を受け取りたす。
文字列ず長さのペアの代わりに。

GV* gv_fetchmeth_sv(HV* スタッシュ、SV* 名前v、
I32 レベル、U32 フラグ)

gv_fetchmeth_sv_autoload
「gv_fetchmeth_pvn_autoload」ずたったく同じですが、名前文字列を次の圢匏で受け取りたす。
文字列ず長さのペアの代わりに SV を䜿甚したす。

GV* gv_fetchmeth_sv_autoload(HV* スタッシュ、SV* 名前v、
I32 レベル、U32 フラグ)

gv_init の叀い圢匏 gv_init_pvn()。 UTF8 文字列では機胜したせん。
フラグパラメヌタ。 「multi」パラメヌタが蚭定されおいる堎合、GV_ADDMULTI フラグは次のようになりたす。
に枡された gv_init_pvn().

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

gv_init_pv
ず同じ gv_init_pvn()ただし、名前には代わりに NULL で終わる文字列を䜿甚したす。
char * パラメヌタず length パラメヌタを分けたす。

void gv_init_pv(GV* gv, HV* スタッシュ, const char* 名前,
U32 フラグ)

gv_init_pvn
スカラヌをタむプグロブに倉換したす。 これは匷制䞍可胜な typeglob です。 を割り圓おる
それぞの参照は、次のように䞊曞きするのではなく、そのスロットの XNUMX ぀に割り圓おられたす。
SvSetSV によっお䜜成された typeglobs で発生したす。 任意のスカラヌを倉換するず、 SvOK()
予枬できない結果が生じる可胜性があり、perl の内郚䜿甚のために予玄されおいたす。

「gv」は倉換されるスカラヌです。

「stash」は、芪スタッシュ/パッケヌゞ (存圚する堎合) です。

「name」ず「len」は名前を䞎えたす。 名前は修食されおいない必芁がありたす。 ぀たり、そうする必芁がありたす
パッケヌゞ名は含めないでください。 「gv」が stash 芁玠の堎合、それは呌び出し元の芁玠です。
この関数に枡される名前が次の名前ず䞀臎するこずを確認する責任がありたす。
芁玠。 䞀臎しない堎合、Perl の内郚簿蚘は機胜しなくなりたす。
同期。

「name」が UTF8 文字列の堎合、たたは戻り倀の堎合、「flags」は SVf_UTF8 に蚭定できたす。
SvUTF8(sv)。 GV_ADDMULTI フラグを䜿甚するこずもできたす。これは、次のようなふりをするこずを意味したす。
GV は以前に芋られたこずがある (぀たり、「䞀床䜿甚された」ずいう譊告を抑制したす)。

void gv_init_pvn(GV* gv, HV* スタッシュ, const char* 名前,
STRLEN レン、U32 フラグ)

gv_init_sv
ず同じ gv_init_pvn()ただし、名前には個別の文字 * の代わりに SV * が䜿甚されたす。
そしお長さのパラメヌタ。 「flags」は珟圚䜿甚されおいたせん。

void gv_init_sv(GV* gv、HV* スタッシュ、SV* namesv、
U32 フラグ)

gv_stashpv
指定されたパッケヌゞのスタッシュぞのポむンタヌを返したす。 「strlen」を䜿甚しお、
「name」の長さを決定し、「gv_stashpvn()」を呌び出したす。

HV* gv_stashpv(const char* 名前、I32 フラグ)

gv_stashvn
指定されたパッケヌゞのスタッシュぞのポむンタヌを返したす。 「namelen」パラメヌタ
「名前」の長さをバむト単䜍で瀺したす。 「フラグ」が枡される
「gv_fetchpvn_flags()」なので、「GV_ADD」に蚭定するず、次の堎合にパッケヌゞが䜜成されたす。
それはすでに存圚したせん。 パッケヌゞが存圚せず、「flags」が 0 (たたは任意の
パッケヌゞを䜜成しないその他の蚭定の堎合は、NULL が返されたす。

フラグは次のいずれかになりたす。

GV_ADD
SVf_UTF8
GV_NOADD_NOINIT
GV_NOINIT
GV_NOEXPAND
GV_ADDMG

その䞭で最も重芁なのは、おそらく GV_ADD ず SVf_UTF8 でしょう。

可胜な堎合は、「gv_stashvn」ではなく「gv_stashsv」を䜿甚するこずを匷くお勧めしたす。
パフォヌマンス䞊の理由から掚奚されたす。

HV* gv_stashpvn(const char* 名前, U32 名前len,
I32 フラグ)

gv_stashvs
「gv_stashpvn」ず䌌おいたすが、文字列ず長さのペアの代わりにリテラル文字列を受け取りたす。

HV* gv_stashpvs(const char* 名前、I32 䜜成)

gv_stashsv
指定されたパッケヌゞのスタッシュぞのポむンタヌを返したす。 「gv_stashpvn」を参照しおください。

パフォヌマンスの芳点から、このむンタヌフェむスは「gv_stashpvn」よりも匷く優先されるこずに泚意しおください。
理由。

HV* gv_stashsv(SV* sv、I32 フラグ)

デフォルト蚭定
出力甚のデフォルトのファむル ハンドルである PL_defoutgv を、typeglob で枡されたものに蚭定したす。
PL_defoutgv はその typeglob 䞊の参照を「所有」しおいるため、その typeglob の参照カりントは
typeglob で枡された関数は XNUMX ぀増加し、typeglob の参照カりントが増加したす。
PL_defoutgv が指す倀が XNUMX 枛りたす。

void setdefout(GV* gv)

ハンディ 䟡倀芳


Nullav Null AV ポむンタ。

(非掚奚 - 代わりに「(AV *)NULL」を䜿甚しおください)

Nullch Null 文字ポむンタ。 (「PERL_CORE」が定矩されおいる堎合は䜿甚できなくなりたす。)

Nullcv Null CV ポむンタ。

(非掚奚 - 代わりに「(CV *)NULL」を䜿甚しおください)

Nullhv Null HV ポむンタ。

(非掚奚 - 代わりに「(HV *)NULL」を䜿甚しおください)

Nullsv Null SV ポむンタ。 (「PERL_CORE」が定矩されおいる堎合は䜿甚できなくなりたす。)

ハッシュ 操䜜 機胜


HV 構造は Perl ハッシュを衚したす。 これは䞻にポむンタヌの配列で構成されたす。
このうち、HE 構造のリンクされたリストを指したす。 配列はハッシュによっおむンデックス付けされたす
キヌの機胜により、各リンク リストは同じ倀を持぀すべおのハッシュ ゚ントリを衚したす。
ハッシュ倀。 各 HE には、実際の倀ぞのポむンタに加えお、HEK ぞのポむンタが含たれおいたす。
キヌずハッシュ倀を保持する構造䜓。

cop_fetch_label
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

譊官に付けられたラベルを返したす。 フラグポむンタは「SVf_UTF8」に蚭定される可胜性がありたす
たたは0。

const char * cop_fetch_label(COP *const cop,
STRLEN *レン、U32 *フラグ)

譊官ストアラベル
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

ラベルを「cop_hints_hash」に保存したす。 フラグを「SVf_UTF8」に蚭定する必芁がありたす。
utf-8ラベル。

void cop_store_label(COP *const cop,
const char *label、STRLEN len、
U32 フラグ)

get_hv 指定された Perl ハッシュの HV を返したす。 「フラグ」は「gv_fetchpv」に枡されたす。
「GV_ADD」が蚭定されおおり、Perl 倉数が存圚しない堎合は䜜成されたす。
「flags」がれロで倉数が存圚しない堎合は、NULL が返されたす。

泚: この関数の perl_ 圢匏は非掚奚です。

HV* get_hv(const char *name, I32 フラグ)

HEf_SVKEY
このフラグは、ハッシュ ゚ントリずマゞック構造の長さスロットで䜿甚され、
構造䜓には、「char*」ポむンタが予期される堎所に「SV*」ポむンタが含たれおいたす。
(情報提䟛のみを目的ずしおおり、䜿甚しないでください)。

HeHASH ハッシュ ゚ントリに保存されおいる蚈算されたハッシュを返したす。

U32 HeHASH(ヘ・ヘ)

HeKEY ハッシュ ゚ントリのキヌ スロットに栌玍されおいる実際のポむンタを返したす。 ポむンタ
「HeKLEN()」の倀に応じお、「char*」たたは「SV*」のいずれかになりたす。 できる
に割り圓おられた。 通垞は、「HePV()」たたは「HeSVKEY()」マクロが掚奚されたす。
キヌの倀を芋぀けるこず。

void* HeKEY(HE*ヘ)

HeKLEN これが負の倀で、「HEf_SVKEY」に盞圓する堎合、゚ントリが保持しおいるこずを瀺したす。
「SV*」キヌ。 それ以倖の堎合は、キヌの実際の長さを保持したす。 に割り圓おるこずができたす。
通垞、キヌの長さを芋぀けるには「HePV()」マクロが適しおいたす。

ストレン・ヘクレン(ヘ・ヘ)

HePV ハッシュ ゚ントリのキヌ スロットを「char*」倀ずしお返し、必芁な凊理を実行したす。
おそらく「SV*」キヌの逆参照。 「len」には文字列の長さが入りたす。
(これはマクロなので、 &len を䜿甚したす)。 長さを気にしないなら
重芁なのは、グロヌバル倉数「PL_na」を䜿甚できるこずですが、これはかなり少ないです。
ロヌカル倉数を䜿甚するより効率的です。 ただし、perl ではハッシュキヌを芚えおおいおください。
埋め蟌み null を自由に含めるこずができるため、「strlen()」などの䜿甚は適切ではありたせん。
ハッシュキヌの長さを調べる方法。 これは「SvPV()」マクロに非垞によく䌌おいたす。
このドキュメントの他の堎所で説明されおいたす。 「HeUTF8」も参照しおください。

「HePV」を䜿甚しお倀を取埗し、「newSVpvn()」に枡しお新しい SV を䜜成しおいる堎合、
より効率的であるため、「newSVhek(HeKEY_hek(he))」の䜿甚を怜蚎しおください。

char* HePV(HE* he, STRLEN len)

HeSVKEY キヌを「SV*」ずしお返すか、ハッシュ ゚ントリに「SV*」が含たれおいない堎合は「NULL」を返したす。
キヌ。

SV* HeSVKEY(HE*ヘ)

HeSVKEY_force
キヌを「SV*」ずしお返したす。 次の堎合、䞀時的な定呜の「SV*」を䜜成しお返したす。
ハッシュ ゚ントリには「char*」キヌのみが含たれたす。

SV* HeSVKEY_force(HE* 圌)

HeSVKEY_set
適切なフラグを蚭定するように泚意しながら、キヌを指定された「SV*」に蚭定したす。
「SV*」キヌの存圚を瀺し、同じ「SV*」を返したす。

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

HeUTF8 「HePV」によっお返された「char *」倀が UTF-8 で゚ンコヌドされおいるかどうかを返したす。
おそらく「SV*」キヌの必芁な逆参照。 返される倀は0になりたす
たたは 0 以倖、必ずしも 1 (たたは䞋䜍ビットが蚭定された倀) である必芁はありたせん。 do
「bool」は「char」の typedef である可胜性があるため、これを盲目的に「bool」倉数に代入したす。

U32 HeUTF8(ヘ・ヘ)

HeVAL ハッシュ ゚ントリに栌玍されおいる倀スロット (タむプ "SV*") を返したす。 に割り圓おるこずができたす。

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

SV* HeVAL(ヘ*ヘ)

HvENAME スタッシュの実効名を返すか、存圚しない堎合は NULL を返したす。 効果的なのは
name は、このスタッシュが存圚するシンボル テヌブル内の堎所を衚したす。 それは
パッケヌゞが゚むリアス化されるか削陀されるず、自動的に曎新されたす。 ない隠し堎所
シンボルテヌブルには有効な名前がなくなりたした。 この名前の方が望たしいです
MRO 線圢化および isa キャッシュで䜿甚する「HvNAME」。

char* HvENAME(HV* スタッシュ)

パナメレン
スタッシュの実効名の長さを返したす。

STRLEN HvENAMELEN(HV *スタッシュ)

HvENAMEUTF8
実効名が UTF8 ゚ンコヌディングである堎合は true を返したす。

unsigned char HvENAMEUTF8(HV *stash)

HvNAME スタッシュのパッケヌゞ名を返したす。「stash」がスタッシュでない堎合は NULL を返したす。 芋る
「SvSTASH」、「CvSTASH」。

char* HvNAME(HV* スタッシュ)

ナメレン
スタッシュの名前の長さを返したす。

STRLEN HvNAMELEN(HV *隠し堎所)

HvNAMEUTF8
名前が UTF8 ゚ンコヌディングである堎合は true を返したす。

unsigned char HvNAMEUTF8(HV *stash)

hv_assert
ハッシュが内郚的に䞀貫した状態であるこずを確認したす。

void hv_assert(HV *hv)

hv_clear
ハッシュのすべおの芁玠を解攟し、空のたたにしたす。 XS盞圓のもの
「%ハッシュ = ()」。 「hv_undef」も参照しおください。

戻り時にハッシュが無効になる可胜性があるこずに぀いおは、「av_clear」を参照しおください。

void hv_clear(HV *hv)

hv_clear_placeholders
ハッシュからプレヌスホルダヌをクリアしたす。 制限付きハッシュにキヌのいずれかが含たれおいる堎合
読み取り専甚ずしおマヌクされ、その埌キヌが削陀された堎合、キヌは実際には削陀されたせん
削陀されたしたが、&PL_sv_placeholder の倀を割り圓おるこずでマヌクされおいたす。 これにタグを付けたす
したがっお、ハッシュの反埩凊理などの将来の操䜜では無芖されたすが、
将来的には、ハッシュの倀をキヌに再割り圓おするこずができたす。
ポむント。 この関数は、そのようなプレヌスホルダヌ キヌをハッシュからクリアしたす。 芋る
ハッシュ::ナヌティリティ::lock_keys() その䜿甚䟋に぀いおは。

void hv_clear_placeholders(HV *hv)

hv_copy_hints_hv
「%^H」をコピヌするための「newHVhv」の特殊バヌゞョン。 OHV ぞのポむンタでなければなりたせん
ハッシュ (「%^H」の魔法がある堎合もありたすが、通垞は魔法ではないはずです)、たたは「NULL」
(空のハッシュずしお解釈されたす)。 の内容 OHV 新しいハッシュにコピヌされたす。
「%^H」特有の魔法が远加されおいたす。 新しいハッシュぞのポむンタが返されたす。

HV * hv_copy_hints_hv(HV *ohv)

hv_delete
ハッシュ内のキヌず倀のペアを削陀したす。 倀の SV がハッシュから削陀され、
臎呜的になり、呌び出し元に戻りたした。 「klen」の絶察倀は
キヌの長さ。 「klen」が負の堎合、キヌは次の堎所にあるずみなされたす。
UTF-8 で゚ンコヌドされた Unicode。 「フラグ」倀は通垞はれロです。 に蚭定されおいる堎合
G_DISCARD の堎合は NULL が返されたす。 キヌが次の堎合にも NULL が返されたす。
芋぀かりたせん。

SV* hv_delete(HV *hv, const char *key, I32 klen,
I32 フラグ)

hv_delete_ent
ハッシュ内のキヌず倀のペアを削陀したす。 倀 SV がハッシュから削陀され、
死すべきものずなり、呌び出し元に返されたした。 「フラグ」倀は通垞はれロです。 もし
G_DISCARD に蚭定するず、NULL が返されたす。 次の堎合にも NULL が返されたす。
キヌが芋぀かりたせん。 「hash」には、事前に蚈算された有効なハッシュ倀、たたは芁求する 0 を指定できたす。
それは蚈算されるこずになりたす。

SV* hv_delete_ent(HV *hv、SV *keysv、I32 フラグ、
U32 ハッシュ)

hv_exists
指定されたハッシュ キヌが存圚するかどうかを瀺すブヌル倀を返したす。 絶察的な
「klen」の倀はキヌの長さです。 「klen」が負の堎合、キヌは次のようになりたす。
UTF-8 で゚ンコヌドされた Unicode であるず想定されたす。

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

hv_exists_ent
指定されたハッシュ キヌが存圚するかどうかを瀺すブヌル倀を返したす。 「ハッシュ」は次のこずができたす
事前に蚈算された有効なハッシュ倀、たたは蚈算を芁求する堎合は 0。

bool hv_exists_ent(HV *hv、SV *keysv、U32 ハッシュ)

hv_fetch
ハッシュ内の指定されたキヌに察応する SV を返したす。 絶察的な
「klen」の倀はキヌの長さです。 「klen」が負の堎合、キヌは次のようになりたす。
UTF-8 で゚ンコヌドされた Unicode であるず想定されたす。 「lval」が蚭定されおいる堎合、フェッチは次のようになりたす。
店舗の䞀郚。 これは、関連付けられたハッシュに倀がない堎合を意味したす。
指定されたキヌの堎合、キヌが䜜成され、それぞのポむンタヌが返されたす。 「SV*」それ
にポむントを割り圓おるこずができたす。 ただし、戻り倀が null でないこずを垞に確認しおください
「SV*」に逆参照する前に。

詳现に぀いおは、perlguts の「結合ハッシュず配列の魔法に぀いお」を参照しおください。
タむド ハッシュでこの関数を䜿甚する方法に関する情報。

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

hv_fetchs
「hv_fetch」ず䌌おいたすが、文字列ず長さのペアの代わりにリテラル文字列を受け取りたす。

SV** hv_fetchs(HV* tb、const char* キヌ、I32 lval)

hv_fetch_ent
ハッシュ内の指定されたキヌに察応するハッシュ ゚ントリを返したす。 "ハッシュ"
指定された「キヌ」に察しお事前に蚈算された有効なハッシュ番号、たたは必芁な堎合は 0 でなければなりたせん。
それを蚈算する関数です。 「lval」が蚭定されおいる堎合、フェッチはストアの䞀郚になりたす。
アクセスする前に、戻り倀が null でないこずを確認しおください。 ずきの戻り倀
「hv」は結合されたハッシュであり、静的な堎所ぞのポむンタであるため、必ずコピヌを䜜成しおください
構造をどこかに保存する必芁がある堎合は、構造を保存したす。

詳现に぀いおは、perlguts の「結合ハッシュず配列の魔法に぀いお」を参照しおください。
タむド ハッシュでこの関数を䜿甚する方法に関する情報。

HE* hv_fetch_ent(HV *hv, SV *keysv, I32 lval,
U32 ハッシュ)

hv_fill 䜿甚䞭のハッシュ バケットの数を返したす。 この機胜は
マクロ「HvFILL」でラップされたす。

以前は、この倀は垞に HV 構造に栌玍されおいたした。
䜕かのすべおのハッシュ (およびほがすべおのオブゞェクト) のオヌバヌヘッド
ほずんど䜿われたせん。 今回は、初めお必芁になったずきにオンデマンドで蚈算したす。
蚈算を繰り返すのにコストがかかる堎合は、それをキャッシュしたす。 キャッシュされた倀は
挿入ず削陀によっお曎新されたすが、ハッシュが次の堎合は (珟圚) 砎棄されたす。
スプリット。

STRLEN hv_fill(HV *const hv)

hv_iterinit
ハッシュ テヌブルを走査するための開始点を準備したす。 内のキヌの数を返したす。
ハッシュ (぀たり、「HvUSEDKEYS(hv)」ず同じ)。 戻り倀は珟圚のみです
タむマゞックを䜿甚しないハッシュに察しお意味がありたす。

泚: バヌゞョン 5.004_65 より前では、「hv_iterinit」はハッシュの数を返すために䜿甚されおいたした。
たたたた䜿甚されおいたバケツ。 難解な倀がただ必芁な堎合は、次のようにするこずができたす。
マクロ「HvFILL(hv)」を通じお取埗したす。

I32 hv_iterinit(HV *hv)

hv_iterkey
ハッシュ反埩子の珟圚䜍眮からキヌを返したす。 芋る
「hv_iterinit」。

char* hv_iterkey(HE* ゚ントリ、I32* retlen)

hv_iterkeysv
ハッシュ反埩子の珟圚䜍眮からキヌを「SV*」ずしお返したす。 の
戻り倀は垞にキヌの氞久コピヌになりたす。 「hv_iterinit」も参照しおください。

SV* hv_iterkeysv(HE* ゚ントリ)

hv_iternext
ハッシュ反埩子から゚ントリを返したす。 「hv_iterinit」を参照しおください。

むテレヌタが䜜成するハッシュ゚ントリに察しお「hv_delete」たたは「hv_delete_ent」を呌び出すこずができたす。
堎所を倱ったりむテレヌタを無効にしたりするこずなく、珟圚は を指しおいたす。
この堎合、珟圚の゚ントリがハッシュから削陀されるこずに泚意しおください。
それぞの最埌の参照を保持するむテレヌタ。 むテレヌタには、
次の「hv_iternext」呌び出し時に゚ントリが远加されるため、むテレヌタを砎棄しないでください。
そうしないず゚ントリがリヌクしたす - 「hv_iternext」を呌び出しおリ゜ヌスをトリガヌしたす
割り圓お解陀。

HE* hv_iternext(HV *hv)

hv_iternextsv
「hv_iternext」、「hv_iterkey」、「hv_iterval」を XNUMX 回の操䜜で実行したす。

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

hv_iternext_flags
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

ハッシュ反埩子から゚ントリを返したす。 「hv_iterinit」および「hv_iternext」を参照しおください。 の
「flags」倀は通垞はれロです。 HV_ITERNEXT_WANTPLACEHOLDERS が蚭定されおいる堎合、
通垞のキヌに加えお、プレヌスホルダヌ キヌ (制限付きハッシュ甚) が返されたす。
キヌ。 デフォルトでは、プレヌスホルダヌは自動的にスキップされたす。 珟圚、
プレヌスホルダヌは、&PL_sv_placeholder ずいう倀で実装されたす。 泚意しおください。
プレヌスホルダヌず制限付きハッシュの実装は倉曎される可胜性がありたす。
珟圚、実装は抜象化が䞍十分であり、倉曎を適切に行うこずができたせん。

HE* hv_iternext_flags(HV *hv、I32 フラグ)

hv_interval
ハッシュ反埩子の珟圚䜍眮から倀を返したす。 芋る
「hv_iterkey」。

SV* hv_iterval(HV *hv, HE *゚ントリ)

hv_magic
ハッシュに魔法を远加したす。 「sv_magic」を参照しおください。

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

hv_スカラヌ
スカラヌコンテキストでハッシュを評䟡し、結果を返したす。 魔法を扱うずき
ハッシュは結び぀いおいたす。

SV* hv_scalar(HV *hv)

hv_store
SV をハッシュに保存したす。 ハッシュキヌは「key」ず絶察倀で指定したす。
「klen」の郚分はキヌの長さです。 「klen」が負の堎合、キヌは次のように仮定されたす。
UTF-8 で゚ンコヌドされた Unicode である必芁がありたす。 「hash」パラメヌタは、事前に蚈算されたハッシュ倀です。
れロの堎合は、Perl が蚈算したす。

操䜜が倱敗した堎合、たたは倀が必芁ない堎合、戻り倀は NULL になりたす。
実際にはハッシュ内に栌玍されたす (結合ハッシュの堎合ず同様)。 さもないず
これを逆参照しお、元の「SV*」を取埗できたす。 発信者は次のずおりであるこずに泚意しおください。
前に「val」の参照カりントを適切にむンクリメントする責任がありたす。
を呌び出し、関数が NULL を返した堎合は倀をデクリメントしたす。 事実䞊成功した
hv_store は、「val」ぞの XNUMX ぀の参照の所有暩を取埗したす。 これは通垞、あなたが行うこずです
欲しい; 新しく䜜成された SV の参照カりントは XNUMX なので、コヌドが実行するすべおのこずが
SV を䜜成しおハッシュに保存するず、hv_store がそのぞの唯䞀の参照を所有したす。
新しい SV なので、コヌドを敎理するためにそれ以䞊䜕もする必芁はありたせん。 hv_store は
hv_store_ent ぞの呌び出しずしお実装されおおらず、䞀時的な SV は䜜成されたせん。
キヌなので、キヌデヌタがただ SV 圢匏になっおいない堎合は、hv_store を䜿甚したす。
hv_store_ent を優先したす。

詳现に぀いおは、perlguts の「結合ハッシュず配列の魔法に぀いお」を参照しおください。
タむド ハッシュでこの関数を䜿甚する方法に関する情報。

SV** hv_store(HV *hv, const char *key, I32 klen,
SV *val、U32 ハッシュ)

hv_stores
「hv_store」ず䌌おいたすが、文字列ず長さのペアの代わりにリテラル文字列を受け取りたす。
ハッシュパラメヌタは省略したす。

SV** hv_stores(HV* tb, const char* キヌ,
NULLOK SV* 倀)

hv_store_ent
「val」をハッシュに栌玍したす。 「key」にはハッシュキヌを指定したす。 「ハッシュ」パラメヌタ
事前に蚈算されたハッシュ倀です。 れロの堎合は、Perl が蚈算したす。 の
戻り倀は、䜜成された新しいハッシュ ゚ントリです。 操䜜の堎合は NULL になりたす
倱敗した堎合、たたは実際に倀をハッシュ内に保存する必芁がなかった堎合次のように
タむドハッシュの堎合。 それ以倖の堎合、戻り倀の内容は次のようになりたす。
「He?」を䜿甚しおアクセスしたす。 ここで説明されおいるマクロ。 発信者は次のずおりであるこずに泚意しおください。
前に「val」の参照カりントを適切にむンクリメントする責任がありたす。
を呌び出し、関数が NULL を返した堎合は倀をデクリメントしたす。 事実䞊成功した
hv_store_ent は、「val」ぞの XNUMX ぀の参照の所有暩を取埗したす。 これは通垞、あなたが行うこずです
欲しい; 新しく䜜成された SV の参照カりントは XNUMX なので、コヌドが実行するすべおのこずが
SV を䜜成しおハッシュに保存するず、hv_store がそのぞの唯䞀の参照を所有したす。
新しい SV なので、コヌドを敎理するためにそれ以䞊䜕もする必芁はありたせん。 ご了承ください
hv_store_ent は「キヌ」のみを読み取りたす。 「val」ずは異なり、所有暩を取埗したせん。
したがっお、「key」の正しい参照カりントを維持するのは完党に呌び出し元の責任です。
責任。 hv_store は hv_store_ent の呌び出しずしお実装されおいたせん。
キヌの䞀時的な SV を䜜成しないため、キヌ デヌタがただ SV にない堎合
フォヌムでは、hv_store_ent ではなく hv_store を䜿甚したす。

詳现に぀いおは、perlguts の「結合ハッシュず配列の魔法に぀いお」を参照しおください。
タむド ハッシュでこの関数を䜿甚する方法に関する情報。

HE* hv_store_ent(HV *hv、SV *key、SV *val、U32 ハッシュ)

hv_undef
ハッシュの定矩を解陀したす。 XS では「undef(%hash)」に盞圓したす。

ハッシュのすべおの芁玠を解攟するだけでなく hv_clear())、これも無料です
ハッシュに関連付けられた補助デヌタずストレヌゞ。

戻り時にハッシュが無効になる可胜性があるこずに぀いおは、「av_clear」を参照しおください。

void hv_undef(HV *hv)

newHV 新しい HV を䜜成したす。 参照カりントは 1 に蚭定されたす。

HV* newHV()

フック 操䜜


これらの関数は、フック倉数を操䜜するための䟿利でスレッドセヌフな手段を提䟛したす。

ラップオプチェッカヌ
指定された操䜜タむプのチェック関数のチェヌンに C 関数を远加したす。 これ
これは、「PL_check」配列を操䜜するための掚奚される方法です。 オペコヌド どちらを指定するか
操䜜のタむプが圱響を受けたす。 新しいチェッカヌ C 関数ぞのポむンタです。
そのオペコヌドのチェックチェヌンに远加される、そしお old_checker_p ストレヌゞを指したす
チェヌン内の次の関数ぞのポむンタヌが保存される堎所。 の
の倀 新しいポむンタ 倀は「PL_check」配列に曞き蟌たれたすが、
以前にそこに保存されおいたものに曞き蟌たれたす *old_checker_p.

関数は次のように定矩する必芁がありたす。

静的 OP *new_checker(pTHX_ OP *op) { ... }

これは次の方法で呌び出すこずを目的ずしおいたす。

new_checker(aTHX_op)

old_checker_p 次のように定矩する必芁がありたす:

静的 Perl_check_t old_checker_p;

「PL_check」はプロセス党䜓ず、op をフックするモゞュヌルに察しおグロヌバルです。
チェックはプロセスごずに耇数回呌び出される堎合があり、通垞は
異なるスレッド。 この状況に察凊するために、この関数は冪等です。 の
堎所 *old_checker_p 最初に (プロセスごずに XNUMX 回) NULL ポむンタヌを含める必芁がありたす。
静的期間の AC 倉数 (ファむル スコヌプで宣蚀され、通垞はマヌクも付けられたす)
内郚リンケヌゞを䞎えるための「static」は暗黙的に初期化されたす
明瀺的な初期化子がない堎合は、適切に蚭定されたす。 この機胜は、
チェック チェヌンが芋぀かった堎合にのみ、実際にチェック チェヌンを倉曎したす。 *old_checker_p ヌルになる。 これ
この関数は小芏暡ではスレッドセヌフでもありたす。 適切なロックを䜿甚しお、
「PL_check」にアクセスする際の競合状態を回避したす。

この関数が呌び出されるず、によっお参照される関数が 新しいチェッカヌ 準備ができおいなければなりたせん
呌び出されるのは䟋倖です *old_checker_p 満たされおいないこず。 スレッド状況では、
新しいチェッカヌ この関数が返される前であっおも、すぐに呌び出すこずができたす。
*old_checker_p 前に垞に適切に蚭定されたす 新しいチェッカヌ ず呌ばれたす。 堎合
新しいチェッカヌ 䞎えられた op に察しお特別なこずは䜕もしないこずを決定したす (これは
これは、op チェック フックのほずんどの䜿甚の通垞のケヌスです)、チェックをチェヌンする必芁がありたす
によっお参照される関数 *old_checker_p.

特定のサブルヌチンぞの呌び出しのコンパむルに圱響を䞎えたい堎合は、次を䜿甚したす。
すべおの「entersub」操䜜のフックチェックではなく「cv_set_call_checker」。

void Wrap_op_checker(Optype オペコヌド,
Perl_check_t new_checker、
Perl_check_t *old_checker_p)

レクサヌ むンタフェヌス


これは Perl パヌサヌの䞋䜍局であり、文字ずトヌクンを管理したす。

lex_bufutf8
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

レクサヌバッファヌ内のオクテット (「PL_parser->linestr」) を次のようにするかどうかを瀺したす。
Unicode 文字の UTF-8 ゚ンコヌディングずしお解釈されたす。 そうでない堎合は、そうすべきです
Latin-1 文字ずしお解釈されたす。 これは、次の「SvUTF8」フラグに䌌おいたす。
スカラヌ。

UTF-8 モヌドでは、レクサヌ バッファヌに実際に有効なデヌタが含たれるかどうかは保蚌されたせん。
UTF-8。 字句解析コヌドは、無効な゚ンコヌドに盎面しおも堅牢である必芁がありたす。

「PL_parser->linestr」スカラヌの実際の「SvUTF8」フラグは重芁ですが、
入力文字゚ンコヌディングに関するすべおの話ではありたせん。 通垞、ファむルが
が読み取られおおり、スカラヌにはオクテットが含たれおおり、その「SvUTF8」フラグはオフですが、
「use utf8」プラグマが有効な堎合、オクテットは UTF-8 ずしお解釈される必芁がありたす。
ただし、文字列の評䟡䞭に、スカラヌに「SvUTF8」フラグがオンになる堎合がありたす。
この堎合、「use bytes」プラグマを䜿甚しない限り、そのオクテットは UTF-8 ずしお解釈される必芁がありたす。
が有効になっおいたす。 このロゞックは将来倉曎される可胜性がありたす。 代わりにこの関数を䜿甚しおください
ロゞックを自分で実装したす。

ブヌル lex_bufutf8()

lex_discard_to
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「PL_parser->linestr」バッファの最初の郚分を砎棄したす。 PTRを遞択したす。
バッファヌの残りのコンテンツは移動され、すべおのポむンタヌはバッファヌに移動されたす。
適切に曎新されたした。 PTR バッファ内で次の䜍眮より埌であっおはなりたせん
「PL_parser->bufptr」: ただ字句解析されおいないテキストを砎棄するこずは蚱可されおいたせん。

通垞、これを盎接行う必芁はありたせん。
「lex_next_chunk」ずそれに基づくものの暗黙的な砎棄動䜜。
ただし、トヌクンが耇数行にたたがっおおり、字句解析コヌドが
その目的のためにバッファヌに耇数行のテキストを入れ、完了埌に
䞍芁になった以前の行を明瀺的に砎棄するこずが賢明なトヌクン、
将来の耇数行トヌクンによっおバッファヌが際限なく増倧するのを避けるため。

void lex_discard_to(char *ptr)

lex_grow_linestr
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

少なくずも察応できるようにレクサヌ バッファ (「PL_parser->linestr」) を再割り圓おしたす。 LEN
オクテット (終端「NUL」を含む)。 再割り圓おされたオブゞェクトぞのポむンタを返したす。
バッファ。 これはバッファを盎接倉曎する前に必芁です。
それは長さを䌞ばすこずになりたす。 「lex_stuff_pvn」は、より䟿利な方法を提䟛したす。
テキストをバッファに挿入したす。

「PL_parser->linestr」で「SvGROW」たたは「sv_grow」を盎接䜿甚しないでください。 この機胜
バッファを盎接指すレクサヌの倉数をすべお曎新したす。

char * lex_grow_linestr(STRLEN len)

lex_next_chunk
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

字句解析する次のテキストのチャンクを読み取り、それを「PL_parser->linestr」に远加したす。
これは、字句解析コヌドが珟圚のチャンクの最埌たで怜玢したずきに呌び出される必芁がありたす。
そしおもっず知りたいず思っおいたす。 字句解析では通垞、次のようにする必芁がありたすが、必須ではありたせん。
珟時点では珟圚のチャンク党䜓が消費されおいたす。

「PL_parser->bufptr」が珟圚のチャンクの最埌を指しおいる堎合 (぀たり、
珟圚のチャンクは完党に消費されおいたす)、通垞、珟圚のチャンクは
新しいチャンクが読み蟌たれるず同時に砎棄されたす。 フラグ 含た
「LEX_KEEP_PREVIOUS」の堎合、珟圚のチャンクは砎棄されたせん。 珟圚の堎合
チャンクが完党に消費されおいない堎合、チャンクは無芖されたせん。
旗。

新しいテキストがバッファに远加された堎合は true を返し、バッファにテキストが远加された堎合は false を返したす。
入力テキストの終わりに達したした。

bool lex_next_chunk(U32 フラグ)

lex_peek_unichar
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

珟圚字句解析されおいるテキスト内の XNUMX 文字 (Unicode) を先読みしたす。 戻り倀
次の文字のコヌドポむント (笊号なし敎数倀)、たたは字句解析に問題がある堎合は -1
入力テキストの終わりに達したした。 ピヌクしたキャラクタヌを消費するには、次を䜿甚したす。
「lex_read_unichar」。

次の文字が入力テキストの次のチャンク内にある (たたはその䞭に広がっおいる) 堎合、
次のチャンクが読み蟌たれたす。通垞、珟圚のチャンクは次の時点で砎棄されたす。
同時に、しかしもし フラグ 「LEX_KEEP_PREVIOUS」が含たれおいる堎合、珟圚のチャンクは
捚おられないこず。

入力が UTF-8 ずしお解釈され、UTF-8 ゚ンコヌド ゚ラヌが発生した堎合
遭遇するず䟋倖が生成されたす。

I32 lex_peek_unichar(U32 フラグ)

lex_read_space
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

珟圚字句解析されおいるテキスト内のオプションのスペヌスを Perl スタむルで読み取りたす。 の
スペヌスには、通垞の空癜文字ず Perl スタむルのコメントが含たれる堎合がありたす。
「#line」ディレクティブが芋぀かった堎合は凊理されたす。 「PL_parser->bufptr」が移動されたした
スペヌスを越えお、スペヌス以倖の文字 (たたは文字列の末尟) を指すようにしたす。
入力テキスト。

スペヌスが入力テキストの次のチャンクにたで及ぶ堎合、次のチャンクが読み取られたす。
通垞、珟圚のチャンクは同時に砎棄されたすが、 フラグ
「LEX_KEEP_PREVIOUS」が含たれおいる堎合、珟圚のチャンクは砎棄されたせん。

void lex_read_space(U32 フラグ)

lex_read_to
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「PL_parser->bufptr」から次たでのレクサヌバッファ内のテキストを消費したす。 PTR。 この
䞀臎するように「PL_parser->bufptr」を進めたす PTR、正しい簿蚘を実行する
改行文字が枡されるたびに。 これは lexed を䜿甚する通垞の方法です
テキスト。

バッファのオクテットの解釈は、わずかな
高レベル関数「lex_peek_unichar」および「lex_read_unichar」。

void lex_read_to(char *ptr)

lex_read_unichar
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

珟圚字句解析されおいるテキスト内の次の (Unicode) 文字を読み取りたす。 を返したす
文字のコヌドポむント笊号なし敎数倀を読み取っお移動したす。
文字を超えるず「PL_parser->bufptr」、たたは字句解析が到達した堎合は -1 を返したす。
入力テキストの終わり。 次の文字を非砎壊的に調べるには、次を䜿甚したす。
代わりに「lex_peek_unichar」を䜿甚したす。

次の文字が入力テキストの次のチャンク内にある (たたはその䞭に広がっおいる) 堎合、
次のチャンクが読み蟌たれたす。通垞、珟圚のチャンクは次の時点で砎棄されたす。
同時に、しかしもし フラグ 「LEX_KEEP_PREVIOUS」が含たれおいる堎合、珟圚のチャンクは
捚おられないこず。

入力が UTF-8 ずしお解釈され、UTF-8 ゚ンコヌド ゚ラヌが発生した堎合
遭遇するず䟋倖が生成されたす。

I32 lex_read_unichar(U32 フラグ)

lex_start
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

新しいレクサヌ/パヌサヌ状態オブゞェクトを䜜成しお初期化し、コンテキストを提䟛したす。
これを Perl コヌドの新しい゜ヌスから lex および解析したす。 新しい状態ぞのポむンタ
オブゞェクトは「PL_parser」に配眮されたす。 保存スタックに゚ントリが䜜成されるため、
新しい状態オブゞェクトを巻き戻すず、オブゞェクトは砎棄され、以前の倀は砎棄されたす。
「PL_parser」が埩元されたす。 解析をクリヌンアップするために他に䜕もする必芁はありたせん
コンテキスト。

解析されるコヌドは次のものから来たす ラむン ず rsfp. ラむン、null でない堎合は、
解析するコヌドを含む文字列 (SV 圢匏)。 文字列のコピヌが䜜成され、
その埌の倉曎 ラむン 解析には圱響したせん。 rsfp、null でない堎合、
解析するためにコヌドが読み取られる入力ストリヌムを提䟛したす。 䞡方ある堎合
null 以倖のコヌド ラむン 最初に来お、次の完党な行で構成されおいる必芁がありたす。
入力、そしお rsfp ゜ヌスの残りの郚分を䟛絊したす。

この フラグ パラメヌタは将来の䜿甚のために予玄されおいたす。 珟圚は perl のみで䜿甚されおいたす
内郚的にはそのため、拡匵機胜では垞にれロを枡す必芁がありたす。

void lex_start(SV *line、PerlIO *rsfp、U32 フラグ)

lex_stuff_pv
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

レクサヌバッファヌ (「PL_parser->linestr」) の盎埌に文字を挿入したす。
珟圚のレクシング ポむント (「PL_parser->bufptr」)、次の堎合にバッファを再割り圓おしたす。
必芁。 これは、埌で実行される字句解析コヌドでは文字が次のように認識されるこずを意味したす。
それらが入力に珟れた堎合。 これを䞀郚ずしお行うこずはお勧めできたせん
通垞の解析では、この機胜のほずんどの䜿甚には、挿入された
文字が意図しない方法で解釈される。

挿入される文字列は、次から始たるオクテットで衚されたす。 pv 続けたす
最初のヌルたで。 これらのオクテットは UTF-8 たたは Latin-1 ずしお解釈されたす。
「LEX_STUFF_UTF8」フラグが蚭定されおいるかどうかに応じお フラグ。 キャラクタヌ
バッファの珟圚の状態に応じお、レクサヌバッファ甚に再コヌド化されたす。
解釈されたす (「lex_bufutf8」)。 文字列を NULL で終了するのが䞍䟿な堎合は、
挿入する堎合は、「lex_stuff_pvn」関数の方が適切です。

void lex_stuff_pv(const char *pv、U32 フラグ)

lex_stuff_pvn
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

レクサヌバッファヌ (「PL_parser->linestr」) の盎埌に文字を挿入したす。
珟圚のレクシング ポむント (「PL_parser->bufptr」)、次の堎合にバッファを再割り圓おしたす。
必芁。 これは、埌で実行される字句解析コヌドでは文字が次のように認識されるこずを意味したす。
それらが入力に珟れた堎合。 これを䞀郚ずしお行うこずはお勧めできたせん
通垞の解析では、この機胜のほずんどの䜿甚には、挿入された
文字が意図しない方法で解釈される。

挿入する文字列は次のように衚されたす。 LEN で始たるオクテット pv。 これら
オクテットは、
「LEX_STUFF_UTF8」フラグが蚭定されおいたす フラグ。 文字はレクサヌ甚に再コヌド化されたす
バッファ、バッファが珟圚どのように解釈されおいるかに応じお
(「lex_bufutf8」)。 挿入する文字列が Perl スカラヌずしお利甚可胜な堎合、
「lex_stuff_sv」関数の方が䟿利です。

void lex_stuff_pvn(const char *pv, STRLEN len,
U32 フラグ)

lex_stuff_pvs
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「lex_stuff_pvn」ず䌌おいたすが、文字列ず長さのペアの代わりにリテラル文字列を受け取りたす。

void lex_stuff_pvs(const char *pv、U32 フラグ)

lex_stuff_sv
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

レクサヌバッファヌ (「PL_parser->linestr」) の盎埌に文字を挿入したす。
珟圚のレクシング ポむント (「PL_parser->bufptr」)、次の堎合にバッファを再割り圓おしたす。
必芁。 これは、埌で実行される字句解析コヌドでは文字が次のように認識されるこずを意味したす。
それらが入力に珟れた堎合。 これを䞀郚ずしお行うこずはお勧めできたせん
通垞の解析では、この機胜のほずんどの䜿甚には、挿入された
文字が意図しない方法で解釈される。

挿入される文字列は、次の文字列倀です。 sv。 文字が再コヌド化される
レクサヌバッファの堎合、バッファが珟圚どのように解釈されおいるかに応じお
(「lex_bufutf8」)。 挿入される文字列がただ Perl スカラヌでない堎合、
「lex_stuff_pvn」関数を䜿甚するず、スカラヌを構築する必芁がなくなりたす。

void lex_stuff_sv(SV *sv、U32 フラグ)

lex_unstuff
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「PL_parser->bufptr」から次のレベルたで、字句解析されようずしおいるテキストを砎棄したす。 PTR。 テキスト
フォロヌ䞭 PTR が移動され、バッファが短瞮されたす。 これにより、砎棄されたものが非衚瀺になりたす
テキストがたったく出珟しなかったかのように、埌で実行される字句解析コヌドのテキスト。

これは、字句解析されたテキストを䜿甚する通垞の方法ではありたせん。 そのためには、「lex_read_to」を䜿甚したす。

void lex_unstuff(char *ptr)

parse_arithexpr
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

Perl 算術匏を解析したす。 これには優先順䜍が䜎い挔算子が含たれる可胜性がありたす
ビットシフト挔算子に。 匏は続行する必芁がありたす (したがっお終了する必芁がありたす)。
比范挔算子や優先順䜍の䜎い挔算子、あるいは
通垞はセミコロンなどの匏を終了したす。 もし フラグ 含た
「PARSE_OPTIONAL」の堎合、匏はオプションです。それ以倖の堎合は必須です。 それ
動的パヌサヌの状態 (「PL_parser」など) が確実に
解析されるコヌドの゜ヌスず語圙を反映するように正しく蚭定されおいたす。
匏のコンテキスト。

匏を衚す op ツリヌが返されたす。 オプションの匏が
存圚しない堎合は null ポむンタが返され、そうでない堎合はポむンタは非 null になりたす。

解析たたはコンパむル䞭に゚ラヌが発生した堎合、ほずんどの堎合、有効な op ツリヌは無効になりたす。
ずにかく戻った。 ゚ラヌはパヌサヌの状態に反映され、通垞は次のような結果が埗られたす。
すべおのコンパむルをカバヌする解析の最䞊䜍レベルでの XNUMX ぀の䟋倖で
発生した゚ラヌ。 ただし、䞀郚のコンパむル ゚ラヌでは䟋倖がスロヌされたす。
すぐに。

OP * parse_arithexpr(U32 フラグ)

parse_barestmt
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

単䞀の食られおいない Perl ステヌトメントを解析したす。 これは通垞の呜什かもしれたせん
コンパむル時に圱響を䞎えるステヌトメントたたは宣蚀。 䜕も含たれおいたせん
ラベルやその他の付属品。 動的であるこずを確認するかどうかは呌び出し偎の責任です。
パヌサヌ状態 (「PL_parser」など) は、゜ヌスを反映するように正しく蚭定されおいたす。
解析するコヌドずステヌトメントの語圙コンテキスト。

ステヌトメントを衚す op ツリヌが返されたす。 次の堎合、これはヌルポむンタである可胜性がありたす。
ステヌトメントは null です。たずえば、ステヌトメントが実際にサブルヌチン定矩だった堎合などです。
(コンパむル時の副䜜甚がありたす)。 null でない堎合は、盎接 ops になりたす
「newSTATEOP」に枡すのに適したステヌトメントを実装したす。 ならない
通垞、「nextstate」たたは同等の操䜜が含たれたすただし、
スコヌプはステヌトメント内に完党に含たれたす)。

解析たたはコンパむル䞭に゚ラヌが発生した堎合、ほずんどの堎合、有効な op ツリヌ (ほずんどの堎合、
null の可胜性が高い) がずにかく返されたす。 ゚ラヌはパヌサヌの状態に反映されたす。
通垞、解析の最䞊䜍レベルで XNUMX ぀の䟋倖が発生したす。
発生したすべおのコンパむル ゚ラヌ。 ただし、䞀郚のコンパむル ゚ラヌは、
すぐに䟋倖をスロヌしたす。

この フラグ パラメヌタは将来の䜿甚のために予玄されおおり、垞にれロにする必芁がありたす。

OP * parse_barestmt(U32 フラグ)

解析ブロック
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

単䞀の完党な Perl コヌド ブロックを解析したす。 これは巊䞭括匧、
ステヌトメントのシヌケンスず右䞭括匧。 ブロックは語圙を構成したす
スコヌプ内にあるため、「my」倉数ずさたざたなコンパむル時の効果をスコヌプ内に含めるこずができたす。
それ。 動的パヌサヌの状態 (「PL_parser」) を確認するのは呌び出し元の責任です。
et al) は、解析されるコヌドの゜ヌスを反映するように正しく蚭定されおおり、
ステヌトメントの語圙コンテキスト。

コヌド ブロックを衚す op ツリヌが返されたす。 これは垞に本圓の䜜戊です、
決しおヌルポむンタではありたせん。 通垞は、「nextstate」を含む「lineseq」リストになりたす。
たたは同等の操䜜。 あらゆる皮類のランタむム スコヌプを構築するための操䜜は含たれおいたせん。
ブロックであるずいう利点がありたす。

解析たたはコンパむル䞭に゚ラヌが発生した堎合、ほずんどの堎合、有効な op ツリヌ (ほずんどの堎合、
null の可胜性が高い) がずにかく返されたす。 ゚ラヌはパヌサヌの状態に反映されたす。
通垞、解析の最䞊䜍レベルで XNUMX ぀の䟋倖が発生したす。
発生したすべおのコンパむル ゚ラヌ。 ただし、䞀郚のコンパむル ゚ラヌは、
すぐに䟋倖をスロヌしたす。

この フラグ パラメヌタは将来の䜿甚のために予玄されおおり、垞にれロにする必芁がありたす。

OP * parse_block(U32 フラグ)

parse_fullexpr
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

単䞀の完党な Perl 匏を解析したす。 これにより、完党な衚珟文法が可胜になりたす。
「or」などの最も優先順䜍の䜎い挔算子も含たれたす。 匏は次のようにする必芁がありたす
匏が通垞次のように続くトヌクンが埌に続きたす (したがっお終了したす)。
ファむルの終わり、右括匧句読点、セミコロン、たたは次のいずれかで終了したす。
埌眮匏ステヌトメント修食子を通知するキヌワヌド。 もし フラグ
「PARSE_OPTIONAL」が含たれおいる堎合、匏はオプションです。それ以倖の堎合は、匏はオプションです。
必須。 動的パヌサヌの状態を確認するのは呌び出し元の責任です。
(「PL_parser」など) は、コヌドの゜ヌスを反映するように正しく蚭定されおいたす。
解析された匏の語圙コンテキスト。

匏を衚す op ツリヌが返されたす。 オプションの匏が
存圚しない堎合は null ポむンタが返され、そうでない堎合はポむンタは非 null になりたす。

解析たたはコンパむル䞭に゚ラヌが発生した堎合、ほずんどの堎合、有効な op ツリヌは無効になりたす。
ずにかく戻った。 ゚ラヌはパヌサヌの状態に反映され、通垞は次のような結果が埗られたす。
すべおのコンパむルをカバヌする解析の最䞊䜍レベルでの XNUMX ぀の䟋倖で
発生した゚ラヌ。 ただし、䞀郚のコンパむル ゚ラヌでは䟋倖がスロヌされたす。
すぐに。

OP * parse_fullexpr(U32 フラグ)

parse_fullstmt
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

単䞀の完党な Perl ステヌトメントを解析したす。 これは通垞の呜什文かもしれたせん
たたはコンパむル時に効果があり、オプションのラベルを含めるこずができる宣蚀。
動的パヌサヌの状態 (「PL_parser」など) を確認するのは呌び出し偎の責任です。
解析されるコヌドの゜ヌスず語圙を反映するように正しく蚭定されおいたす。
ステヌトメントのコンテキスト。

ステヌトメントを衚す op ツリヌが返されたす。 次の堎合、これはヌルポむンタである可胜性がありたす。
ステヌトメントは null です。たずえば、ステヌトメントが実際にサブルヌチン定矩だった堎合などです。
(コンパむル時の副䜜甚がありたす)。 null でない堎合は、
「newSTATEOP」呌び出し。通垞は「nextstate」たたは同等の操䜜が含たれたす。

解析たたはコンパむル䞭に゚ラヌが発生した堎合、ほずんどの堎合、有効な op ツリヌ (ほずんどの堎合、
null の可胜性が高い) がずにかく返されたす。 ゚ラヌはパヌサヌの状態に反映されたす。
通垞、解析の最䞊䜍レベルで XNUMX ぀の䟋倖が発生したす。
発生したすべおのコンパむル ゚ラヌ。 ただし、䞀郚のコンパむル ゚ラヌは、
すぐに䟋倖をスロヌしたす。

この フラグ パラメヌタは将来の䜿甚のために予玄されおおり、垞にれロにする必芁がありたす。

OP * parse_fullstmt(U32 フラグ)

解析ラベル
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

Perl のプレフィックスずなるタむプの単䞀ラベル (堎合によっおはオプション) を解析したす。
声明。 動的パヌサヌの状態を確認するのは呌び出し元の責任です。
(「PL_parser」など) は、コヌドの゜ヌスを反映するように正しく蚭定されおいたす。
解析された。 もし フラグ 「PARSE_OPTIONAL」が含たれおいる堎合、ラベルはオプションです。それ以倖の堎合は、
それが必須です。

ラベルの名前は新しいスカラヌの圢匏で返されたす。 オプションの堎合
ラベルが存圚しない堎合は、null ポむンタが返されたす。

解析䞭に゚ラヌが発生した堎合 (ラベルが必須の堎合にのみ発生する可胜性がありたす)、
ずにかく有効なラベルが返されたす。 ゚ラヌはパヌサヌの状態に反映されたす。
通垞、解析の最䞊䜍レベルで XNUMX ぀の䟋倖が発生したす。
発生したすべおのコンパむル ゚ラヌ。

SV * parse_label(U32 フラグ)

parse_listexpr
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

Perl リスト匏を解析したす。 これには、以䞋の優先順䜍の挔算子が含たれる堎合がありたす。
カンマ挔算子。 匏は次のいずれかの埌に続く (したがっお終了する) 必芁がありたす。
「or」などの優先順䜍の䜎い論理挔算子、たたは
通垞はセミコロンなどの匏を終了したす。 もし フラグ 含た
「PARSE_OPTIONAL」の堎合、匏はオプションです。それ以倖の堎合は必須です。 それ
動的パヌサヌの状態 (「PL_parser」など) が確実に
解析されるコヌドの゜ヌスず語圙を反映するように正しく蚭定されおいたす。
匏のコンテキスト。

匏を衚す op ツリヌが返されたす。 オプションの匏が
存圚しない堎合は null ポむンタが返され、そうでない堎合はポむンタは非 null になりたす。

解析たたはコンパむル䞭に゚ラヌが発生した堎合、ほずんどの堎合、有効な op ツリヌは無効になりたす。
ずにかく戻った。 ゚ラヌはパヌサヌの状態に反映され、通垞は次のような結果が埗られたす。
すべおのコンパむルをカバヌする解析の最䞊䜍レベルでの XNUMX ぀の䟋倖で
発生した゚ラヌ。 ただし、䞀郚のコンパむル ゚ラヌでは䟋倖がスロヌされたす。
すぐに。

OP * parse_listexpr(U32 フラグ)

parse_stmtseq
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

XNUMX 個以䞊の Perl ステヌトメントのシヌケンスを解析したす。 これらは通垞の呜什かもしれたせん
オプションのラベルを含むステヌトメント、たたはコンパむル時のある宣蚀
効果、たたはそれらの混合物。 ステヌトメント シヌケンスは、右䞭かっこで終了したす。
たたは、新しいステヌトメントが有効に存圚する可胜性がある堎所でファむルの終わりが怜出されたした。
始めたした。 動的パヌサヌの状態を確認するのは呌び出し元の責任です。
(「PL_parser」など) は、コヌドの゜ヌスを反映するように正しく蚭定されおいたす。
解析されたステヌトメントの語圙コンテキスト。

ステヌトメントシヌケンスを衚す op ツリヌが返されたす。 これは null の可胜性がありたす
ステヌトメントがすべお null だった堎合のポむンタヌ (ステヌトメントが存圚しなかった堎合など)
たたは、サブルヌチン定矩 (コンパむル時偎を持぀) のみがあった堎合
効果。 null でない堎合、通垞は次のものが含たれる "lineseq" リストになりたす。
「nextstate」たたは同等の操䜜。

解析たたはコンパむル䞭に゚ラヌが発生した堎合、ほずんどの堎合、有効な op ツリヌは無効になりたす。
ずにかく戻った。 ゚ラヌはパヌサヌの状態に反映され、通垞は次のような結果が埗られたす。
すべおのコンパむルをカバヌする解析の最䞊䜍レベルでの XNUMX ぀の䟋倖で
発生した゚ラヌ。 ただし、䞀郚のコンパむル ゚ラヌでは䟋倖がスロヌされたす。
すぐに。

この フラグ パラメヌタは将来の䜿甚のために予玄されおおり、垞にれロにする必芁がありたす。

OP * parse_stmtseq(U32 フラグ)

parse_termexpr
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

Perl 甚語匏を解析したす。 これには、以䞋の優先順䜍の挔算子が含たれる堎合がありたす。
代入挔算子。 匏は続行する必芁がありたす (したがっお終了する必芁がありたす)。
カンマたたは優先順䜍の䜎い挔算子、たたは通垞は
セミコロンなどの匏を終了したす。 もし フラグ 「PARSE_OPTIONAL」を含む
その堎合、匏はオプションです。それ以倖の堎合、匏は必須です。 それは、
動的パヌサヌの状態 (「PL_parser」など) が正しくであるこずを確認する呌び出し元
解析されるコヌドの゜ヌスずその語圙コンテキストを反映するように蚭定されたす。
匏です。

匏を衚す op ツリヌが返されたす。 オプションの匏が
存圚しない堎合は null ポむンタが返され、そうでない堎合はポむンタは非 null になりたす。

解析たたはコンパむル䞭に゚ラヌが発生した堎合、ほずんどの堎合、有効な op ツリヌは無効になりたす。
ずにかく戻った。 ゚ラヌはパヌサヌの状態に反映され、通垞は次のような結果が埗られたす。
すべおのコンパむルをカバヌする解析の最䞊䜍レベルでの XNUMX ぀の䟋倖で
発生した゚ラヌ。 ただし、䞀郚のコンパむル ゚ラヌでは䟋倖がスロヌされたす。
すぐに。

OP * parse_termexpr(U32 フラグ)

PL_パヌサヌ
珟圚の解析操䜜の状態をカプセル化する構造䜓ぞのポむンタ
進行䞭。 ポむンタをロヌカルに倉曎しお、ネストされた解析を実行できたす。
倖郚解析の状態に干枉したす。 「PL_parser」の個々のメンバヌ
独自のドキュメントを持っおいたす。

PL_parser->bufend
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

珟圚字句解析されおいるテキストのチャンクの終わり、぀たりテキストの終わりぞの盎接ポむンタヌ
レクサヌバッファヌ。 これは、「SvPVX(PL_parser->linestr) +」ず等しくなりたす。
SvCUR(PL_parser->linestr)"。「NUL」文字 (れロ オクテット) は垞に次の䜍眮にありたす。
バッファの終わりであり、バッファの内容の䞀郚ずしおカりントされたせん。

PL_parser->bufptr
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

レクサヌバッファヌ内のレクサヌの珟圚䜍眮を指したす。 キャラクタヌ
このあたりは、 で区切られた範囲内で自由に怜蚎できたす。
「SvPVX("PL_parser->linestr")」および「PL_parser->bufend」。 バッファのオクテット
で瀺されるように、UTF-8 たたは Latin-1 ずしお解釈されるように意図されおいる可胜性がありたす。
「lex_bufutf8」。

字句解析コヌド (Perl コア内かどうかに関係なく) は、このポむンタヌを次の倀を超えお移動したす。
消費する文字数。 簿蚘業務も行う予定です
改行文字が消費されるたびに。 この移動がより䟿利になりたす
これは、改行を適切に凊理する関数「lex_read_to」によっお実行されたす。

バッファのオクテットの解釈は、わずかな
高レベル関数「lex_peek_unichar」および「lex_read_unichar」。

PL_parser->linestart
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

レクサヌバッファヌ内の珟圚の行の先頭を指したす。 これは䟿利です
どの列で゚ラヌが発生したかを瀺すためのもので、それ以倖はあたり圹に立ちたせん。 これはきっず
改行を䜿甚する字句解析コヌドによっお曎新されたす。 関数「lex_read_to」
この詳现を凊理したす。

PL_parser->linestr
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

珟圚テキストを怜蚎しおいるチャンクを含むバッファ スカラヌ
珟圚レク䞭です。 これは垞にプレヌンな文字列スカラヌです (「SvPOK」は
真実。 通垞のスカラヌ手段でスカラヌずしお䜿甚するこずは意図されおいたせん。 その代わり
以䞋に説明するポむンタ倉数によっおバッファを盎接参照したす。

レクサヌは、「PL_parser->linestr」内のものぞのさたざたな「char*」ポむンタヌを維持したす。
バッファ。 「PL_parser->linestr」が再割り圓おされる堎合、これらのポむンタはすべお再割り圓おされる必芁がありたす。
曎新したす。 これを手動で実行しようずせず、「lex_grow_linestr」を䜿甚しおください。
バッファを再割り圓おする必芁がある堎合。

バッファ内のテキスト チャンクの内容は通垞、完党な XNUMX 行です。
改行タヌミネヌタたでの入力を含めるこずができたすが、状況によっおは
それはそうではありたせん。 バッファのオクテットは次のように解釈されるこずを意図しおいる可胜性がありたす。
UTF-8 たたは Latin-1 のいずれか。 関数「lex_bufutf8」がどちらであるかを瀺したす。 䜿っおはいけたせん
このスカラヌの「SvUTF8」フラグは、それず䞀臎しない可胜性がありたす。

バッファを盎接調べる堎合、倉数「PL_parser->bufend」は以䞋を指したす。
バッファの終わり。 珟圚のレクシング䜍眮は次のように指定されたす。
「PL_parser->bufptr」。 通垞は、これらのポむンタを盎接䜿甚するこずをお勧めしたす。
通垞のスカラヌ手段によるスカラヌの怜査。

ロケヌル関連 機胜 ず マクロ


DECLARATION_FOR_LC_NUMERIC_MANIPULATION
このマクロはステヌトメントずしお䜿甚する必芁がありたす。 プラむベヌト倉数を宣蚀したすその
名前はアンダヌスコアで始たりたす)。これは、この䞭の他のマクロで必芁です。
セクション。 これを正しく含めないず、構文゚ラヌが発生したす。 のために
C89 C コンパむラずの互換性のため、コンパむラの前のブロックに配眮する必芁がありたす。
実行可胜なステヌトメント。

無効な DECLARATION_FOR_LC_NUMERIC_MANIPULATION

RESTORE_LC_NUMERIC
これは、マクロの XNUMX ぀ず組み合わせお䜿甚​​されたす。
「STORE_LC_NUMERIC_SET_TO_NEEDED」および「STORE_LC_NUMERIC_FORCE_TO_UNDERLYING」

「LC_NUMERIC」状態を適切に埩元したす。

宣蚀するには、「DECLARATION_FOR_LC_NUMERIC_MANIPULATION」の呌び出しが行われおいる必芁がありたす。
コンパむル時に、このマクロず XNUMX ぀の「STORE」倉数によっお䜿甚されるプラむベヌト倉数。
このマクロは、匏ではなく単䞀のステヌトメントずしお呌び出す必芁がありたす。
次のような空の匕数リスト:

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

void RESTORE_LC_NUMERIC()

STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
これは、ロケヌルを匷制するために「LC_NUMERIC」ロケヌルを認識する XS コヌドによっお䜿甚されたす。
カテゎリ "LC_NUMERIC" を、perl が珟圚の基瀎ずなるロケヌルず考えるものにしたす。
(Perl むンタプリタは、基瀎ずなるロケヌルが実際に䜕であるかに぀いお間違っおいる可胜性がありたす)
䞀郚の C たたは XS コヌドが C ラむブラリ関数を呌び出した堎合 ロケヌルの蚭定(3) その背埌にある
戻る; このマクロを呌び出す前に「sync_locale」を呌び出すず、Perl のレコヌドが曎新されたす。)

宣蚀するには、「DECLARATION_FOR_LC_NUMERIC_MANIPULATION」の呌び出しが行われおいる必芁がありたす。
コンパむル時にこのマクロによっお䜿甚されるプラむベヌト倉数。 このマクロは次のようにする必芁がありたす
匏ではなく、空の匕数リストを䜿甚しお単䞀のステヌトメントずしお呌び出されたす。
このような

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

プラむベヌト倉数は珟圚のロケヌル状態を保存するために䜿甚されたす。
必芁に応じお䞀臎する「RESTORE_LC_NUMERIC」を呌び出すず埩元できたす。

void STORE_LC_NUMERIC_FORCE_TO_UNDERLYING()

STORE_LC_NUMERIC_SET_TO_NEEDED
これは、「LC_NUMERIC」ロケヌルを認識する XS たたは C コヌドをラップするのに圹立ちたす。
このロケヌル カテゎリは通垞、Perl によっお逆方向に C ロケヌルに蚭定されたたたになりたす。
互換性があり、浮動小数点倀を読み取るほずんどの XS コヌドが察応できるためです。
XNUMX 進数の基数文字がドットである堎合のみ。

このマクロは、珟圚の "LC_NUMERIC" 状態が適切に蚭定されおいるこずを確認したす。
Perl プログラムから XS たたは C コヌドぞの呌び出しがロケヌル内から行われる堎合は、ロケヌルの
「䜿甚ロケヌル」の範囲。 たたは、呌び出しが倖郚からの堎合はロケヌルを無芖したす。
そのような範囲。

このマクロは、C たたは XS コヌドのラップの開始点です。 ラップ゚ンディングは次のように行われたす。
操䜜埌に「RESTORE_LC_NUMERIC」マクロを呌び出したす。 そうでなければ州
他の XS コヌドに悪圱響を䞎える倉曎が行われる可胜性がありたす。

宣蚀するには、「DECLARATION_FOR_LC_NUMERIC_MANIPULATION」の呌び出しが行われおいる必芁がありたす。
コンパむル時にこのマクロによっお䜿甚されるプラむベヌト倉数。 このマクロは次のようにする必芁がありたす
匏ではなく、空の匕数リストを䜿甚しお単䞀のステヌトメントずしお呌び出されたす。
このような

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

void STORE_LC_NUMERIC_SET_TO_NEEDED()

同期ロケヌル
プログラムのロケヌルの倉曎は、XS コヌドによっお回避する必芁がありたす。 それでも、確かな
XS から呌び出される「Gtk」などの非 Perl ラむブラリはそうしたす。 これが起こるず、Perl
ロケヌルが倉曎されたこずを通知する必芁がありたす。 そうする前に、この関数を䜿甚しおください。
パヌルに戻りたす。

void sync_locale()

魔法の 機胜


mg_clear
SV が衚す魔法のようなものをクリアしたす。 「sv_magic」を参照しおください。

int mg_clear(SV* sv)

mg_copy ある SV から別の SV にマゞックをコピヌしたす。 「sv_magic」を参照しおください。

int mg_copy(SV *sv, SV *nsv, const char *key,
I32クレン)

mg_find SV に䞀臎する型のマゞック ポむンタを怜玢したす。 「sv_magic」を参照しおください。

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

mg_findext
「SV」に指定された「vtbl」を持぀「type」のマゞック ポむンタを怜玢したす。 芋る
「sv_magicext」。

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

mg_free SV が䜿甚するマゞック ストレヌゞを解攟したす。 「sv_magic」を参照しおください。

int mg_free(SV* sv)

mg_free_type
タむプの魔法をすべお削陀したす の SVから sv。 「sv_magic」を参照しおください。

void mg_free_type(SV *sv, int how)

mg_get SV から倀を取埗する前にマゞックを実行したす。 SV のタむプは >= でなければなりたせん
SVt_PVMG。 「sv_magic」を参照しおください。

int mg_get(SV* sv)

mg_length
廃止されたした! この関数は Perl の将来のリリヌスから削陀される予定です。
新しいコヌドには䜿甚しないでください。 既存のコヌドから削陀しおください。

SV の長さをバむト単䜍でレポヌトし、可胜な堎合は長さマゞックを呌び出したすが、
SV に UTF8 フラグを蚭定しないでください。 存圚しない堎合は、「get」マゞックに戻りたす。
「length」マゞックですが、「get」マゞックを呌び出したかどうかは䞍明です。 それ
SV が PVMG 以䞊であるこずを前提ずしおいたす。 䜿甚 sv_len() を代わりにお䜿いください。

U32 mg_length(SV* sv)

mg_magical
SV の魔法のステヌタスをオンにしたす。 「sv_magic」を参照しおください。

void mg_magical(SV* sv)

mg_set 倀が SV に割り圓おられた埌にマゞックを実行したす。 「sv_magic」を参照しおください。

int mg_set(SV* sv)

SVGETMAGIC
「get」マゞックがある堎合、SV 䞊で「mg_get」を呌び出したす。 たずえば、これは次のように呌び出したす
タむド倉数の「FETCH」。 このマクロは匕数を耇数回評䟡したす。

void SvGETMAGIC(SV* sv)

SvLOCK 適切なモゞュヌルが
ロヌドされたした。

void SvLOCK(SV* sv)

SvSETMAGIC
SV に「set」マゞックがある堎合、SV 䞊で「mg_set」を呌び出したす。 これはその埌に必芁です
$| のような魔法の倉数の堎合は、スカラヌを倉曎したす。 たたは結合倉数
(「ストア」ず呌びたす)。 このマクロは匕数を耇数回評䟡したす。

void SvSETMAGIC(SV* sv)

SvSetMagicSV
「SvSetSV」ず䌌おいたすが、埌で必芁な蚭定マゞックを実行したす。

void SvSetMagicSV(SV* dsv, SV* ssv)

SvSetMagicSV_nosteal
「SvSetSV_nosteal」ず䌌おいたすが、埌で必芁なセット魔法を実行したす。

void SvSetMagicSV_nosteal(SV* dsv, SV* ssv)

SvSetSV dsv が ssv ず同じでない堎合、「sv_setsv」を呌び出したす。 以䞋の匕数を評䟡する可胜性がありたす
䞀床。 宛先 SV では「set」マゞックを凊理したせん。

void SvSetSV(SV* dsv, SV* ssv)

SvSetSV_nosteal
dsv が ssv ず同じでない堎合は、非砎壊バヌゞョンの「sv_setsv」を呌び出したす。 XNUMX月
匕数を耇数回評䟡したす。

void SvSetSV_nosteal(SV* dsv, SV* ssv)

SvSHARE 適切なモゞュヌルがロヌドされおいる堎合、スレッド間で sv が共有されるように手配したす。

void SvSHARE(SV* sv)

SvUNLOCK
適切なモゞュヌルがロヌドされおいる堎合、SV の盞互排他ロックを解陀したす。

void SvUNLOCK(SV* sv)

メモリ マネゞメント


XSUB ラむタヌのむンタヌフェむスを C の "memcpy" 関数にコピヌしたす。 「src」は゜ヌスです。
「dest」は宛先、「nitems」は項目の数、「type」は項目です。
タむプ。 重耇したコピヌでは倱敗する可胜性がありたす。 「移動」も参照しおください。

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

CopyD 「Copy」ず䌌おいたすが、dest を返したす。 コンパむラヌに末尟呌び出しを促すのに圹立ちたす
最適化。

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

XSUB ラむタヌのむンタヌフェむスを C の "memmove" 関数に移動したす。 「src」は゜ヌスです。
「dest」は宛先、「nitems」は項目の数、「type」は項目です。
タむプ。 オヌバヌラップ動䜜が可胜。 「コピヌ」も参照しおください。

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

MoveD 「Move」ず䌌おいたすが、dest を返したす。 コンパむラヌに末尟呌び出しを促すのに圹立ちたす
最適化。

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

Newx XSUB ラむタヌの C の「malloc」関数ぞのむンタヌフェむス。

これによっお埗られるメモリは、 たったの 「Safefree」で解攟されたす。

5.9.3幎には、 新しい() そしお友達が幎䞊の人に取っお代わる 新芏 API を削陀し、最初の API を削陀したす
パラメヌタ、 x、呌び出し元が自分自身を識別できるようにするデバッグ補助。 この揎助は
新しいビルド オプション PERL_MEM_LOG に眮き換えられたした (「PERL_MEM_LOG」を参照)
perlhacktips)。 叀い API は、XS モゞュヌルで䜿甚するためにただ存圚しおいたす。
叀いパヌル。

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

Newxc キャストを䜿甚した、C の "malloc" 関数ぞの XSUB ラむタヌのむンタヌフェむス。 こちらも参照
「ニュヌクス」。

これによっお埗られるメモリは、 たったの 「Safefree」で解攟されたす。

void Newxc(void* ptr, int niitems, type, Cast)

Newxz C の "malloc" 関数ぞの XSUB ラむタヌのむンタヌフェむス。 割り圓おられたメモリは、
「memzero」でれロ化されたす。 「ニュヌクス」も参照。

これによっお埗られるメモリは、 たったの 「Safefree」で解攟されたす。

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

毒 ポむズンりィズ(0xEF) 解攟されたメモリぞのアクセスをキャッチしたす。

void Poison(void* dest, int niitems, type)

ポむズンフリヌ
ポむズンりィズ(0xEF) 解攟されたメモリぞのアクセスをキャッチしたす。

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

毒新しい
ポむズンりィズ(0xAB) 割り圓おられおいるが初期化されおいないメモリぞのアクセスをキャッチしたす。

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

ポむズンりィズ
メモリをバむト パタヌン (䜕床も繰り返されるバむト) で埋めたす。
うたくいけば、初期化されおいないメモリぞのアクセスの詊みをキャッチできたす。

void PoisonWith(void* dest, int niitems, type,
U8バむト

XSUB ラむタヌの C の "realloc" 関数ぞのむンタヌフェむスを曎新したす。

これによっお埗られるメモリは、 たったの 「Safefree」で解攟されたす。

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

Renewc キャストを䜿甚した、C の "realloc" 関数ぞの XSUB ラむタヌのむンタヌフェむス。

これによっお埗られるメモリは、 たったの 「Safefree」で解攟されたす。

void Renewc(void* ptr, int niitems, type, Cast)

セヌフフリヌ
XSUB ラむタヌの C の「フリヌ」関数ぞのむンタヌフェむス。

これはすべき たったの 「ニュヌクス」ず仲間たちを䜿っお埗た思い出を䜿甚できたす。

void Safefree(void* ptr)

savepv 「strdup()」の Perl バヌゞョン。 新しく割り圓おられた文字列ぞのポむンタを返したす。
「pv」の耇補です。 文字列のサむズは「strlen()」によっお決たりたす。
埋め蟌み「NUL」文字を含めるこずはできず、末尟に「NUL」が必芁であるこずを意味したす。
新しい文字列に割り圓おられたメモリは、「Safefree()」で解攟できたす。
機胜。

Windows などの䞀郚のプラットフォヌムでは、スレッドが所有するすべおの割り圓おメモリが
そのスレッドが終了するず割り圓おが解陀されたす。 したがっお、それが起こらないようにする必芁がある堎合は、次のようにする必芁がありたす
「savesharedpv」などの共有メモリ関数を䜿甚したす。

char* savepv(const char* pv)

savepvn 「strndup()」が存圚する堎合の Perl のバヌゞョン。 ぞのポむンタを返したす。
「pv」の最初の「len」バむトの耇補である、新しく割り圓おられた文字列、
末尟に「NUL」バむトが远加されたす。 新しい文字列に割り圓おられたメモリを解攟できたす。
「Safefree()」関数を䜿甚したす。

Windows などの䞀郚のプラットフォヌムでは、スレッドが所有するすべおの割り圓おメモリが
そのスレッドが終了するず割り圓おが解陀されたす。 したがっお、それが起こらないようにする必芁がある堎合は、次のようにする必芁がありたす
「savesharedpvn」などの共有メモリ関数を䜿甚したす。

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

savepvs 「savepvn」ず䌌おいたすが、文字列の代わりにリテラルの「NUL」で終わる文字列を受け取りたす。
文字列/長さのペア。

char* savepvs(const char* s)

保存共有pv
重耇した文字列をメモリに割り圓おる「savepv()」のバヌゞョン。
スレッド間で共有されたす。

char* savesharedpv(const char* pv)

保存共有pvn
重耇した文字列をメモリに割り圓おる「savepvn()」のバヌゞョン。
スレッド間で共有されたす。 (具䜓的な違いは、NULL ポむンタヌはそうではないずいうこずです。
蚱容できる

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

保存共有 pvs
重耇した文字列をメモリに割り圓おる「savepvs()」のバヌゞョン。
スレッド間で共有されたす。

char* savesharedpvs(const char* s)

savesharedsvpv
重耇した文字列をメモリに割り圓おる「savesharedpv()」のバヌゞョン。
スレッド間で共有されたす。

char* savesharedsvpv(SV *sv)

vpv を保存
「savepv()」/「savepvn()」のバヌゞョン。耇補する文字列を
「SvPV()」を䜿甚しおSVで枡されたす

Windows などの䞀郚のプラットフォヌムでは、スレッドが所有するすべおの割り圓おメモリが
そのスレッドが終了するず割り圓おが解陀されたす。 したがっお、それが起こらないようにする必芁がある堎合は、次のようにする必芁がありたす
「savesharedsvpv」などの共有メモリ関数を䜿甚したす。

char* savesvpv(SV* sv)

構造コピヌ
これは、ある構造を別の構造にコピヌする、アヌキテクチャに䟝存しないマクロです。

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

Zero XSUB ラむタヌの C の「memzero」関数ぞのむンタヌフェむス。 「目的地」ずは、
「nitems」はアむテムの数、「type」はタむプです。

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

ZeroD 「Zero」ず䌌おいたすが、dest を返したす。 コンパむラヌに末尟呌び出しを促すのに圹立ちたす
最適化。

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

その他 機胜


dump_c_backtrace
C バックトレヌスを指定された fp にダンプしたす。

バックトレヌスを取埗できた堎合は true、取埗できなかった堎合は false を返したす。

bool dump_c_backtrace(PerlIO* fp, int max_ Depth,
intスキップ)

fbm_compile
文字列を分析しお、高速怜玢を実行したす。 fbm_instr() -- は
ボむダヌ・ムヌアアルゎリズム。

void fbm_compile(SV* sv、U32 フラグ)

fbm_instr
「big」ず「bigend」で区切られた文字列内の SV の䜍眮を返したす。 それ
文字列が芋぀からない堎合は「NULL」を返したす。 「sv」は必須ではありたせん
fbm_compiled ですが、怜玢はそれほど高速ではありたせん。

char* fbm_instr(unsigned char* big,
unsigned char* bigend、SV* littlestr、
U32 フラグ)

foldEQ 文字列 s1 ず s2 の先頭の len バむトが同じ堎合に true を返したす。
無神経に。 それ以倖の堎合は false。 倧文字ず小文字の ASCII 範囲バむトが䞀臎する
自分自身ずその反察のケヌスの察応者。 倧文字ず小文字を区別しない非 ASCII 範囲
バむトはそれ自䜓のみに䞀臎したす。

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

フォヌルドEQ_ロケヌル
文字列 s1 ず s2 の先頭の len バむトが同じ堎合に true を返したす。
珟圚のロケヌルで無神経に。 それ以倖の堎合は false。

I32foldEQ_locale(const char* a, const char* b,
I32レン)

form sprintf スタむルのフォヌマット パタヌンず埓来の (非 SV) 匕数を受け取りたす。
フォヌマットされた文字列を返したす。

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

文字列 (char *) が必芁な堎所ならどこでも䜿甚できたす。

char * s = Perl_form("%d.%d",メゞャヌ,マむナヌ);

単䞀のプラむベヌト バッファを䜿甚するため、耇数の文字列をフォヌマットする堎合は、
以前の文字列を明瀺的にコピヌしお削陀したす (完了したらコピヌを解攟したす)。

char* 圢匏(const char* pat, ...)

getcwd_sv
SV に珟圚の䜜業ディレクトリを入力したす

int getcwd_sv(SV* sv)

get_c_backtrace_dump
| Depth| のダンプずしお SV を返したす。 呌び出しスタックのフレヌムをスキップし、|skip|
䞀番奥のもの。 通垞は深さ 20 で十分です。

远加された出力は次のようになりたす。

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

フィヌルドはタブで区切られおいたす。 最初の列は深さです (れロは深さです)
最も内偎のスキップされおいないフレヌム。 hex:offset の XNUMX 進数は、プログラムが配眮される堎所です。
カりンタヌは S_parse_body にあり、:offset (欠萜しおいる可胜性がありたす) がその量を瀺したす。
S_parse_body 内にプログラム カりンタヌがありたした。

util.c:1716 は゜ヌス コヌド ファむルず行番号です。

この / usr / bin / perl それは明らかですできれば。

䞍明なものは「-」です。 残念ながら、未知の事態は非垞に簡単に発生する可胜性がありたす。
情報の取埗はサポヌトされおいたせん。 バむナリにデバッグがない堎合
情報; オプティマむザがむンラむン化などによっおコヌドを倉換した堎合。

SV* get_c_backtrace_dump(int max_ Depth, int Skip)

ibcmp これは (! フォヌルドEQ())

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

ibcmp_locale
これは (! foldEQ_locale())

I32 ibcmp_locale(const char* a, const char* b,
I32レン)

is_safe_syscall
指定された「pv」に内郚の「NUL」文字が含たれおいないこずをテストしたす。 それであれば
実行するず、「errno」を ENOENT に蚭定し、オプションで譊告し、FALSE を返したす。

名前が安党な堎合は TRUE を返したす。

によっお䜿甚されたす IS_SAFE_SYSCALL() マクロ。

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

memEQ XNUMX ぀のバッファ (「NUL」文字が埋め蟌たれおいる可胜性がある) をテストしお、それらが
等しい。 「len」パラメヌタは、比范するバむト数を瀺したす。 戻り倀
等しい堎合はれロ、等しくない堎合は非れロ。

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

memNE XNUMX ぀のバッファ (「NUL」文字が埋め蟌たれおいる可胜性がある) をテストしお、それらが
等しくありたせん。 「len」パラメヌタは、比范するバむト数を瀺したす。 戻り倀
等しくない堎合はれロ、等しい堎合は非れロ。

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

sprintf スタむルのフォヌマット パタヌンず匕数リストを取埗したす。 これらは生成するために䜿甚されたす
文字列メッセヌゞ。 メッセヌゞが改行で終わっおいない堎合は、次のようになりたす。
説明されおいるように、コヌド内の珟圚の䜍眮を瀺すものを远加しお拡匵されおいたす。
「mess_sv」の堎合。

通垞、結果のメッセヌゞは新しい最終的な SV で返されたす。 グロヌバル期間䞭
単䞀の SV を砎棄するず、この関数の䜿甚間で共有される堎合がありたす。

SV * æ··ä¹±(const char *pat, ...)

mess_sv ナヌザヌ向けのメッセヌゞを展開しお、珟圚のメッセヌゞを含めたす。
メッセヌゞがただ完了しおいないように芋える堎合は、コヌド内の堎所を確認しおください。

「basemsg」は最初のメッセヌゞたたはオブゞェクトです。 参考になれば䜿わせおいただきたす
珟状のたたであり、この関数の結果になりたす。 それ以倖の堎合は文字列ずしお䜿甚されたす。
すでに改行で終わっおいる堎合は、完党なものずみなされ、結果は
この関数の は同じ文字列になりたす。 メッセヌゞが次の文字で終わっおいない堎合は、
改行の堎合、「at foo.pl line 37」のようなセグメントが远加され、堎合によっおは
他の句は珟圚の実行状態を瀺したす。 結果のメッセヌゞ
ドットず改行で終わりたす。

通垞、結果のメッセヌゞは新しい最終的な SV で返されたす。 グロヌバル期間䞭
単䞀の SV を砎棄するず、この関数の䜿甚間で共有される堎合がありたす。 「消費する」堎合
true の堎合、関数は倉曎しお返すこずが蚱可されたす (必須ではありたせん)。
新しい SV を割り圓おる代わりに「basemsg」を䜿甚したす。

SV * mess_sv(SV *basemsg、ブヌル消費)

my_snprintf
C ラむブラリの「snprintf」機胜利甚可胜で暙準に準拠しおいる堎合䜿甚
実際には「vsnprintf」です。 ただし、「vsnprintf」が利甚できない堎合は、
残念ながら、安党ではない「vsprintf」を䜿甚するず、バッファがオヌバヌランする可胜性がありたす
オヌバヌラン チェックを実行したすが、手遅れになる可胜性がありたす)。 代わりに「sv_vcatpvf」の䜿甚を怜蚎しおください。たたは
「vsnprintf」を取埗したす。

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

my_sprintf
C ラむブラリ「sprintf」は、必芁に応じおラップされ、確実に
バッファに曞き蟌たれる文字列の長さ。 たれな ANSI 以前のシステムのみが必芁ずなりたす。
ラッパヌ関数 - 通垞、これは「sprintf」ぞの盎接呌び出しです。

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

my_strlcat
C ラむブラリ「strlcat」利甚可胜な堎合、たたはその Perl 実装。 これ
C の「NUL」で終わる文字列を操䜜したす。

「my_strlcat()」は、文字列「src」を「dst」の末尟に远加したす。 倚くおも远加されたす
「サむズ - strlen(dst) - 1」文字。 「size」でない限り、「NUL」で終了したす。
0であるか、元の「dst」文字列が「size」より長かった実際にはこれは
これは、「サむズ」が間違っおいるか、「dst」が正しくないこずを意味するため、起こりたせん。
適切な「NUL」で終わる文字列。

「サむズ」は宛先バッファのフルサむズであり、結果は次のようになりたす。
䜙裕がある堎合は、「NUL」で終了するこずが保蚌されたす。 「NUL」の䜙地があるこずに泚意しおください
「サむズ」に含める必芁がありたす。

Size_t my_strlcat(char *dst, const char *src,
サむズ_tサむズ)

my_strlcpy
C ラむブラリ「strlcpy」利甚可胜な堎合、たたはその Perl 実装。 これ
C の「NUL」で終わる文字列を操䜜したす。

「my_strlcpy()」は、文字列「src」から最倧「size - 1」文字を「dst」にコピヌしたす。
「NUL」 - 「サむズ」が 0 でない堎合、結果を終了したす。

Size_t my_strlcpy(char *dst, const char *src,
サむズ_tサむズ)

my_vsnprintf
C ラむブラリ「vsnprintf」利甚可胜で暙準に準拠しおいる堎合。 ただし、もし仮に
「vsnprintf」は利甚できたせん。残念ながら安党ではない「vsprintf」が䜿甚されたす。
バッファをオヌバヌランする可胜性がありたすオヌバヌランチェックはありたすが、それはやりすぎる可胜性がありたす
遅い。 代わりに「sv_vcatpvf」を䜿甚するか、「vsnprintf」を取埗するこずを怜蚎しおください。

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

PERL_SYS_INIT
実行に必芁な C ランタむム環境のシステム固有の調敎を提䟛したす。
Perl むンタプリタ。 これは、Perl を䜜成する前に XNUMX 回だけ呌び出す必芁がありたす。
通蚳。

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

PERL_SYS_INIT3
実行に必芁な C ランタむム環境のシステム固有の調敎を提䟛したす。
Perl むンタプリタ。 これは、Perl を䜜成する前に XNUMX 回だけ呌び出す必芁がありたす。
通蚳。

void PERL_SYS_INIT3(int *argc, char*** argv,
char*** 環境)

PERL_SYS_TERM
Perl の実行埌に C ランタむム環境のシステム固有のクリヌンアップを提䟛したす。
通蚳者。 これは、残りの Perl を解攟した埌に XNUMX 回だけ呌び出す必芁がありたす。
通蚳。

void PERL_SYS_TERM()

quadmath_format_needed
quadmath_format_needed() フォヌマット文字列に次のものが含たれる堎合は true を返したす。
Q 接頭蟞のない %[efgaEFGA] 圢匏指定子を少なくずも XNUMX ぀指定するか、それ以倖の堎合は false を返したす。

フォヌマット指定子の怜出は完党な printf 構文怜出ではありたせんが、
最も䞀般的なケヌスをキャッチできるはずです。

true が返された堎合、それらの匕数は すべき 理論的には次のように凊理されたす
quadmath_snprintf()ただし、そのような曞匏指定子が耇数ある堎合に備えお (「
"quadmath_format_single")、それを超えるものがあれば (さらに
ほんの XNUMX バむト、 凊理されるため quadmath_snprintf() 非垞にある
厳密で、XNUMX ぀の圢匏仕様のみを受け入れ、他は䜕も受け入れたせん。 この堎合、コヌドは
おそらく倱敗するはずです。

boolquadmath_format_needed(const char* 圢匏)

quadmath_format_single
quadmath_snprintf() フォヌマット文字列が非垞に厳密であるため、倱敗したす。
圢匏が無効な堎合は -1 を返したす。 XNUMX ぀の圢匏仕様のみを受け入れたす。

quadmath_format_single() 意図した単䞀の仕様が正垞であるかどうかをチェックしたす。
"%" があり、"%" が XNUMX ぀だけあり、"[efgaEFGA]" で終わり、その前に "Q" がありたす。 これ
これは完党な「printf 構文チェック」ではなく、単なる基本です。

圢匏が有効な堎合はその圢匏を返し、そうでない堎合は NULL を返したす。

quadmath_format_single() 䞍足しおいる「Q」をパッチするこずができ、実際にパッチを適甚したす。
必芁。 この堎合、フォヌマットの倉曎されたコピヌが返されたす。 which  
発信者 意志 必芁 〜ぞ 無料。

「quadmath_format_needed」も参照しおください。

const char*quadmath_format_single(const char* フォヌマット)

READ_XDIGIT
ASCII 範囲の XNUMX 進数の倀を返し、文字列ポむンタを進めたす。
動䜜は、isXDIGIT(*str) が true の堎合にのみ明確に定矩されたす。

U8 READ_XDIGIT(char str*)

strEQ XNUMX ぀の文字列が等しいかどうかをテストしたす。 true たたは false を返したす。

bool strEQ(char* s1, char* s2)

strGE 1 ぀の文字列をテストしお、最初の文字列「sXNUMX」が次の文字列以䞊であるかどうかを確認したす。
2番目は「sXNUMX」です。 true たたは false を返したす。

bool strGE(char* s1, char* s2)

strGT 1 ぀の文字列をテストしお、最初の文字列「s2」が XNUMX 番目の文字列「sXNUMX」より倧きいかどうかを確認したす。
true たたは false を返したす。

bool strGT(char* s1, char* s2)

strLE 1 ぀の文字列をテストしお、最初の文字列 "sXNUMX" が XNUMX 番目の文字列以䞋であるかどうかを確認したす。
「s2」。 true たたは false を返したす。

bool strLE(char* s1, char* s2)

strLT 1 ぀の文字列をテストしお、最初の文字列「s2」が XNUMX 番目の文字列「sXNUMX」より小さいかどうかを確認したす。
true たたは false を返したす。

bool strLT(char* s1, char* s2)

strNE XNUMX ぀の文字列をテストしお、それらが異なるかどうかを確認したす。 true たたは false を返したす。

bool strNE(char* s1, char* s2)

strnEQ XNUMX ぀の文字列が等しいかどうかをテストしたす。 「len」パラメヌタは、
比范するバむト数。 true たたは false を返したす。 (「strncmp」のラッパヌ)。

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

strnNE XNUMX ぀の文字列をテストしお、それらが異なるかどうかを確認したす。 「len」パラメヌタは、
比范するバむト数。 true たたは false を返したす。 (「strncmp」のラッパヌ)。

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

sv_destroyable
共有がない堎合にオブゞェクトが砎棄される可胜性があるこずを報告するダミヌ ルヌチン
モゞュヌルが存圚したす。 単䞀の SV 匕数を無芖し、「true」を返したす。 たで存圚する
NULL 関数ポむンタヌのテストは避けおください。たた、以䞋の堎合に譊告が発生する可胜性があるためです。
ある皋床の厳しさ。

bool sv_destroyable(SV *sv)

sv_nosharing
共有モゞュヌルが存圚しない堎合に SV を「共有」するダミヌ ルヌチン。 たたは
それを「ロック」したす。 たたは「ロックを解陀」したす。 ぀たり、単䞀の SV 匕数を無芖したす。
NULL 関数ポむンタヌのテストを回避するために存圚したす。たた、朜圚的にテストが行​​われる可胜性があるため、
ある皋床の厳密さの䞋で譊告したす。

void sv_nosharing(SV *sv)

vmess の「pat」ず「args」は sprintf スタむルのフォヌマット パタヌンであり、カプセル化された匕数です
リスト。 これらは文字列メッセヌゞを生成するために䜿甚されたす。 メッセヌゞが終わらない堎合
改行を䜿甚するず、珟圚の内容を瀺すもので拡匵されたす。
「mess_sv」で説明されおいるように、コヌド内の堎所。

通垞、結果のメッセヌゞは新しい最終的な SV で返されたす。 グロヌバル期間䞭
単䞀の SV を砎棄するず、この関数の䜿甚間で共有される堎合がありたす。

SV * vmess(const char *pat, va_​​list *args)

MRO 機胜


これらの関数は、Perl クラスのメ゜ッド解決順序に関連しおいたす。

mro_get_linear_isa
指定されたスタッシュの mro 線圢化を返したす。 デフォルトでは、これは次のようになりたす
他の MRO が有効でない限り、「mro_get_linear_isa_dfs」が返すもの
隠し堎所。 戻り倀は読み取り専甚の AV* です。

保存する堎合は、戻り倀の「SvREFCNT_inc()」を担圓する必芁がありたす。
半氞久的にどこにでも保存できたすそうしないず、ナヌザヌの䞋から削陀される可胜性がありたす
次回キャッシュが無効になるずき)。

AV* mro_get_linear_isa(HV* スタッシュ)

mro_method_changed_in
指定されたスタッシュの子クラスのメ゜ッド キャッシュを無効にしたす。
この倉化に気づくかもしれたせん。

理想的には、Perl ゜ヌス内の「PL_sub_generation++」のすべおのむンスタンスが、 ミスタヌシヌ
は this の呌び出しに眮き換える必芁がありたす。

Perl は、メ゜ッドを再定矩する䞀般的な方法のほずんどを自動的に凊理したす。
ただし、スタッシュ内のメ゜ッドを倉曎する方法がいく぀かありたす。
キャッシュ コヌドが認識されるため、この堎合は埌でこのメ゜ッドを呌び出す必芁がありたす。

1) XS コヌドからスタッシュ HV ゚ントリを盎接操䜜したす。

2) 読み取り専甚スカラヌ定数ぞの参照を stash ゚ントリに順番に代入したす。
定数サブルヌチンを䜜成したす (constant.pm ず同様)。

これず同じメ゜ッドを玔粋な Perl から利甚できたす。
「mro::method_changed_in(クラス名)」。

void mro_method_changed_in(HV* スタッシュ)

mro_register
カスタム mro プラグむンを登録したす。 詳现に぀いおは、perlmroapi を参照しおください。

void mro_register(const struct mro_alg *mro)

マルチコヌル 機胜


dマルチコヌル
マルチコヌルのロヌカル倉数を宣蚀したす。 perlcall の「軜量コヌルバック」を参照しおください。

dMULTICALL;

マルチコヌル
軜量のコヌルバックを䜜成したす。 perlcall の「軜量コヌルバック」を参照しおください。

マルチコヌル;

POP_MULTICALL
軜量コヌルバックの閉じ括匧。 「軜量コヌルバック」を参照しおください。
パヌルコヌル。

POP_MULTICALL;

PUSH_MULTICALL
軜量コヌルバック甚の開始ブラケット。 「軜量コヌルバック」を参照しおください。
パヌルコヌル。

PUSH_MULTICALL;

数倀の 機胜


grok_bin
XNUMX 進数を衚す文字列を数倀圢匏に倉換したす。

入堎時 start ず * len スキャンする文字列を指定したす。 *フラグ 倉換フラグを䞎える、
ず 結果 NULL たたは NV ぞのポむンタである必芁がありたす。 スキャンは終了時に停止したす
文字列、たたは最初の無効な文字。 「PERL_SCAN_SILENT_ILLDIGIT」が蚭定されおいない堎合
in *フラグ、無効な文字に遭遇した堎合も譊告がトリガヌされたす。 の䞊
return * len スキャンされた文字列の長さに蚭定され、 *フラグ 出力を䞎える
フラグ。

倀が <= "UV_MAX" の堎合、UV ずしお返され、出力フラグはクリアされたす。
そしお䜕も曞き蟌たれおいない *結果。 倀が > UV_MAX の堎合、「grok_bin」が返されたす。
UV_MAX、出力フラグに「PERL_SCAN_GREATER_THAN_UV_MAX」を蚭定し、
䟡倀 *結果 (たたは、次の堎合には倀が砎棄されたす) 結果 無効である。

0 進数には、オプションで「XNUMXb」たたは「b」を接頭蟞ずしお付けるこずができたす。
「PERL_SCAN_DISALLOW_PREFIX」が蚭定されおいたす *フラグ 入堎時。 もし
「PERL_SCAN_ALLOW_UNDERSCORES」が蚭定されおいたす *フラグ その堎合、XNUMX進数には「_」を䜿甚できたす。
数字を区切る文字。

UV grok_bin(const char* start, STRLEN* len_p,
I32* フラグ、NV *結果)

grok_hex
XNUMX 進数を衚す文字列を数倀圢匏に倉換したす。

入堎時 start ず *len_p スキャンする文字列を指定したす。 *フラグ 倉換フラグを䞎える、
ず 結果 NULL たたは NV ぞのポむンタである必芁がありたす。 スキャンは終了時に停止したす
文字列、たたは最初の無効な文字。 「PERL_SCAN_SILENT_ILLDIGIT」が蚭定されおいない堎合
in *フラグ、無効な文字に遭遇した堎合も譊告がトリガヌされたす。 の䞊
return * len スキャンされた文字列の長さに蚭定され、 *フラグ 出力を䞎える
フラグ。

倀が UV_MAX 以䞋の堎合、UV ずしお返され、出力フラグはクリアされ、
䜕も曞き蟌たれおいない *結果。 倀が > UV_MAX の堎合、「grok_hex」が返されたす。
UV_MAX、出力フラグに「PERL_SCAN_GREATER_THAN_UV_MAX」を蚭定し、
䟡倀 *結果 (たたは、次の堎合には倀が砎棄されたす) 結果 無効である。

0 進数には、オプションで「XNUMXx」たたは「x」を接頭蟞ずしお付けるこずができたす。
「PERL_SCAN_DISALLOW_PREFIX」が蚭定されおいたす *フラグ 入堎時。 もし
「PERL_SCAN_ALLOW_UNDERSCORES」が蚭定されおいたす *フラグ その堎合、XNUMX 進数には「_」を䜿甚できたす
数字を区切る文字。

UV grok_hex(const char* start, STRLEN* len_p,
I32* フラグ、NV *結果)

grok_infnan
ヘルパヌ grok_number()、「infinity」たたは「not a」のさたざたな綎りを受け入れたす。
数倀」を返し、次のフラグの組み合わせのいずれかを返したす。

IS_NUMBER_INFINITE
IS_NUMBER_NAN
IS_NUMBER_INFINITE | IS_NUMBER_NEG
IS_NUMBER_NAN | IS_NUMBER_NEG
0

IS_NUMBER_TRAILING で |-ed される可胜性がありたす。

無限倧たたは非数倀が認識された堎合、*sp は XNUMX バむトを指したす。
認識された文字列の末尟を超えおいたす。 認識に倱敗した堎合はれロになりたす。
が返され、*sp は移動したせん。

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

grok_number
ず同じ grok_number_flags() フラグはれロに蚭定されたす。

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

grok_number_flags
数字を認識したす (たたは認識したせん)。 数倀の型が返されたす (0 の堎合は
認識されない)、それ以倖の堎合は、IS_NUMBER_IN_UV のビット OR の組み合わせです。
IS_NUMBER_GREATER_THAN_UV_MAX、IS_NUMBER_NOT_INT、IS_NUMBER_NEG、
IS_NUMBER_INFINITY、IS_NUMBER_NAN (perl.h で定矩)。

数倀の倀が UV に収たる堎合は、*valuep で返されたす。
IS_NUMBER_IN_UV は、*valuep が有効であるこずを瀺すように蚭定されたす。IS_NUMBER_IN_UV
*valuep が有効でない限り蚭定されるこずはありたせんが、*valuep が割り圓おられおいる可胜性がありたす。
戻り時に IS_NUMBER_IN_UV が蚭定されおいない堎合でも、凊理䞭に発生したす。 valuep が
valuep が NULL 以倖の堎合ず同じ堎合に NULL、IS_NUMBER_IN_UV が蚭定されたす。
ただし、実際の割り圓お (たたは SEGV) は発生したせん。

末尟の小数が衚瀺された堎合、IS_NUMBER_NOT_INT は IS_NUMBER_IN_UV で蚭定されたす
(この堎合、*valuep は敎数に切り捚おられた真の倀を返したす)、および
数倀が負の堎合は IS_NUMBER_NEG (この堎合、*valuep は絶察倀を保持したす)
䟡倀。 e 衚蚘が䜿甚されおいるか、数倀が倧きい堎合、IS_NUMBER_IN_UV は蚭定されたせん。
玫倖線よりも。

「flags」では「PERL_SCAN_TRAILING」のみが蚱可されたす。これにより、末尟の非数倀が蚱可されたす。
それ以倖は成功した堎合のテキスト グロヌク、結果に「IS_NUMBER_TRAILING」を蚭定したす。

int grok_number_flags(const char *pv, STRLEN len,
UV *valuep、U32 フラグ)

grok_numeric_radix
数倀の小数点区切り文字 (基数) をスキャンしおスキップしたす。

bool grok_numeric_radix(const char **sp,
const char *送信)

grok_oct
XNUMX 進数を衚す文字列を数倀圢匏に倉換したす。

入堎時 start ず * len スキャンする文字列を指定したす。 *フラグ 倉換フラグを䞎える、
ず 結果 NULL たたは NV ぞのポむンタである必芁がありたす。 スキャンは終了時に停止したす
文字列、たたは最初の無効な文字。 「PERL_SCAN_SILENT_ILLDIGIT」が蚭定されおいない堎合
in *フラグ、8 たたは 9 に遭遇した堎合も譊告がトリガヌされたす。 垰囜時 * len is
スキャンされた文字列の長さに蚭定され、 *フラグ 出力フラグを䞎えたす。

倀が UV_MAX 以䞋の堎合、UV ずしお返され、出力フラグはクリアされ、
䜕も曞き蟌たれおいない *結果。 倀が > UV_MAX の堎合、「grok_oct」が返されたす。
UV_MAX、出力フラグに「PERL_SCAN_GREATER_THAN_UV_MAX」を蚭定し、
䟡倀 *結果 (たたは、次の堎合には倀が砎棄されたす) 結果 無効である。

「PERL_SCAN_ALLOW_UNDERSCORES」が蚭定されおいる堎合 *フラグ その堎合、XNUMX 進数は䜿甚できたす
数字を区切るための「_」文字。

UV grok_oct(const char* start, STRLEN* len_p,
I32* フラグ、NV *結果)

むズむンフナン
Perl_isinfnan() NV 匕数が次のいずれかの堎合に true を返すナヌティリティ関数です。
無限倧たたは NaN、それ以倖の堎合は false。 さらに詳现にテストするには、次を䜿甚したす。 Perl_isinf()
ず Perl_isnan().

これは、次の論理逆でもありたす。 Perl_isfinite().

bool isinfnan(NV nv)

Perl_signbit
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

NV の笊号ビットが蚭定されおいる堎合は 0 以倖の敎数を返し、蚭定されおいない堎合は XNUMX を返したす。

Configure がこのシステムに サむンビット() それはNVで動䜜したす。
perl.h の #define を介しお䜿甚するだけです。 それ以倖の堎合は、これに頌っおください
実装。 この関数の䞻な甚途は、-0.0 をキャッチするこずです。

蚭定メモ: この関数は、プレヌンな関数ではなく「Perl_signbit」ず呌ばれたす。
「signbit」は、システムに次のものがあるこずが想像しやすいためです。 サむンビット() 機胜たたは
このマクロは、私たちが遞択した特定の NV ではたたたた機胜したせんでした。 そうすべきではありたせん
サむンビットを Perl_signbit ずしお再#define するだけで、暙準のシステムヘッダヌが次のように動䜜するこずを期埅したす。
幞せになる。 たた、これはノヌコンテキスト関数 (pTHX_ なし) です。 Perl_signbit()
通垞、システムの単玔なマクロ呌び出しずしお perl.h で再定矩されたす。 サむンビット().
ナヌザヌは垞に電話をかけるべきです Perl_signbit().

int Perl_signbit(NV f)

スキャンビン
䞋䜍互換性のため。 代わりに「grok_bin」を䜿甚しおください。

NV scan_bin(const char* start, STRLEN len,
STRLEN* リレン)

scan_hex
䞋䜍互換性のため。 代わりに「grok_hex」を䜿甚しおください。

NV scan_hex(const char* start, STRLEN len,
STRLEN* リレン)

scan_oct
䞋䜍互換性のため。 代わりに「grok_oct」を䜿甚しおください。

NV scan_oct(const char* start, STRLEN len,
STRLEN* リレン)

廃止された 埌方 互換性 機胜


これらの䞀郚は廃止されるこずもありたす。 これらをコンパむルした Perl から陀倖するには、次のようにしたす。
このオプションを蚭定に远加したす:「-Accflags='-DNO_MATHOMS'」

カスタムOP_DESC
指定されたカスタム操䜜の説明を返したす。 これはか぀お OP_DESC によっお䜿甚されおいたした
マクロですが、珟圚は存圚したせん。これは互換性のためだけに残されおおり、本来は䜿甚すべきではありたせん。
利甚される。

const char *custom_op_desc(const OP *o)

カスタム操䜜名
指定されたカスタム操䜜の名前を返したす。 これはか぀お OP_NAME マクロで䜿甚されおいたした。
しかし、珟圚はそうではありたせん。これは互換性のために保持されおいるだけであり、䜿甚すべきではありたせん。

const char *custom_op_name(const OP *o)

gv_fetch メ゜ッド
「gv_fetchmethod_autoload」を参照しおください。

GV* gv_fetchmethod(HV* スタッシュ、const char* 名)

is_utf8_char
廃止されたした! この関数は Perl の将来のリリヌスから削陀される予定です。
新しいコヌドには䜿甚しないでください。 既存のコヌドから削陀しおください。

任意の数のバむトが有効な UTF-8 文字で始たるかどうかをテストしたす。 泚蚘
INVARIANT (぀たり、非 EBCDIC マシンでは ASCII) 文字が有効な UTF-8 であるこず
キャラクタヌ。 次の堎合、UTF-8 文字の実際のバむト数が返されたす。
有効です。それ以倖の堎合は 0 です。

䞍正な入力が行われる可胜性があるため、この関数は非掚奚になりたした。
入力バッファの終わりを超えお読み取りが行われる可胜性がありたす。 代わりに「isUTF8_CHAR」を䜿甚しおください。

STRLEN is_utf8_char(const U8 *s)

is_utf8_char_buf
これはマクロ「isUTF8_CHAR」ず同じです。

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

パックキャット
゚ンゞン実装 パック パヌル関数。 泚: パラメヌタ next_in_list および
フラグは䜿甚されたせん。 この呌び出しは䜿甚しないでください。 代わりにパックリストを䜿甚しおください。

void Pack_cat(SV *cat, const char *pat,
const char *特蚱、SV **beglist、
SV **゚ンドリスト、SV ***next_in_list、
U32 フラグ)

パッドコンプ名タむプ
䜍眮で字句倉数の型を怜玢したす。 po 珟圚では-
コンパむルパッド。 倉数が型指定されおいる堎合、その倉数が属するクラスのスタッシュ
入力されたものが返されたす。 そうでない堎合は、「NULL」が返されたす。

HV * パッド補償名タむプ(PADOFFSET po)

sv_2pvbyte_nolen
SV のバむト゚ンコヌド衚珟ぞのポむンタヌを返したす。 SVを匕き起こす可胜性がある
副䜜甚ずしお UTF-8 からダりングレヌドされたす。

通垞は「SvPVbyte_nolen」マクロを介しおアクセスされたす。

char* sv_2pvbyte_nolen(SV* sv)

sv_2pvutf8_nolen
SV の UTF-8 ゚ンコヌド衚珟ぞのポむンタヌを返したす。 SVを匕き起こす可胜性がある
副䜜甚ずしお UTF-8 にアップグレヌドされたす。

通垞は「SvPVutf8_nolen」マクロ経由でアクセスしたす。

char* sv_2pvutf8_nolen(SV* sv)

sv_2pv_nolen
「sv_2pv()」ず䌌おいたすが、長さも返したせん。 通垞は、
代わりにマクロ ラッパヌ「SvPV_nolen(sv)」を䜿甚したす。

char* sv_2pv_nolen(SV* sv)

sv_catpvn_mg
「sv_catpvn」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_catpvn_mg(SV *sv, const char *ptr,
STRLENレン

sv_catsv_mg
「sv_catsv」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_catsv_mg(SV *dsv, SV *ssv)

sv_force_normal
SV 䞊のさたざたな皮類の停装を元に戻したす。PV が共有文字列の堎合は、
私的コピヌ; 私たちが参照者である堎合は、参照を停止しおください。 glob の堎合は、xpvmg にダりングレヌドしたす。
「sv_force_normal_flags」も参照しおください。

void sv_force_normal(SV *sv)

sv_iv に察応できないコンパむラ甚の「SvIVx」マクロのプラむベヌト実装
耇雑なマクロ匏。 代わりに垞にマクロを䜿甚しおください。

IV sv_iv(SV* sv)

sv_nolocking
ロック モゞュヌルが存圚しない堎合に SV を「ロック」するダミヌ ルヌチン。 存圚する
NULL 関数ポむンタヌのテストを避けるため、たた譊告が発生する可胜性があるため
ある皋床の厳しさのもずで。

「眮き換えられた」 sv_nosharing().

void sv_nolocking(SV *sv)

sv_nounlocking
ロック モゞュヌルが存圚しない堎合に SV を「ロック解陀」するダミヌ ルヌチン。
NULL 関数ポむンタヌのテストを回避するために存圚したす。たた、朜圚的にテストが行​​われる可胜性があるため、
ある皋床の厳密さの䞋で譊告したす。

「眮き換えられた」 sv_nosharing().

void sv_nounlocking(SV *sv)

sv_nv に察応できないコンパむラ甚の「SvNVx」マクロのプラむベヌト実装。
耇雑なマクロ匏。 代わりに垞にマクロを䜿甚しおください。

NV sv_nv(SV* sv)

sv_pv 代わりに「SvPV_nolen」マクロを䜿甚しおください

char* sv_pv(SV *sv)

sv_pvbyte
代わりに「SvPVbyte_nolen」を䜿甚しおください。

char* sv_pvbyte(SV *sv)

sv_pvbyten
察応できないコンパむラ向けの「SvPVbyte」マクロのプラむベヌト実装
耇雑なマクロ匏を䜿甚したす。 代わりに垞にマクロを䜿甚しおください。

char* sv_pvbyten(SV *sv, STRLEN *lp)

sv_pvn に察応できないコンパむラ甚の「SvPV」マクロのプラむベヌト実装
耇雑なマクロ匏。 代わりに垞にマクロを䜿甚しおください。

char* sv_pvn(SV *sv, STRLEN *lp)

sv_pvutf8
代わりに「SvPVutf8_nolen」マクロを䜿甚しおください

char* sv_pvutf8(SV *sv)

sv_pvutf8n
察応できないコンパむラ向けの「SvPVutf8」マクロのプラむベヌト実装
耇雑なマクロ匏を䜿甚したす。 代わりに垞にマクロを䜿甚しおください。

char* sv_pvutf8n(SV *sv, STRLEN *lp)

sv_taint
SV を汚染したす。 代わりに「SvTAINTED_on」を䜿甚しおください。

void sv_taint(SV* sv)

sv_unref
SV の RV ステヌタスの蚭定を解陀し、以前の状態の参照カりントをデクリメントしたす。
RV によっお参照されたす。 これはほが逆転ず考えるこずができたす。
「newSVrv」。 これは、「フラグ」がれロの「sv_unref_flags」です。 「SvROK_off」を参照しおください。

void sv_unref(SV* sv)

sv_usepvn
SV に「ptr」を䜿甚しお文字列倀を怜玢するように指瀺したす。 呌び出しによっお実装される
「sv_usepvn_flags」の「flags」が 0 であるため、「set」マゞックは凊理されたせん。 芋る
「sv_usepvn_flags」。

void sv_usepvn(SV* sv, char* ptr, STRLEN len)

sv_usepvn_mg
「sv_usepvn」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_usepvn_mg(SV *sv, char *ptr, STRLEN len)

sv_uv に察応できないコンパむラ甚の「SvUVx」マクロのプラむベヌト実装
耇雑なマクロ匏。 代わりに垞にマクロを䜿甚しおください。

UV sv_uv(SV* sv)

unpack_str
゚ンゞン実装 unpack パヌル関数。 泚: パラメヌタ strbeg、new_s
および ocnt は䜿甚されたせん。 この呌び出しは䜿甚しないでください。代わりに unpackstring を䜿甚しおください。

I32 unpack_str(const char *pat, const char *patend,
const char *s、const char *strbeg、
const char *strend、char **new_s、
I32 ocnt、U32 フラグ)

utf8_to_uvchr
廃止されたした! この関数は Perl の将来のリリヌスから削陀される予定です。
新しいコヌドには䜿甚しないでください。 既存のコヌドから削陀しおください。

文字列「s」の最初の文字のネむティブ コヌド ポむントを返したす。
UTF-8 ゚ンコヌドであるず想定されたす。 「retlen」は、バむト単䜍の長さに蚭定されたす。
そのキャラクタヌ。

すべおではありたせんが、䞀郚の UTF-8 の䞍正な圢匏が怜出され、実際に䞀郚の䞍正な圢匏が怜出されたす。
入力により、入力バッファの末尟を超えた読み取りが発生する可胜性がありたす。そのため、
関数は廃止されたした。 代わりに「utf8_to_uvchr_buf」を䜿甚しおください。

「s」が怜出された異垞の 8 ぀を指しおおり、UTFXNUMX 譊告が有効になっおいる堎合、
れロが返され、*retlen は (「retlen」が NULL でない堎合) -1 に蚭定されたす。 もしそれらが
譊告はオフ、明確に定矩されおいる堎合は蚈算倀 (たたは Unicode REPLACEMENT
CHARACTER (そうでない堎合) がサむレントに返され、*retlen が蚭定されたす (「retlen」が蚭定されおいない堎合)
NULL) なので、("s" + *retlen) が "s" 内の次の可胜な䜍眮になりたす。
䞍正でない文字を開始したす。 詳现に぀いおは、「utf8n_to_uvchr」を参照しおください。
REPLACEMENT CHARACTER が返されたす。

UV utf8_to_uvchr(const U8 *s, STRLEN *retlen)

utf8_to_uvuni
廃止されたした! この関数は Perl の将来のリリヌスから削陀される予定です。
新しいコヌドには䜿甚しないでください。 既存のコヌドから削陀しおください。

文字列「s」の最初の文字の Unicode コヌド ポむントを返したす。
UTF-8 ゚ンコヌドであるず想定されたす。 「retlen」は、バむト単䜍の長さに蚭定されたす。
そのキャラクタヌ。

すべおではありたせんが、䞀郚の UTF-8 の䞍正な圢匏が怜出され、実際に䞀郚の䞍正な圢匏が怜出されたす。
入力により、入力バッファの末尟を超えた読み取りが発生する可胜性がありたす。これが理由の XNUMX ぀です。
この関数が廃止される理由。 もうXNUMX぀は、非垞に限られた範囲でのみ発生するずいうこずです。
Unicode ずネむティブ コヌド ポむントに興味がある堎合は、
あなた。 代替案に぀いおは、「utf8_to_uvuni_buf」を参照しおください。

「s」が怜出された異垞の 8 ぀を指しおおり、UTFXNUMX 譊告が有効になっおいる堎合、
れロが返され、*retlen は (「retlen」が NULL を指しおいない堎合) -1 に蚭定されたす。 もし
これらの譊告はオフであり、明確に定矩されおいる堎合は蚈算倀 (たたは Unicode
REPLACEMENT CHARACTER (そうでない堎合) がサむレントに返され、*retlen が蚭定されたす (そうでない堎合)。
"retlen" は NULL ではない)、そのため ("s" + *retlen) が "s" 内の次の可胜な䜍眮になりたす。
それは、䞍正ではない文字を開始する可胜性がありたす。 詳现に぀いおは、「utf8n_to_uvchr」を参照しおください。
REPLACEMENT CHARACTER が返されたずき。

UV utf8_to_uvuni(const U8 *s, STRLEN *retlen)

オプトリヌ 建蚭


新しいアサむンノップ
代入挔算を構築、チェックし、返したす。 å·Š ず 右 䟛絊
割り圓おのパラメヌタ。 それらはこの関数によっお消費され、䞀郚になりたす
構築された op ツリヌの。

If オプタむプ 「OP_ANDASSIGN」、「OP_ORASSIGN」、たたは「OP_DORASSIGN」の堎合、適切な
条件付き optree が構築されたす。 もし オプタむプ 二項挔算子のオペコヌドです。
「OP_BIT_OR」など、バむナリ挔算を実行する挔算が構築されたす。
そしお結果を巊の匕数に代入したす。 いずれにしおも、もし オプタむプ れロ以倖です
その埌 フラグ 効果はありたせん。

If オプタむプ がれロの堎合、プレヌンなスカラヌたたはリストの代入が構築されたす。 どれの
割り圓おの皮類は自動的に決定されたす。 フラグ XNUMXビットを䞎える
ただし、「OPf_KIDS」は自動的に蚭定され、䞊にシフトされたす。
1 ビット、倀 2 たたは XNUMX のビットを陀く、「op_private」の XNUMX ビット
必芁に応じお自動的に蚭定されたす。

OP * newASSIGNOP(I32 フラグ、OP *left、I32 optype、
OP※右

新しいBINOP
任意のバむナリ型の op を構築、チェックし、返したす。 type オペコヌドです。
フラグ 「OPf_KIDS」が蚭定されるこずを陀き、「op_flags」の XNUMX ビットを指定したす。
自動的に、「op_private」の XNUMX ビットを XNUMX ビット䞊にシフトしたす。
倀 1 たたは 2 のビットは必芁に応じお自動的に蚭定されたす。 最初の ず last
バむナリ挔算の盎接の子ずなる挔算を XNUMX ぀たで指定したす。 圌らは消費される
この関数により、構築された op ツリヌの䞀郚になりたす。

OP * newBINOP(I32 タむプ、I32 フラグ、OP *first、
OP ※ラスト

NEWCONDOP
条件匏 ("cond_expr") 挔算を構築、怜査し、返したす。 フラグ
「OPf_KIDS」が蚭定されるこずを陀き、「op_flags」の XNUMX ビットを指定したす。
自動的に、「op_private」の XNUMX ビットを XNUMX ビット䞊にシフトしたす。
倀 1 のビットが自動的に蚭定されるこずを意味したす。 最初の 衚珟を提䟛したす
XNUMX ぀のブランチの間で遞択し、 トゥルヌオペ ず 停りの 枝を䟛絊したす。
それらはこの関数によっお消費され、構築された op ツリヌの䞀郚になりたす。

OP * newCONDOP(I32 フラグ、OP *first、OP *trueop、
OP *停゜プ)

新しいDEFSVOP
$_ にアクセスするための操䜜を、字句倉数ずしお構築しお返したす (
珟圚のスコヌプ内で「my $_」ずしお宣蚀されるか、グロヌバル $_ ずしお宣蚀されたす。

OP * newDEFSVOP()

NEWFOROP
「foreach」ルヌプ (反埩) を衚す op ツリヌを構築、チェックし、返したす。
倀のリストを通じお)。 を可胜にする構造を持぀重量玚のルヌプです。
「last」などによっおルヌプを終了したす。

sv オプションで、各項目に順番に゚むリアスされる倉数を指定したす。 もし
null の堎合、デフォルトは $_ (字句たたはグロヌバル) になりたす。 匏 のリストを提䟛したす
反埩凊理する倀。 コロナ新型りィルス(COVID-XNUMX)やメンタルヘルスの厩壊を避ける為の ルヌプの本䜓を提䟛し、 CONT
オプションで、本䜓の埌半ずしお動䜜する「継続」ブロックを提䟛したす。
これらの optree 入力はすべおこの関数によっお消費され、
op ツリヌを構築したした。

フラグ 「leaveloop」op の「op_flags」の XNUMX ビットを䞎え、䞊にシフトしたす。
XNUMX ビット、「leaveloop」op の「op_private」の XNUMX ビット、ただし、(
どちらの堎合も) 䞀郚のビットは自動的に蚭定されたす。

OP * newFOROP(I32 フラグ、OP *sv、OP *expr、OP *block、
OP *続き)

newギブノップ
「指定された」ブロックを衚す op ツリヌを構築、チェックし、返したす。 条件
字句倉数にロヌカルに割り圓おられる匏を指定したす。
コロナ新型りィルス(COVID-XNUMX)やメンタルヘルスの厩壊を避ける為の 「指定された」構成䜓の本䜓を提䟛したす。 圌らはこれに飲み蟌たれおしたう
機胜し、構築された op ツリヌの䞀郚になりたす。 defsv_off パッドオフセットです
圱響を受けるスカラヌ字句倉数の倀。 0 の堎合、グロヌバル $_
䜿甚されたす。

OP * newGIVENOP(OP *cond, OP *block,
PADOFFSET defsv_off)

newGVOP 埋め蟌みオブゞェクトを含むあらゆるタむプの挔算を構築、チェックし、返したす。
GV ぞの参照。 type オペコヌドです。 フラグ XNUMX ビットの「op_flags」を䞎えたす。
gv 操䜜が参照する必芁がある GV を識別したす。 この関数を呌び出すず、
それぞの参照の所有暩を譲枡したす。

OP * newGVOP(I32 タむプ、I32 フラグ、GV *gv)

新しいリスト
任意のリスト型の挔算を構築、チェックし、返したす。 type オペコヌドです。
フラグ 「OPf_KIDS」が蚭定されるこずを陀き、「op_flags」の XNUMX ビットを指定したす。
必芁に応じお自動的に実行されたす。 最初の ず last 最倧 XNUMX ぀の操䜜を盎接指定したす
リスト op の子。 それらはこの関数によっお消費され、
op ツリヌを構築したした。

ほずんどのリスト挔算子では、チェック関数はすべおの子䟛挔算子が存圚するこずを期埅したす。
すでにあるため、「newLISTOP(OP_JOIN, ...)」(䟋) を呌び出すこずは適切ではありたせん。 あなたは䜕ですか
その堎合にやりたいのは、OP_LISTタむプのOPを䜜成し、さらに子を远加するこずです
それを指定しお、「op_convert_list」を呌び出したす。 詳现に぀いおは、「op_convert_list」を参照しおください。

OP * newLISTOP(I32 タむプ、I32 フラグ、OP *first、
OP ※ラスト

新しいLOGOP
論理 (フロヌ制埡) 挔算を構築、チェックし、返したす。 type オペコヌドです。
フラグ 「OPf_KIDS」が蚭定されるこずを陀き、「op_flags」の XNUMX ビットを指定したす。
自動的に、「op_private」の XNUMX ビットを XNUMX ビット䞊にシフトしたす。
倀 1 のビットが自動的に蚭定されるこずを意味したす。 最初の 衚珟を提䟛したす
流れをコントロヌルし、 他の オペレヌションのサむド (代替) チェヌンを提䟛したす。 圌らは
はこの関数によっお消費され、構築された op ツリヌの䞀郚になりたす。

OP * newLOGOP(I32 タむプ、I32 フラグ、OP *first、
OP ※その他

NEWLOOPEX
ルヌプを終了する操䜜 (「goto」や「last」など) を構築、チェックし、返したす。
type オペコヌドです。 ラベル のタヌゲットを決定するパラメヌタを提䟛したす。
オプ; この関数によっお消費され、構築された op ツリヌの䞀郚になりたす。

OP * newLOOPEX(I32タむプ、OP *ラベル)

newLOOPOP
ルヌプを衚珟する op ツリヌを構築、怜査し、返したす。 これは単なるルヌプです
op ツリヌを介した制埡フロヌ内。 重量玚のルヌプはありたせん
「last」などでルヌプを抜けられる構造。 フラグ 䞎える
最䞊䜍の挔算の「op_flags」の XNUMX ビット䞀郚のビットが蚭定されるこずを陀く
必芁に応じお自動的に実行されたす。 匏 匏制埡ルヌプを提䟛したす
反埩、および コロナ新型りィルス(COVID-XNUMX)やメンタルヘルスの厩壊を避ける為の ルヌプの本䜓を提䟛したす。 圌らはこれに飲み蟌たれおしたう
機胜し、構築された op ツリヌの䞀郚になりたす。 デバッグ可胜 珟圚、
未䜿甚であり、垞に 1 である必芁がありたす。

OP * newLOOPOP(I32 フラグ、I32 デバッグ可胜、OP *expr、
OP *ブロック)

newMETHOP
評䟡されたメ゜ッド名を持぀メ゜ッド型の挔算を構築、チェックし、返したす。
実行時。 type オペコヌドです。 フラグ 「op_flags」の XNUMX ビットを指定したす。ただし、
「OPf_KIDS」は自動的に蚭定され、XNUMX ビット䞊にシフトするず、XNUMX ビットが
ただし、倀 1 のビットは自動的に蚭定されたす。
ダむナミックメス メ゜ッド名を評䟡する挔算を提䟛したす。 これに消費される
機胜し、構築された op ツリヌの䞀郚になりたす。 サポヌトされおいるオプタむプ:
OP_メ゜ッド。

OP * newMETHOP(I32 タむプ、I32 フラグ、OP *first)

newMETHOP_named
定数のメ゜ッド名を持぀メ゜ッド型の op を構築、チェックし、返したす。
type オペコヌドです。 フラグ 「op_flags」の XNUMX ビットを䞎え、䞊にシフトしたす
XNUMX ビット、「op_private」の XNUMX ビット。 const_meth 定数メ゜ッドを提䟛したす
名前; 共有 COW 文字列である必芁がありたす。 サポヌトされおいるオプタむプ: OP_METHOD_NAMED。

OP * newMETHOP_named(I32 タむプ、I32 フラグ、
SV *const_meth)

新しいNULLLIST
空のリストを衚す新しい「スタブ」挔算を構築、チェックし、返したす。
匏です。

OP * newNULLLIST()

newOP 任意の基本型 (䜙分な芁玠を持たない任意の型) の挔算を構築、チェックし、返したす。
田畑。 type オペコヌドです。 フラグ 「op_flags」の XNUMX ビットを䞎え、そしお、
「op_private」の XNUMX ビットを XNUMX ビット䞊にシフトしたす。

OP * newOP(I32 タむプ、I32 フラグ)

ニュヌPADOP
ぞの参照を含む任意の型の op を構築、チェックし、返したす。
パッド芁玠。 type オペコヌドです。 フラグ XNUMX ビットの「op_flags」を䞎えたす。 あ
パッド スロットは自動的に割り圓おられ、 sv; この関数はかかりたす
それに察する XNUMX ぀の参照の所有暩。

この関数は、Perl が ithread を䜿甚するようにコンパむルされおいる堎合にのみ存圚したす。

OP * newPADOP(I32 タむプ、I32 フラグ、SV *sv)

newPMOP 任意のパタヌン マッチング タむプの op を構築、チェックし、返したす。 type は
オペコヌド。 フラグ XNUMX ビットの「op_flags」を䞎え、XNUMX ビット䞊にシフトするず、
XNUMXビットの「op_private」。

OP * newPMOP(I32 タむプ、I32 フラグ)

newPVOP 埋め蟌みオブゞェクトを含むあらゆるタむプの op を構築、チェックし、返したす。
C レベル ポむンタヌ (PV)。 type オペコヌドです。 フラグ の XNUMX ビットを䞎えたす
「op_flags」。 pv C レベル ポむンタを提䟛したす。このポむンタは、次を䜿甚しお割り圓おられおいる必芁がありたす。
"PerlMemShared_malloc"; op が砎棄されるずメモリが解攟されたす。

OP * newPVOP(I32 タむプ、I32 フラグ、char *pv)

新しい範囲
䞋䜍の「フリップ」および「フロップ」挔算を䌎う「範囲」挔算を構築しお返したす。
フラグ 「フリップ」挔算の「op_flags」の XNUMX ビットを䞎え、XNUMX ビット䞊にシフトしたす
ビット、「flip」操䜜ず「range」操䜜の䞡方の「op_private」の XNUMX ビット。ただし、
倀 1 のビットが自動的に蚭定されるこずを意味したす。 å·Š ず 右 䟛絊
範囲の終点を制埡する匏。 圌らはこれに飲み蟌たれおしたう
機胜し、構築された op ツリヌの䞀郚になりたす。

OP * newRANGE(I32 フラグ、OP *巊、OP *右)

newSLICEOP
「lslice」(リストスラむス) 挔算を構築、チェックし、返したす。 フラグ 䞎える
XNUMX ビットの「op_flags」。ただし、「OPf_KIDS」は自動的に蚭定されたす。
「op_private」の XNUMX ビットを XNUMX ビット䞊にシフトしたす。ただし、
倀 1 たたは 2 は必芁に応じお自動的に蚭定されたす。 リスト倀 ず 添字 䟛絊
スラむスのパラメヌタ。 それらはこの関数によっお消費され、
op ツリヌを構築したした。

OP * newSLICEOP(I32 フラグ、OP *添え字、
OP *リスト倀)

newSTATEOP
状態挔算 (COP) を構築したす。 状態操䜜は通垞「次の状態」操䜜ですが、
珟圚コンパむルされおいるコヌドのデバッグが有効になっおいる堎合は、「dbstate」オペレヌションになりたす。 状態
op は「PL_curcop」(たたは「PL_compiling」) から蚭定されたす。 もし ラベル null ではない、それは
状態挔算に付けるラベルの名前を指定したす。 この関数はかかりたす
が指すメモリの所有暩 ラベル、無料になりたす。 フラグ 䞎える
状態 op の「op_flags」の XNUMX ビット。

If o null の堎合、状態 op が返されたす。 それ以倖の堎合、状態挔算は次のように結合されたす。 o
"lineseq" リスト挔算に倉換され、返されたす。 o この関数によっお消費され、
返された op ツリヌの䞀郚になりたす。

OP * newSTATEOP(I32 フラグ、char *ラベル、OP *o)

newSVOP 埋め蟌み SV を含むあらゆるタむプの op を構築、チェックし、返したす。
type オペコヌドです。 フラグ XNUMX ビットの「op_flags」を䞎えたす。 sv SVを䞎える
opに埋め蟌みたす。 この関数は、その関数ぞの XNUMX ぀の参照の所有暩を取埗したす。

OP * newSVOP(I32 タむプ、I32 フラグ、SV *sv)

newUNOP 任意の単項型の挔算を構築、怜査し、返したす。 type オペコヌドです。
フラグ 「OPf_KIDS」が蚭定されるこずを陀き、「op_flags」の XNUMX ビットを指定したす。
必芁に応じお自動的に、XNUMX ビット䞊にシフトしお、
「op_private」。ただし、倀 1 のビットが自動的に蚭定されたす。 最初の
単項挔算の盎接の子ずなるオプションの挔算を指定したす。 それはによっお消費されたす
この関数は、構築された op ツリヌの䞀郚になりたす。

OP * newUNOP(I32 タむプ、I32 フラグ、OP *first)

新しいUNOP_AUX
「newUNOP」に䌌おいたすが、代わりに op_aux を䜿甚しお UNOP_AUX 構造䜓を䜜成したす。
aux に初期化されたした

OP* newUNOP_AUX(I32 タむプ、I32 フラグ、OP* 最初、
UNOP_AUX_item *aux)

新しいWHENOP
「when」ブロックを衚す op ツリヌを構築、チェックし、返したす。 条件
テスト匏を提䟛し、 コロナ新型りィルス(COVID-XNUMX)やメンタルヘルスの厩壊を避ける為の 実行されるブロックを提䟛したす
テストが true ず評䟡された堎合。 それらはこの関数によっお消費され、䞀郚になりたす
構築された op ツリヌの。 条件 倚くの堎合、DWIM 的に解釈されたす。
$_ ずの比范。「デフォルト」ブロックを生成する堎合は null にするこずもできたす。

OP * newWHENOP(OP *cond, OP *block)

newWILEOP
「while」ルヌプを衚す op ツリヌを構築、チェックし、返したす。 これは
重量玚ルヌプ、「最埌」でルヌプから抜けるこずができる構造ずなっおおり、
みたいな。

ルヌプ ルヌプ内で䜿甚する、オプションの事前構築された「enterloop」挔算子です。 もしそれが
null の堎合、適切な操䜜が自動的に構築されたす。 匏 を䟛絊したす
ルヌプの制埡匏。 コロナ新型りィルス(COVID-XNUMX)やメンタルヘルスの厩壊を避ける為の ルヌプの本䜓を提䟛し、 CONT
オプションで、本䜓の埌半ずしお動䜜する「継続」ブロックを提䟛したす。
これらの optree 入力はすべおこの関数によっお消費され、
op ツリヌを構築したした。

フラグ 「leaveloop」op の「op_flags」の XNUMX ビットを䞎え、䞊にシフトしたす。
XNUMX ビット、「leaveloop」op の「op_private」の XNUMX ビット、ただし、(
どちらの堎合も) 䞀郚のビットは自動的に蚭定されたす。 デバッグ可胜 珟圚は未䜿甚です
そしお垞に 1 である必芁がありたす。 私が持っおいたす true ずしお指定するず、ルヌプ本䜓を匷制的に
独自のスコヌプに含めるこずができたす。

OP * newWHILEOP(I32 フラグ、I32 デバッグ可胜、
LOOP *ルヌプ、OP *expr、OP *ブロック、
OP *続き、I32 has_my)

オプトリヌ 操䜜 機胜


alloccopstash
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

この関数はスレッド ビルドでのみ䜿甚可胜で、゚ントリを
枡されるスタッシュの「PL_stashpad」。

PADOFFSET alloccopstash(HV *hv)

ブロック゚ンド
コンパむル時のスコヌプ終了を凊理したす。 床 によっお返されるセヌブスタック むンデックスです。
「block_start」、および seq ブロックの本䜓です。 おそらくブロックを返したす
倉曎されたした。

OP * block_end(I32 フロア、OP *seq)

ブロックスタヌト
コンパむル時のスコヌプ゚ントリを凊理したす。 ブロック終了時にヒントが埩元されるように手配したす。
たた、字句倉数のスコヌプを正しくするためにパッド シヌケンス番号も凊理したす。
「block_end」で䜿甚するセヌブスタック むンデックスを返したす。

int block_start(int full)

ck_entersub_args_list
「entersub」op ツリヌの匕数郚分のデフォルトの修正を実行したす。 これ
リスト コンテキストを各匕数操䜜に適甚するこずで構成されたす。 これは
「&」のマヌクが付いた呌び出し、メ゜ッド呌び出し、たたは呌び出しで䜿甚される暙準凊理
サブルヌチン参照、たたは呌び出し先がアクセスできないその他の呌び出しを介しお
コンパむル時、たたは呌び出し先にプロトタむプがない呌び出しで識別されたす。

OP * ck_entersub_args_list(OP *entersubop)

ck_entersub_args_proto
に基づいお「entersub」op ツリヌの匕数郚分の修正を実行したす。
サブルヌチンのプロトタむプ。 これにより、匕数 ops に次のようなさたざたな倉曎が加えられたす。
「refgen」ops の挿入たでコンテキストを適甚し、番号ず
プロトタむプによっお指瀺された匕数の構文タむプ。 これが暙準です
サブルヌチン呌び出しで䜿甚される凊理。「&」のマヌクが付いおいたせん。呌び出し先は次のずおりです。
コンパむル時に識別され、プロトタむプがありたす。

プロトスフ 呌び出しに適甚されるサブルヌチン プロトタむプを提䟛したす。 それはもしかしたら
通垞の定矩されたスカラヌ。文字列倀が䜿甚されたす。 あるいは、
䟿宜䞊、サブルヌチン オブゞェクト (「SV*」にキャストされた「CV*」) である可胜性がありたす。
これにはプロトタむプがありたす。 提䟛されたプロトタむプは、どのような圢匏であっおも、
op ツリヌによっお参照される実際の呌び出し先ず䞀臎するようにしたす。

匕数 ops がプロトタむプず䞀臎しない堎合、たずえば
受け入れられない数の匕数がある堎合でも、有効な op ツリヌが返されたす。 ゚ラヌ
パヌサヌの状態に反映され、通垞は次の時点で XNUMX ぀の䟋倖が発生したす。
発生したすべおのコンパむル ゚ラヌをカバヌする最䞊䜍レベルの解析。 で
゚ラヌ メッセヌゞでは、呌び出し先は、 なめぐ
パラメヌタに䞀臎する最初のデバむスのリモヌトコントロヌル URL を返したす。

OP * ck_entersub_args_proto(OP *entersubop,
GV *namegv、SV *protosv)

ck_entersub_args_proto_or_list
次のいずれかに基づいお、「entersub」op ツリヌの匕数郚分の修正を実行したす。
サブルヌチン プロトタむプ、たたはデフォルトのリスト コンテキスト凊理を䜿甚したす。 これは
サブルヌチン呌び出しで䜿甚される暙準凊理。「&」のマヌクが付いおいたせん。
呌び出し先はコンパむル時に識別できたす。

プロトスフ 呌び出しに適甚されるサブルヌチン プロトタむプを指定するか、たたはそれを瀺したす。
原型がないずいうこず。 それは通垞のスカラヌである可胜性がありたす。その堎合、
定矩されおいる堎合は文字列倀がプロトタむプずしお䜿甚され、未定矩の堎合は文字列倀がプロトタむプずしお䜿甚されたす。
その堎合、プロトタむプは存圚したせん。 あるいは、䟿宜䞊、
サブルヌチン オブゞェクト (「SV*」にキャストされた「CV*」)、そのプロトタむプ
ある堎合は䜿甚されたす。 提䟛されたプロトタむプ (たたはその欠劂)、
どちらの圢匏であっおも、操䜜によっお参照される実際の呌び出し先ず䞀臎する必芁はありたせん。
ツリヌ。

匕数 ops がプロトタむプず䞀臎しない堎合、たずえば
受け入れられない数の匕数がある堎合でも、有効な op ツリヌが返されたす。 ゚ラヌ
パヌサヌの状態に反映され、通垞は次の時点で XNUMX ぀の䟋倖が発生したす。
発生したすべおのコンパむル ゚ラヌをカバヌする最䞊䜍レベルの解析。 で
゚ラヌ メッセヌゞでは、呌び出し先は、 なめぐ
パラメヌタに䞀臎する最初のデバむスのリモヌトコントロヌル URL を返したす。

OP * ck_entersub_args_proto_or_list(OP *entersubop,
GV *namegv、
SV *protosv)

cv_const_sv
「cv」がむンラむン展開に適した定数サブの堎合、定数倀を返したす。
サブから返されたした。 それ以倖の堎合は、NULL を返したす。

定数サブルヌチンは、「newCONSTSUB」を䜿甚しお䜜成するか、「定数」で説明されおいるように䜜成できたす。
perlsub の関数」。

SV* cv_const_sv(const CV *const cv)

cv_get_call_checker
ぞの呌び出しを修正するために䜿甚される関数を取埗したす。 cv。 具䜓的には、
関数はサブルヌチン呌び出しの「entersub」op ツリヌに適甚され、マヌクされおいたせん。
「&」を䜿甚するず、コンパむル時に呌び出し先を次のように識別できたす。 cv.

C レベルの関数ポむンタは次のように返されたす。 *ckfun_p、その SV 匕数は次のずおりです。
戻っおきた *ckobj_p。 この関数は次の方法で呌び出されるように蚭蚈されおいたす。

entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));

この通話では、 ゚ンタヌサブップ 「entersub」挔算子ぞのポむンタです。眮換される可胜性がありたす。
チェック機胜により、 なめぐ 䜿甚する必芁がある名前を提䟛する GV です
必芁に応じお、チェック関数によっお「entersub」オペレヌションの呌び出し先を参照したす。
蚺断を発行したす。 暙準倖のチェック機胜を適甚するこずが蚱可されおいたす
別のサブルヌチンの呌び出しやメ゜ッド呌び出しなどの状況。

デフォルトでは、関数は Perl_ck_entersub_args_proto_or_list であり、SV
パラメヌタは cv 自䜓。 これにより、暙準のプロトタむプ凊理が実装されたす。 かもね
特定のサブルヌチンに぀いおは、「cv_set_call_checker」によっお倉曎されたす。

void cv_get_call_checker(CV *cv,
Perl_call_checker *ckfun_p,
SV **ckobj_p)

cv_set_call_checker
「cv_set_call_checker_flags」の元の圢匏。これに枡されたす。
䞋䜍互換性のための「CALL_CHECKER_REQUIRE_GV」フラグ。

void cv_set_call_checker(CV *cv,
Perl_call_checker ckfun、
SV *ckobj)

cv_set_call_checker_flags
ぞの通話を解決するために䜿甚される関数を蚭定したす。 cv。 具䜓的には、
関数はサブルヌチン呌び出しの「entersub」op ツリヌに適甚され、マヌクされおいたせん
「&」を䜿甚するず、コンパむル時に呌び出し先を次のように識別できたす。 cv.

C レベルの関数ポむンタは次の圢匏で提䟛されたす。 くふん、その SV 匕数は次のずおりです。
で䟛絊される CKOBJ。 関数は次のように定矩する必芁がありたす。

STATIC OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)

これは次の方法で呌び出すこずを目的ずしおいたす。

entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);

この通話では、 ゚ンタヌサブップ 「entersub」挔算子ぞのポむンタです。眮換される可胜性がありたす。
チェック機胜により、 なめぐ が䜿甚する名前を指定したす。
䜕かを発行する必芁がある堎合は、「entersub」オペレヌションの呌び出し先を参照する関数をチェックしたす。
蚺断。 暙準倖のチェック機胜を適甚するこずが蚱可されおいたす
別のサブルヌチンの呌び出しやメ゜ッド呌び出しなどの状況。

なめぐ 実際には GV ではない可胜性がありたす。 効率性を高めるために、Perl は CV たたは他の SV を枡す堎合がありたす。
その代わり。 枡されたものはすべお「cv_name」の最初の匕数ずしお䜿甚できたす。 あなた
"CALL_CHECKER_REQUIRE_GV" を フラグ.

特定の CV の珟圚の蚭定は、「cv_get_call_checker」で取埗できたす。

void cv_set_call_checker_flags(
CV *cv、Perl_call_checker ckfun、SV *ckobj、
U32 フラグ
)

リンクリスト
optree のルヌトを指定しお、「op_next」を䜿甚しお実行順序に埓っおツリヌをリンクしたす。
ポむンタを取埗し、実行された最初の操䜜を返したす。 これがすでに行われおいる堎合は、
やり盎しは行われず、「o->op_next」が返されたす。 「o->op_next」がただない堎合
セット、 o 少なくずも「UNOP」である必芁がありたす。

OP* リンクリスト(OP *o)

新しいコンスタ
「newCONSTSUB_flags」を参照しおください。

CV* newCONSTSUB(HV* スタッシュ、const char* 名、SV* sv)

newCONSTSUB_flags
Perl「sub FOO () { 123 }」に盞圓する定数 sub を䜜成したす。
コンパむル時のむンラむン化甚。

珟圚、「flags」に有効な倀は SVf_UTF8 のみです。

新しく䜜成されたサブルヌチンは、SV で枡されたぞの参照の所有暩を取埗したす。

SV に NULL を枡すず、「sub BAR () {}」ず同等の定数 sub が䜜成されたす。
デストラクタヌずしお䜿甚される堎合は呌び出されたせんが、呌び出しのオヌバヌヘッドが抑制されたす。
「オヌトロヌド」にしたす。 (ただし、このフォヌムはコンパむル時にむンラむン化できたせん。)

CV* newCONSTSUB_flags(HV* スタッシュ、const char* 名、
STRLEN len、U32 フラグ、SV* sv)

newXS XSUB を Perl サブルヌチンずしお接続するために「xsubpp」によっお䜿甚されたす。 ファむル名 静的である必芁がある
ストレヌゞずしお盎接䜿甚されるため、 CvFILE()、コピヌは䜜成されたせん。

OpHAS_SIBLING
o に兄匟がある堎合は true を返したす

bool OpHAS_SIBLING(OP *o)

OpLASTSIB_set
o にはこれ以䞊兄匟がいないものずしおマヌクされたす。 「PERL_OP_PARENT」ビルドでは、o をマヌクしたす
指定された芪を持぀。 「OpMORESIB_set」および「OpMAYBESIB_set」も参照しおください。 のために
䞊䜍レベルのむンタヌフェむスに぀いおは、「op_sibling_splice」を参照しおください。

void OpLASTSIB_set(OP *o, OP *parent)

OpMAYBESIB_set
sib が有効かどうかに応じお、条件付きで「OpMORESIB_set」たたは「OpLASTSIB_set」を実行したす。
null ではない。 䞊䜍レベルのむンタヌフェむスに぀いおは、「op_sibling_splice」を参照しおください。

void OpMAYBESIB_set(OP *o, OP *sib, OP *parent)

OpMORESIB_set
o の兄匟をれロ以倖の倀 sib に蚭定したす。 「OpLASTSIB_set」および「OpLASTSIB_set」も参照しおください。
「OpMAYBESIB_set」。 䞊䜍レベルのむンタヌフェむスに぀いおは、「op_sibling_splice」を参照しおください。

void OpMORESIB_set(OP *o, OP *sib)

兄匟
o の兄匟を返したす。兄匟がない堎合は NULL を返したす。

OP* OpSIBLING(OP *o)

op_append_elem
リスト型の操䜜内に盎接含たれる操䜜のリストに項目を远加したす。
長くなったリストを返したす。 最初の はリスト型の挔算であり、 last するべきです
リストに远加したす。 オプタむプ リストの目的のオペコヌドを指定したす。 もし 最初の
はただ正しいタむプのリストではないため、適切なタむプのリストにアップグレヌドされたす。 どちらかの堎合
最初の or last が null の堎合、もう䞀方は倉曎されずに返されたす。

OP * op_append_elem(I32 optype, OP *first, OP *last)

op_append_list
XNUMX ぀のリスト型操䜜内に盎接含たれる操䜜のリストを連結したす。
結合されたリストを返したす。 最初の ず last 連結するリスト型の挔算です。
オプタむプ リストの目的のオペコヌドを指定したす。 どちらかの堎合 最初の or last ではありたせん
すでに正しいタむプのリストがある堎合は、リストが XNUMX ぀にアップグレヌドされたす。 どちらかの堎合 最初の
or last が null の堎合、もう䞀方は倉曎されずに返されたす。

OP * op_append_list(I32 optype, OP *first, OP *last)

OP_クラス
提䟛された OP のクラス、぀たり、どの *OP 構造䜓が䜿甚されおいるかを返したす。
コア操䜜の堎合、これは珟圚 PL_opargs から情報を取埗したすが、PL_opargs は取埗したせん。
䜿甚されるタむプを垞に正確に反映したす。 カスタム操䜜の堎合、型は次から返されたす。
登録が正確であるこずを確認するのはレゞストリヌの責任です。 の
返される倀は、op.h の OA_* 定数の XNUMX ぀になりたす。

U32 OP_CLASS(OP *o)

op_contextualize
匏を衚す op ツリヌに構文コンテキストを適甚したす。 o OPです
朚ず コンテキスト を指定するには、「G_SCALAR」、「G_ARRAY」、たたは「G_VOID」である必芁がありたす。
適甚するコンテキスト。 倉曎された op ツリヌが返されたす。

OP * op_contextualize(OP *o, I32 コンテキスト)

op_convert_list
倉換する o ただリスト挔算でない堎合はリスト挔算に倉換し、
指定の type、チェック関数を呌び出し、必芁に応じおタヌゲットを割り圓おたす。
そしお折り畳み定数。

リスト型の操䜜は通垞、「newLISTOP」を介しお䞀床に XNUMX ぀ず぀構築されたす。
「op_prepend_elem」ず「op_append_elem」。 そしお最埌にそれはに枡されたす
「op_convert_list」を䜿甚しお正しいタむプにしたす。

OP * op_convert_list(I32 タむプ、I32 フラグ、OP *o)

OP_DESC 提䟛された OP の短い説明を返したす。

const char * OP_DESC(OP *o)

op_free opを解攟したす。 これは、op がどの optree からもリンクされおいない堎合にのみ䜿甚しおください。

void op_free(OP *o)

op_linklist
この機胜は「LINKLIST」マクロの実装です。 そうであっおはなりたせん
盎接電話した。

OP* op_linklist(OP *o)

op_lvalue
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

lvalue (「倉曎可胜」) コンテキストを op ずその子に䌝播したす。 type
コンテキスト タむプを衚したす。倧たかに、実行する操䜜のタむプに基づいおいたす。
"local()" は OP_NULL で衚されたすが、op タむプがないため倉曎したす。
独自のものです (巊蟺倀挔算のフラグによっお通知されたす)。

この関数は、「$x+1」などの倉曎できないものを怜出し、
圌らにずっおは間違いです。 たずえば、「$x+1 = 2」ずするず、op で呌び出されたす。
タむプ OP_ADD ず OP_SASSIGN の「type」匕数。

たた、巊蟺倀コンテキストで特別に動䜜する必芁があるものにフラグを立おたす。
「$$x = 5」は、$x 内の参照を有効にする必芁がある可胜性がありたす。

OP * op_lvalue(OP *o、I32 タむプ)

OP_NAME 提䟛された OP の名前を返したす。 コア操䜜の堎合、これは名前を怜玢したす。
op_type; op_ppaddr からのカスタム op の堎合。

const char * OP_NAME(OP *o)

op_null op が䞍芁になったずきに、op を無効化したすが、䟝然ずしお他のものからリンクされおいたす。
䜜戊。

void op_null(OP *o)

op_parent
o に芪がある堎合、o の芪 OP を返したす。 それ以倖の堎合は NULL を返したす。 これ
この関数は、「-DPERL_OP_PARENT」でビルドされた Perl でのみ䜿甚できたす。

OP* op_parent(OP *o)

op_prepend_elem
リスト型の操䜜内に盎接含たれる操䜜のリストに項目を远加したす。
長くなったリストを返したす。 最初の リストの先頭に远加する操䜜です。 last
はリスト型の挔算です。 オプタむプ リストの目的のオペコヌドを指定したす。 もし last
はただ正しいタむプのリストではないため、適切なタむプのリストにアップグレヌドされたす。 どちらかの堎合
最初の or last が null の堎合、もう䞀方は倉曎されずに返されたす。

OP * op_prepend_elem(I32 optype, OP *first, OP *last)

op_scope
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

いく぀かの远加の op で op ツリヌをラップし、実行時に動的スコヌプが有効になるようにしたす。
が䜜成されたす。 元の操䜜は新しい動的スコヌプで実行され、その埌、
正垞に終了するず、スコヌプは巻き戻されたす。 远加の䜜戊
動的スコヌプの䜜成ず巻き戻しに䜿甚されるのは、通垞は「enter」/「leave」です。
ペアですが、操䜜が十分に単玔である堎合は、代わりに「スコヌプ」操䜜を䜿甚するこずもできたす。
完党な動的スコヌプ構造が必芁です。

OP * op_scope(OP *o)

op_sibling_splice
op_sibling の既存のチェヌンの構造を線集するための䞀般的な関数
ノヌド。 Perl レベルから類掚するず スプラむス 機胜を䜿甚するず、削陀できたす
XNUMX 個以䞊の連続したノヌド。それらを XNUMX 個以䞊の異なるノヌドに眮き換えたす。
芪ノヌド䞊で必芁な op_first/op_last ハりスキヌピングを実行し、
子に察する op_sibling 操䜜。 最埌に削陀されたノヌドは次のようにマヌクされたす。
op_sibling/op_sibparent たたは op_moresib フィヌルドを次のように曎新するこずで、最埌のノヌドずしお
適切な。

op_next は操䜜されず、ノヌドも解攟されないこずに泚意しおください。 それが
発信者の責任。 たた、空のリスト挔算子は䜜成されたせん。
リストなど。 次のような高レベルの関数を䜿甚したす op_append_elem() そのために。

parent は兄匟チェヌンの芪ノヌドです。 次の堎合は NULL ずしお枡される可胜性がありたす。
スプラむシングは、チェヌン内の最初たたは最埌の操䜜には圱響したせん。

start は、スプラむスされる最初のノヌドの前のノヌドです。 それに続くノヌド
は削陀され、その埌に ops が挿入されたす。 NULL の堎合、最初のノヌド
以降は削陀され、先頭にノヌドが挿入されたす。

del_count は削陀するノヌドの数です。 れロの堎合、ノヌドは削陀されたせん。 -1の堎合
たたは、残りの子䟛の数以䞊の堎合、残りの子䟛はすべお
削陀されたした。

insert は、ノヌドの代わりに挿入されるノヌド チェヌンの最初のノヌドです。 もし
NULL、ノヌドは挿入されたせん。

削陀された操䜜のチェヌンの先頭が返されるか、削陀された操䜜がない堎合は NULL が返されたす。

䟋

リタヌン前のアクション
------ ----- ----- -------

PP
スプラむス(P、A、2、XYZ) | | 玀元前
ABCD AXYZD

PP
スプラむス(P, NULL, 1, XY) | | あ
ABCD XYBCD

PP
スプラむス(P, NULL, 3, NULL) | | ABC
ABCD D

PP
スプラむス(P, B, 0, XY) | | ヌル
ABCDABXYCD

「op_sibparent」および「op_moresib」の䞋䜍レベルの盎接操䜜に぀いおは、を参照しおください。
「OpMORESIB_set」、「OpLASTSIB_set」、「OpMAYBESIB_set」。

OP* op_sibling_splice(OP *芪, OP *開始,
int del_count、OP* 挿入)

OP_TYPE_IS
指定された OP が NULL ポむンタヌではなく、指定された型である堎合に true を返したす。

このマクロの吊定である「OP_TYPE_ISNT」も䜿甚できたす。
「OP_TYPE_IS_NN」ず「OP_TYPE_ISNT_NN」は、NULL ポむンタのチェックを省略したす。

bool OP_TYPE_IS(OP *o, オプタむプタむプ)

OP_TYPE_IS_OR_WAS
指定された OP が NULL ポむンタヌではなく、指定された型である堎合に true を返したす。
たたは、タむプ OP_NULL の OP に眮き換えられる前に䜿甚されおいたした。

このマクロの吊定である「OP_TYPE_ISNT_AND_WASNT」も䜿甚できたす。
NULL を省略する「OP_TYPE_IS_OR_WAS_NN」および「OP_TYPE_ISNT_AND_WASNT_NN」
ポむンタチェック。

bool OP_TYPE_IS_OR_WAS(OP *o, Optype タむプ)

rv2cv_op_cv
実行時にサブルヌチンを識別するこずが期埅される op を調べたす。
コンパむル時にどのサブルヌチンを識別するかを刀断しようずしたす。 これは
通垞、Perl のコンパむル䞭に、プロトタむプを䜜成できるかどうかを刀断するために䜿甚されたす。
関数呌び出しに適甚されたす。 CVOP 考慮されおいる op です。通垞は「rv2cv」です
OP. 識別されたサブルヌチンが特定できた堎合は、そのサブルヌチンぞのポむンタが返されたす。
静的に、刀断できなかった堎合は null ポむンタが返されたす。
静的に。

珟圚、RV が「rv2cv」である堎合、サブルヌチンは静的に識別できたす。
挔算察象は、適切な「gv」たたは「const」挔算によっお提䟛されたす。 「gv」オペレヌションは
GV の CV スロットが装着されおいる堎合に適しおいたす。 「const」挔算子は、次の堎合に適しおいたす。
定数倀は CV を指す RV である必芁がありたす。 このプロセスの詳现は倉曎される可胜性がありたす
Perl の将来のバヌゞョンでは。 「rv2cv」OP に「OPpENTERSUB_AMPER」フラグがある堎合
蚭定するず、サブルヌチンを静的に識別する詊みは行われたせん。このフラグは
サブルヌチン呌び出しでコンパむル時マゞックを抑制し、匷制的に䜿甚するために䜿甚されたす。
デフォルトの実行時の動䜜。

If フラグ ビット「RV2CVOPCV_MARK_EARLY」が蚭定されおいる堎合、GV を凊理したす
参照が倉曎されたす。 GV が怜査され、その CV スロットが
空の堎合、「gv」OP には「OPpEARLY_CV」フラグが蚭定されたす。 操䜜がそうでない堎合
最適化が解陀され、CV スロットには埌で次のようなサブルヌチンが远加されたす。
プロトタむプでは、そのフラグは最終的に「チェックするには早すぎたす」ずいう譊告をトリガヌしたす。
プロトタむプ"。

If フラグ ビット「RV2CVOPCV_RETURN_NAME_GV」が蚭定されおいる堎合、
サブルヌチンぞのポむンタは、最も倚くの倀を䞎える GV ぞのポむンタを返したす。
このコンテキストにおけるサブルヌチンの適切な名前。 通垞、これは単なる
サブルヌチンの「CvGV」ですが、匿名 (「CvANON」) サブルヌチンの堎合は、
GV を通じお参照される堎合は、参照元 GV になりたす。 結果の「GV*」は次のようになりたす。
「CV*」にキャストしお返したす。 存圚しない堎合は、通垞どおり null ポむンタが返されたす。
静的に決定可胜なサブルヌチン。

CV * rv2cv_op_cv(OP *cvop、U32 フラグ)

パック ず 開梱


パックリスト
゚ンゞン実装 パック パヌル関数。

void Packlist(SV *cat, const char *pat,
const char *特蚱、SV **beglist、
SV **゚ンドリスト)

解凍文字列
を実装する゚ンゞン unpack パヌル関数。

この関数は、テンプレヌト pat..patend を䜿甚しお、文字列 s..strend を解凍しお、
臎呜的な SV の数。これは Perl 匕数 (@_) スタックにプッシュされたす (぀たり、
この呌び出しの前に「PUTBACK」を発行し、呌び出し埌に「SPAGAIN」を発行する必芁がありたす。
関数。 プッシュされた芁玠の数を返したす。

trend ポむンタず patend ポむンタは、最埌のバむトに続くバむトを指す必芁がありたす。
各文字列の文字。

この関数は Perl 匕数スタック䞊の倀を返したすが、そうではありたせん。
そのスタックからパラメヌタを取埗したす (したがっお、特に次のこずを行う必芁はありたせん)
たずえば「call_pv」ずは異なり、呌び出す前に PUSHMARK が必芁です)。

I32 unpackstring(const char *pat,
const char *patend、const char *s、
const char *トレンド、U32 フラグ)

パッド Rescale デヌタ 構造


CvPADLIST
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

CV では、PADLIST を指すように CvPADLIST(cv) を蚭定できたす。 これは履歎曞です
スクラッチパッド。字句倉数ずオペコヌドを䞀時的か぀スレッドごずに保存したす。
倀。

これらの目的のために、「フォヌマット」は䞀皮の履歎曞です。 eval"" も同様です (そうでない堎合を陀きたす)
自由に呌び出すこずができ、eval"" の実行が完了するず垞に砎棄されたす)。
必須ファむルは、倖郚の字句スコヌプを持たない単玔な eval です。

XSUB には CvPADLIST がありたせん。 dXSTARG は PL_curpad から倀をフェッチしたすが、それは
実際には呌び出し偎のパッドです (そのスロットはすべおの entersub によっお割り圓おられたす)。 しないでください
CV が XSUB (「CvISXSUB()」で決定) の堎合は CvPADLIST を取埗たたは蚭定したす。CvPADLIST
スロットは XSUB の別の内郚目的に再利甚されたす。

PADLIST には、パッドが栌玍される C 配列がありたす。

PADLIST の 0 番目の゚ントリは、「名前」を衚す PADNAMELIST です。
むしろ、字句の「静的型情報」です。 の個々の芁玠
PADNAMELIST は PADNAME です。 将来のリファクタリングにより、PADNAMELIST が停止される可胜性がありたす。
PADLIST の配列に栌玍されるため、これに䟝存しないでください。 「パッドリスト名」を参照しおください。

PADLIST の CvDEPTH 番目の゚ントリは、スタック フレヌムである PAD (AV) です。
CV ぞの再垰の深さ。 フレヌム AV の 0 番目のスロットは、次の AV です。
@_。 他の゚ントリは、倉数ず操䜜タヌゲットのストレヌゞです。

PADNAMELIST を反埩するず、すべおの可胜なパッド項目が反埩されたす。 パッドスロット
タヌゲット (SVs_PADTMP) ず GV の堎合、最終的には &PL_padname_undef "名前" を持ちたすが、
定数のスロットには &PL_padname_const "名前" がありたす (「名前」を参照) Pad_alloc()。 それか
&PL_padname_undef ず &PL_padname_const が䜿甚されるのは実装の詳现です
倉曎の予定。 それらをテストするには、「!PadnamePV(name)」ず「PadnamePV(name)」を䜿甚したす。
&& !PadnameLEN(name)" をそれぞれ指定したす。

私/私たちの倉数スロットのみが有効な名前を取埗したす。 残りは操䜜タヌゲット/GV/定数です
これらはコンパむル時に静的に割り圓おられるか解決されたす。 これらにはありたせん
実行時に eval"" を通じお Perl コヌドから怜玢できる名前。
私/私たちの倉数がどのようになれるか。 「名前」だけでは怜玢できないため、
コンパむル時に割り圓おられるむンデックス (通垞は PL_op->op_targ にありたす)、
圌らのためにSVずいう名前を無駄にするのは意味がありたせん。

PADNAMELIST 内のパッド名には、倉数の名前を保持する PV がありたす。
COP_SEQ_RANGE_LOW フィヌルドず _HIGH フィヌルドは、範囲 (low+1..high を含む) を圢成したす。
cop_seq 名前が有効な番号。 コンパむル䞭に、これらのフィヌルドは
さたざたな段階を瀺す特別な倀 PERL_PADSEQ_INTRO を保持したす。

COP_SEQ_RANGE_LOW _HIGH
----- -----
PERL_PADSEQ_INTRO 0 倉数はただ導入されおいたせん:
{ 私の ($x
valid-seq# スコヌプ内の PERL_PADSEQ_INTRO 倉数:
{ 私の ($x)
valid-seq# valid-seq# スコヌプのコンパむルが完了したした:
{ 私の ($x) }

型付き語圙の堎合、PadnameTYPE は型スタッシュを指したす。 「私たちの」語圙に぀いおは、
PadnameOURSTASH は、関連付けられたグロヌバルのスタッシュを指したす (重耇する
同じパッケヌゞ内の「our」宣蚀は怜出できたす)。 PadnameGEN は時々
コンパむル䞭に䞖代番号を保存するために䜿甚されたす。

PadnameOUTER がパッド名に蚭定されおいる堎合、フレヌム AV のスロットは
「倖郚」からの語圙ぞの REFCNT 参照。 このような゚ントリは時々ありたす
「停物」ず呌ばれたす。 この堎合、名前には「low」ず「high」は䜿甚されたせん。
cop_seq 範囲は党䜓のスコヌプ内にあるため、保存したす。 代わりに「高い」店
実際の語圙に関する情報を含むいく぀かのフラグ (アノンで宣蚀されおいるかどうか、および
耇数回むンスタンス化できるか?)、停の ANON の堎合は「䜎」
字句の倀が栌玍される芪のパッド内のむンデックスが含たれたす。
クロヌン䜜成を迅速化したす。

「名前」が「&」の堎合、PAD 内の察応する゚ントリは、
閉鎖の可胜性。

フォヌマットは anon subs ずしお扱われ、曞き蟌みが行われるたびに耇補されるこずに泚意しおください。
必芁に応じお呌び出されたす。

フラグ SVs_PADSTALE は、字句䞊の毎回クリアされたす。 僕の 実行され、そしお
スコヌプの終了時に蚭定されたす。 これにより、「倉数 $x は利甚できたせん」ずいう譊告が衚瀺されるようになりたす。
eval で生成されるもの、たずえば

{ 私の $x = 1; sub f { eval '$x'} } f();

状態倉数の堎合、SVs_PADSTALE は「ただ初期化されおいない」こずを意味するようにオヌバヌロヌドされたすが、これは
内郚状態は別のパッド ゚ントリに保存されたす。

PADLIST * CvPADLIST(CV *cv)

パドアレむ
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッド ゚ントリの C 配列。

SV ** PadARRAY(PADパッド)

パッドリストARRAY
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッドを含むパッドリストの C 配列。 添え字に数字のみを付けたす >=
1。0 番目の゚ントリは匕き続き䜿甚できるこずが保蚌されおいないためです。

PAD ** PadlistARRAY(PADLIST パッドリスト)

パッドリストMAX
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッドリスト内で最埌に割り圓おられたスペヌスのむンデックス。 最埌のパッドは、
前のスロットにあるこず。 その堎合、これに続く゚ントリはすべお NULL になりたす。

SSize_t PadlistMAX(PADLIST パッドリスト)

パッドリストNAMES
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッド゚ントリに関連付けられた名前。

PADNAMELIST * PadlistNAMES(PADLIST パッドリスト)

パッドリストNAMESARRAY
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッド名の C 配列。

PADNAME ** PadlistNAMESARRAY(PADLIST パッドリスト)

パッドリストNAMESMAX
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

最埌のパッド名のむンデックス。

SSize_t PadlistNAMESMAX(PADLIST パッドリスト)

パッドリストREFCNT
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッドリストの参照カりント。 珟圚、これは垞に 1 です。

U32 パッドリストREFCNT(PADLIST パッドリスト)

PadMAX 泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

最埌のパッド゚ントリのむンデックス。

SSize_t PadMAX(PADパッド)

パッドネヌムLEN
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

名前の長さ。

STRLEN パッド名 LEN(PADNAME pn)

padnamelistARRAY
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッド名の C 配列。

PADNAME ** PadnamelistARRAY(PADNAMELIST pnl)

パッドネヌムリストMAX
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

最埌のパッド名のむンデックス。

SSize_t PadnamelistMAX(PADNAMELIST pnl)

パッドネヌムリストREFCNT
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッド名リストの参照数。

SSize_t パッド名リストREFCNT(PADNAMELIST pnl)

パッドネヌムリストREFCNT_dec
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッド名リストの参照カりントを枛らしたす。

void PadnamelistREFCNT_dec(PADNAMELIST pnl)

パッドネヌムPV
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッド名構造䜓に保存されおいる名前。 これにより、タヌゲット スロットに察しお NULL が返されたす。

char * PadnamePV(PADNAME pn)

パッドネヌムREFCNT
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッド名の参照カりント。

SSize_t パッド名REFCNT(PADNAME pn)

パッド名REFCNT_dec
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッド名の参照カりントを枛らしたす。

void PadnameREFCNT_dec(PADNAME pn)

パッドネヌムSV
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッド名をモヌタル SV ずしお返したす。

SV * パッド名SV(PADNAME pn)

パッド名UTF8
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

PadnamePV が UTF8 であるかどうか。 珟時点では、これは垞に圓おはたりたす。

bool パッド名UTF8(PADNAME pn)

パッド远加名_pvs
「pad_add_name_pvn」ずたったく同じですが、文字列の代わりにリテラル文字列を受け取りたす。
文字列/長さのペア。

PADOFFSET Pad_add_name_pvs(const char *name、U32 フラグ、
HV *typestash、HV *ourstash)

Pad_findmy_pvs
「pad_findmy_pvn」ずたったく同じですが、文字列の代わりにリテラル文字列を受け取りたす。
文字列/長さのペア。

PADOFFSET Pad_findmy_pvs(const char *name、U32 フラグ)

Pad_new 新しいパッドリストを䜜成し、珟圚コンパむル䞭のパッドリストのグロヌバル倉数を曎新したす。
新しいパッドリストを指すpadlist。 次のフラグは OR 挔算できたす。

Padnew_CLONE このパッドはクロヌンされた CV 甚です
Padnew_SAVE 叀いグロヌバルを保存スタックに保存したす
Padnew_SAVESUB もサブの開始時に远加のものを保存したす

PADLIST * Pad_new(int flags)

PL_comppad
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

コンパむル䞭、これはパッドの倀郚分を含む配列を指したす。
珟圚コンパむル䞭のコヌドの堎合。 (実行時、CV にはそのような倀が倚数含たれる可胜性がありたす
配列; コンパむル時には XNUMX ぀だけが構築されたす。) 実行時には、これは
珟圚のパッドの珟圚関連する倀を含む配列
コヌドを実行しおいたす。

PL_comppad_name
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

コンパむル䞭、これはパッドの名前郚分を含む配列を指したす。
珟圚コンパむル䞭のコヌドの堎合。

PL_カヌパッド
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

「PL_comppad」配列の本䜓を盎接指したす。 (぀たり、これは
「PAD_ARRAY(PL_comppad)」。)

通蚳者ごず Variables


PL_modglobal
「PL_modglobal」は、拡匵機胜で䜿甚される汎甚のむンタヌプリタヌ グロヌバル HV です。
むンタプリタごずに情報を保持する必芁がある。 いざずいうずきは、
拡匵機胜が盞互にデヌタを共有するためのシンボル テヌブルずしお䜿甚できたす。 それは
を所有する拡匵機胜のパッケヌゞ名を先頭に付けたキヌを䜿甚するこずをお勧めしたす。
デヌタ。

HV* PL_modglobal

PL_na 気にしない堎合に通垞「SvPV」ずずもに䜿甚される䟿利な倉数
玐の長さに぀いお。 通垞は、次のいずれかを宣蚀する方が効率的です。
ロヌカル倉数を䜿甚し、代わりにそれを䜿甚するか、「SvPV_nolen」マクロを䜿甚したす。

STRLEN PL_na

PL_opfreehook
「NULL」以倖の堎合、この倉数が指す関数は、関数が呌び出されるたびに呌び出されたす。
OP は、察応する OP を匕数ずしお䜿甚しお解攟されたす。 これにより、拡匵機胜で次のこずが可胜になりたす。
OP にロヌカルにアタッチされおいる䜙分な属性を解攟したす。 それも保蚌されおいたす
最初に芪OPに察しお発火し、次にその子に察しお発火したす。

この倉数を眮き換えるずきは、
おそらく以前にむンストヌルされたフックを自分の内郚で呌び出した可胜性がありたす。

Perl_ophook_t PL_opfreehook

PLピヌプ
サブルヌチンごずのピヌプホヌル オプティマむザヌぞのポむンタヌ。 これは取埗する関数です
Perl サブルヌチン (たたは同等の独立した) のコンパむルの最埌に呌び出されたす。
Perl コヌドの䞀郚を䜿甚しお、いく぀かの操䜜の修正を実行し、小芏暡な実行を実行したす。
最適化。 この関数は、コンパむルされるサブルヌチンごずに XNUMX 回呌び出されたす。
そしお、唯䞀のパラメヌタずしお、゚ントリ ポむントである op ぞのポむンタが枡されたす。
サブルヌチン。 op ツリヌをその堎で倉曎したす。

のぞき穎オプティマむザヌを完党に亀換しないでください。 むしろ、コヌドを远加しおください
既存のオプティマむザをラップするこずで実珟したす。 これを行う基本的な方法は次のずおりです。
perlguts の「コンパむル パス 3: のぞき穎の最適化」。 新しいコヌドが垌望する堎合は、
䞊郚だけでなく、サブルヌチンの構造党䜓で ops を操䜜したす。
レベルでは、「PL_rpeepp」フックをラップする方が䟿利である可胜性がありたす。

ピヌプ_t PL_ピヌプ

PL_rpeep
再垰的なのぞき穎オプティマむザヌぞのポむンタヌ。 これは呌び出される関数です
Perl サブルヌチン (たたは同等の独立した郚分) のコンパむルの終了時
Perl コヌドの) いく぀かの操䜜の修正を実行し、小芏暡な実行を実行したす。
最適化。 この関数は、リンクされた操䜜のチェヌンごずに XNUMX 回呌び出されたす。
「op_next」フィヌルド。 各サむドチェヌンを凊理するために再垰的に呌び出されたす。 それは
唯䞀のパラメヌタずしお、チェヌンの先頭にある操䜜ぞのポむンタを枡したす。
op ツリヌをその堎で倉曎したす。

のぞき穎オプティマむザヌを完党に亀換しないでください。 むしろ、コヌドを远加しおください
既存のオプティマむザをラップするこずで実珟したす。 これを行う基本的な方法は次のずおりです。
perlguts の「コンパむル パス 3: のぞき穎の最適化」。 新しいコヌドが垌望する堎合は、
サブルヌチン党䜓ではなく、サブルヌチンのトップレベルの操䜜のみを操䜜したす。
構造䞊、「PL_peepp」フックをラップするほうが䟿利ず思われたす。

peep_t PL_rpeepp

PL_sv_no
これは「停の」SV です。 「PL_sv_yes」を参照しおください。 これを垞に &PL_sv_no ずしお参照しおください。

SV PL_sv_no

PL_sv_undef
これは「undef」SVです。 これを垞に &PL_sv_undef ずしお参照しおください。

SV PL_sv_undef

PL_sv_はい
これが「真の」SVです。 「PL_sv_no」を参照しおください。 これを垞に &PL_sv_yes ずしお参照しおください。

SV PL_sv_はい

REGEXP 機胜


SvRX SV から REGEXP を取埗するための䟿利なマクロ。 これはほが同等です
次のスニペットに:

if (SvMAGICAL(sv))
mg_get(sv);
if (SvROK(sv))
sv = MUTABLE_SV(SvRV(sv));
if (SvTYPE(sv) == SVt_REGEXP)
(REGEXP*) sv を返したす。

REGEXP* が芋぀からない堎合は、NULL が返されたす。

REGEXP * SvRX(SV *sv)

SvRXOK SV (たたはそれが参照する SV) が SV かどうかを瀺すブヌル倀を返したす。
正芏衚珟。

埌で REGEXP* を䜿甚しお䜕かをしたい堎合は、代わりに SvRX を䜿甚しお、
ヌル。

bool SvRXOK(SV* sv)

スタック 操䜜 マクロ


dMARK XSUB のスタック マヌカヌ倉数「mark」を宣蚀したす。 「マヌク」ず
「ドリマヌク」。

dマヌク;

ドリマヌク
XSUB の元のスタック マヌクを保存したす。 「オリマヌク」を参照しおください。

ドリグマヌク;

dSP 「SP」経由で利甚可胜な、XSUB の Perl のスタック ポむンタのロヌカル コピヌを宣蚀したす。
倧きい。 「SP」を参照しおください。

dSP;

EXTEND XSUB の戻り倀の匕数スタックを拡匵するために䜿甚されたす。 䞀床䜿甚するず、
少なくずも「nitems」をスタックにプッシュする䜙地があるこずを保蚌したす。

void EXTEND(SP, SSize_t niitems)

MARK XSUB のスタック マヌカヌ倉数。 「dマヌク」を参照しおください。

mPUSHi 敎数をスタックにプッシュしたす。 スタックにはこの芁玠甚のスペヌスが必芁です。 する
「TARG」は䜿甚しないでください。 「PUSHi」、「mXPUSHi」、および「XPUSHi」も参照しおください。

void mPUSHi(IV iv)

mPUSHn double をスタックにプッシュしたす。 スタックにはこの芁玠甚のスペヌスが必芁です。 する
「TARG」は䜿甚しないでください。 「PUSHn」、「mXPUSHn」、および「XPUSHn」も参照しおください。

void mPUSHn(NV nv)

mPUSHp 文字列をスタックにプッシュしたす。 スタックにはこの芁玠甚のスペヌスが必芁です。 の
「len」は文字列の長さを瀺したす。 「TARG」は䜿甚したせん。 「PUSHp」も参照しおください。
「mXPUSHp」ず「XPUSHp」。

void mPUSHp(char* str, STRLEN len)

mPUSH SV をスタックにプッシュし、SV を消滅させたす。 スタックには次のスペヌスが必芁です
この芁玠。 「TARG」は䜿甚したせん。 「PUSH」および「mXPUSH」も参照しおください。

void mPUSHs(SV* sv)

mPUSHu 笊号なし敎数をスタックにプッシュしたす。 スタックにはこれのためのスペヌスが必芁です
芁玠。 「TARG」は䜿甚したせん。 「PUSHu」、「mXPUSHu」、および「XPUSHu」も参照しおください。

void mPUSHu(UV uv)

mXPUSHi 敎数をスタックにプッシュし、必芁に応じおスタックを拡匵したす。 䜿甚したせん
「タヌグ」。 「XPUSHi」、「mPUSHi」、および「PUSHi」も参照しおください。

void mXPUSHi(IV iv)

mXPUSHn double をスタックにプッシュし、必芁に応じおスタックを拡匵したす。 䜿甚したせん
「タヌグ」。 「XPUSHn」、「mPUSHn」、および「PUSHn」も参照しおください。

void mXPUSHn(NV nv)

mXPUSHp 文字列をスタックにプッシュし、必芁に応じおスタックを拡匵したす。 「レン」
文字列の長さを瀺したす。 「TARG」は䜿甚したせん。 「XPUSHp」も参照しおください。
「mPUSHp」ず「PUSHp」。

void mXPUSHp(char* str, STRLEN len)

mXPUSHs SV をスタックにプッシュし、必芁に応じおスタックを拡匵し、SV を消滅させたす。
「TARG」は䜿甚したせん。 「XPUSH」ず「mPUSH」も参照しおください。

void mXPUSHs(SV* sv)

mXPUSHu 笊号なし敎数をスタックにプッシュし、必芁に応じおスタックを拡匵したす。 する
「TARG」は䜿甚しないでください。 「XPUSHu」、「mPUSHu」、および「PUSHu」も参照しおください。

void mXPUSHu(UV uv)

オリグマヌク
XSUB の元のスタック マヌク。 「ドリマヌク」を参照。

POPi スタックから敎数をポップしたす。

IV POPi

POPl ロングをスタックからポップしたす。

長いPOPXNUMX

POPn スタックからダブルをポップしたす。

NV POPn

POPp スタックから文字列をポップしたす。

char* POPp

ポップバむトテックス
バむト、぀たり 256 未満の文字で構成される文字列をスタックからポップしたす。

char* POPpbytex

POPpx スタックから文字列をポップしたす。 POPpず同じ。 二぀の名前がありたすが、
歎史的な理由。

char* POPpx

POP スタックから SV をポップしたす。

SV* POP

PUSHi 敎数をスタックにプッシュしたす。 スタックにはこの芁玠甚のスペヌスが必芁です。
「セット」マゞックを扱いたす。 「TARG」を䜿甚するため、「dTARGET」たたは「dXSTARG」を呌び出す必芁がありたす。
それを宣蚀したす。 リストを返すために耇数の「TARG」指向のマクロを呌び出さないでください。
XSUB - 代わりに「mPUSHi」を参照しおください。 「XPUSHi」および「mXPUSHi」も参照しおください。

void PUSHi(IV iv)

プッシュマヌク
コヌルバックの匕数の巊括匧。 「PUTBACK」ず perlcall を参照しおください。

void PUSHMARK(SP)

PUSHモヌタル
新しいモヌタル SV をスタックにプッシュしたす。 スタックにはこの芁玠甚のスペヌスが必芁です。
「TARG」は䜿甚したせん。 「PUSH」、「XPUSHmortal」、および「XPUSH」も参照しおください。

void PUSHmortal()

PUSHn ダブルをスタックにプッシュしたす。 スタックにはこの芁玠甚のスペヌスが必芁です。 ハンドル
「セット」マゞック。 「TARG」を䜿甚するため、「dTARGET」たたは「dXSTARG」を呌び出しお宣蚀する必芁がありたす
それ。 XSUB からリストを返すために耇数の「TARG」指向のマクロを呌び出さないでください - を参照しおください。
代わりに「mPUSHn」を䜿甚したす。 「XPUSHn」および「mXPUSHn」も参照しおください。

void PUSHn(NV nv)

PUSHp 文字列をスタックにプッシュしたす。 スタックにはこの芁玠甚のスペヌスが必芁です。 の
「len」は文字列の長さを瀺したす。 「セット」マゞックを扱いたす。 「TARG」を䜿甚しおいるため、
「dTARGET」たたは「dXSTARG」を呌び出しお宣蚀する必芁がありたす。 耇数電話しないでください
XSUB からリストを返す「TARG」指向のマクロ - 代わりに「mPUSHp」を参照しおください。 芋る
「XPUSHp」ず「mXPUSHp」も。

void PUSHp(char* str, STRLEN len)

PUSH SV をスタックにプッシュしたす。 スタックにはこの芁玠甚のスペヌスが必芁です。 ではない
「セット」マゞックを凊理したす。 「TARG」は䜿甚したせん。 「PUSHmortal」、「XPUSH」、および「XPUSH」も参照しおください。
「XPUSHモヌタル」。

void PUSH(SV* sv)

PUSHu 笊号なし敎数をスタックにプッシュしたす。 スタックにはこれのためのスペヌスが必芁です
芁玠。 「セット」マゞックを扱いたす。 「TARG」を䜿甚するため、「dTARGET」たたは「dXSTARG」を䜿甚する必芁がありたす。
それを宣蚀するために呌ばれたした。 リストを返すために耇数の「TARG」指向のマクロを呌び出さないでください。
XSUB から - 代わりに「mPUSHu」を参照しおください。 「XPUSHu」および「mXPUSHu」も参照しおください。

void PUSHu(UV uv)

PUTBACK XSUB 匕数の閉じ括匧。 これは通垞「xsubpp」によっお凊理されたす。 芋る
「PUSHMARK」および他の甚途の perlcall。

戻す;

SP スタック ポむンタ。 これは通垞「xsubpp」によっお凊理されたす。 「dSP」および「SPAGAIN」を参照しおください。

SPAGAIN スタック ポむンタを再フェッチしたす。 コヌルバックの埌に䜿甚されたす。 「perlcall」を参照しおください。

スパガむン;

XPUSHi 敎数をスタックにプッシュし、必芁に応じおスタックを拡匵したす。 ハンドル「セット」
魔法。 「TARG」を䜿甚するため、「dTARGET」たたは「dXSTARG」を呌び出しお宣蚀する必芁がありたす。 する
XSUB からリストを返すために耇数の「TARG」指向のマクロを呌び出さない - を参照しおください。
代わりに「mXPUSHi」を䜿甚したす。 「PUSHi」および「mPUSHi」も参照しおください。

void XPUSHi(IV iv)

XPUSHモヌタル
新しい定呜の SV をスタックにプッシュし、必芁に応じおスタックを拡匵したす。 ではない
「TARG」を䜿甚したす。 「XPUSH」、「PUSHmortal」、および「PUSH」も参照しおください。

void XPUSHmortal()

XPUSHn double をスタックにプッシュし、必芁に応じおスタックを拡匵したす。 ハンドル「セット」
魔法。 「TARG」を䜿甚するため、「dTARGET」たたは「dXSTARG」を呌び出しお宣蚀する必芁がありたす。 する
XSUB からリストを返すために耇数の「TARG」指向のマクロを呌び出さない - を参照しおください。
代わりに「mXPUSHn」を䜿甚したす。 「PUSHn」および「mPUSHn」も参照しおください。

void XPUSHn(NV nv)

XPUSHp 文字列をスタックにプッシュし、必芁に応じおスタックを拡匵したす。 「レン」
文字列の長さを瀺したす。 「セット」マゞックを扱いたす。 「TARG」を䜿甚しおいるため、
「dTARGET」たたは「dXSTARG」を呌び出しお宣蚀する必芁がありたす。 耇数電話しないでください
XSUB からリストを返す「TARG」指向のマクロ - 代わりに「mXPUSHp」を参照しおください。 芋る
「PUSHp」ず「mPUSHp」も。

void XPUSHp(char* str, STRLEN len)

XPUSH SV をスタックにプッシュし、必芁に応じおスタックを拡匵したす。 取り扱いたせん
「セット」マゞック。 「TARG」は䜿甚したせん。 「XPUSHmortal」、「PUSH」、および「XPUSHmortal」も参照しおください。
「PUSHモヌタル」。

void XPUSHs(SV* sv)

XPUSHu 笊号なし敎数をスタックにプッシュし、必芁に応じおスタックを拡匵したす。
「セット」マゞックを扱いたす。 「TARG」を䜿甚するため、「dTARGET」たたは「dXSTARG」を呌び出す必芁がありたす。
それを宣蚀したす。 リストを返すために耇数の「TARG」指向のマクロを呌び出さないでください。
XSUB - 代わりに「mXPUSHu」を参照しおください。 「PUSHu」および「mPUSHu」も参照しおください。

void XPUSHu(UV uv)

XSRETURN
XSUB から返され、スタック䞊の項目の数を瀺したす。 これは通垞、
「xsubpp」によっお凊理されたす。

void XSRETURN(int niitems)

XSRETURN_EMPTY
XSUB から空のリストをすぐに返したす。

XSRETURN_EMPTY;

XSRETURN_IV
XSUB からすぐに敎数を返したす。 「XST_mIV」を䜿甚したす。

void XSRETURN_IV(IV iv)

XSRETURN_NO
XSUB からすぐに &PL_sv_no を返したす。 「XST_mNO」を䜿甚したす。

XSRETURN_NO;

XSRETURN_NV
XSUB から double をすぐに返したす。 「XST_mNV」を䜿甚したす。

void XSRETURN_NV(NV nv)

XSRETURN_PV
XSUB から文字列のコピヌをすぐに返したす。 「XST_mPV」を䜿甚したす。

void XSRETURN_PV(char* str)

XSRETURN_UNDEF
XSUB からすぐに &PL_sv_undef を返したす。 「XST_mUNDEF」を䜿甚したす。

XSRETURN_UNDEF;

XSRETURN_UV
XSUB からすぐに敎数を返したす。 「XST_mUV」を䜿甚したす。

void XSRETURN_UV(IV uv)

XSRETURN_YES
XSUB からただちに &PL_sv_yes を返したす。 「XST_mYES」を䜿甚したす。

XSRETURN_YES;

XST_mIV スタック䞊の指定された䜍眮「pos」に敎数を配眮したす。 倀は
新しい臎呜的な SV に保存されたす。

void XST_mIV(int pos, IV iv)

XST_mNO &PL_sv_no をスタック䞊の指定された䜍眮「pos」に配眮したす。

void XST_mNO(int pos)

XST_mNV スタック䞊の指定された䜍眮「pos」に double を配眮したす。 倀は
新しい臎呜的な SV に保存されたす。

void XST_mNV(int pos, NV nv)

XST_mPV 文字列のコピヌをスタック䞊の指定された䜍眮「pos」に配眮したす。 の
倀は新しい最終 SV に保存されたす。

void XST_mPV(int pos, char* str)

XST_mUNDEF
&PL_sv_undef をスタック䞊の指定された䜍眮「pos」に配眮したす。

void XST_mUNDEF(int pos)

XST_mはい
&PL_sv_yes をスタック䞊の指定された䜍眮「pos」に配眮したす。

void XST_mYES(int pos)

SV フラグ


svtype Perl タむプのフラグの列挙。 これらはファむル内にありたす SV.H 「svtype」で
列挙型。 これらのフラグを「SvTYPE」マクロでテストしたす。

タむプは次のずおりです。

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

これらは䞋から順に説明するのが最も簡単です。

SVt_PVIO は I/O オブゞェクト甚、SVt_PVFM はフォヌマット甚、SVt_PVCV はサブルヌチン甚、
ハッシュの堎合は SVt_PVHV、配列の堎合は SVt_PVAV。

他のものはすべおスカラヌ型、぀たり「$」にバむンドできるものです。
倉数。 これらの堎合、内郚型はほずんどの堎合、内郚の型ず盎亀したす。
パヌル蚀語。

したがっお、「SvTYPE(sv) < SVt_PVAV」をチェックするこずが、䜕かあるかどうかを確認する最良の方法です。
はスカラヌです。

SVt_PVGV はタむプグロブを衚したす。 !SvFAKE(sv) の堎合、それは本物で匷制力のないものです。
タむプグロブ。 SvFAKE(sv) の堎合、typeglob が適甚されたスカラヌです。
割り圓おられたした。 再床代入するず、typeglob ではなくなりたす。 SVt_PVLV
舞台裏で別のスカラヌに委任するスカラヌを衚したす。 それは
たずえば、「substr」の戻り倀、結合されたハッシュおよび配列芁玠に䜿甚されたす。
typeglob を含む任意のスカラヌ倀を保持できたす。 SVt_REGEXP は通垞甚です
衚珟。 SVt_INVLIST は Perl コアの内郚䜿甚のみを目的ずしおいたす。

SVt_PVMG は「通垞の」スカラヌ (typeglob、正芏衚珟、たたは
代衚。 ほずんどのスカラヌは PVMG のすべおの内郚フィヌルドを必芁ずしないため、
可胜な堎合はより小さな構造䜓を割り圓おおメモリを節玄したす。 他のタむプはすべお、
内郚フィヌルドが少なく、単玔な圢匏の SVt_PVMG です。
SVt_NULL は undef のみを保持できたす。 SVt_IV は、undef、敎数、たたは参照を保持できたす。
(SVt_RV は、䞋䜍互換性のために存圚する SVt_IV の゚むリアスです。) SVt_NV
これらのいずれか、たたは double を保持できたす。 SVt_PV は undef たたは文字列のみを保持できたす。
SVt_PVIV は、SVt_PV ず SVt_IV のスヌパヌセットです。 SVt_PVNV も同様です。 SVt_PVMG は、
SVt_PVNV が保持できるものはすべお保持したすが、祝犏されるこずはできたすが、そうする必芁はありたせん。
魔法の。

SVt_INVLIST
スカラヌの型フラグ。 「svtype」を参照しおください。

SVt_IV スカラヌのタむプ フラグ。 「svtype」を参照しおください。

SVt_NULL
スカラヌの型フラグ。 「svtype」を参照しおください。

SVt_NV スカラヌのタむプ フラグ。 「svtype」を参照しおください。

SVt_PV スカラヌのタむプ フラグ。 「svtype」を参照しおください。

SVt_PVAV
配列の型フラグ。 「svtype」を参照しおください。

SVt_PVCV
サブルヌチンのタむプフラグ。 「svtype」を参照しおください。

SVt_PVFM
フォヌマットのタむプフラグ。 「svtype」を参照しおください。

SVt_PVGV
タむプグロブのタむプフラグ。 「svtype」を参照しおください。

SVt_PVHV
ハッシュのタむプフラグ。 「svtype」を参照しおください。

SVt_PVIO
I/O オブゞェクトのタむプ フラグ。 「svtype」を参照しおください。

SVt_PVIV
スカラヌの型フラグ。 「svtype」を参照しおください。

SVt_PVLV
スカラヌの型フラグ。 「svtype」を参照しおください。

SVt_PVMG
スカラヌの型フラグ。 「svtype」を参照しおください。

SVt_PVNV
スカラヌの型フラグ。 「svtype」を参照しおください。

SVt_REGEXP
正芏衚珟のタむプフラグ。 「svtype」を参照しおください。

SV 操䜜 機胜


boolSV 「b」が true 倀の堎合は true SV を返し、「b」が 0 の堎合は false SV を返したす。

「PL_sv_yes」および「PL_sv_no」も参照しおください。

SV * boolSV(bool b)

croak_xs_usage
xsub の䜿甚法メッセヌゞを出力するための「croak()」の特殊なバリアント

croak_xs_usage(cv、「eee_yow」);

「cv」からパッケヌゞ名ずサブルヌチン名を蚈算し、呌び出したす。
「鳎く」。 したがっお、「cv」が &ouch::awk の堎合、「croak」は次のように呌び出されたす。

Perl_croak(aTHX_ "䜿甚法: %"SVf"::%"SVf"(%s)", "痛い" "awk",
"ええええ");

void croak_xs_usage(const CV *const cv,
const char *const params)

get_sv 指定された Perl スカラヌの SV を返したす。 「フラグ」は「gv_fetchpv」に枡されたす。
「GV_ADD」が蚭定されおおり、Perl 倉数が存圚しない堎合は䜜成されたす。
「flags」がれロで倉数が存圚しない堎合は、NULL が返されたす。

泚: この関数の perl_ 圢匏は非掚奚です。

SV* get_sv(const char *name, I32 フラグ)

newRV_inc
SV の RV ラッパヌを䜜成したす。 元の SV の参照カりントは次のずおりです。
増加したした。

SV* newRV_inc(SV* sv)

新しいSVパッド名
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

パッド名を含む新しい SV を䜜成したす。

SV* newSVpadname(PADNAME *pn)

newSVpvn_utf8
新しい SV を䜜成し、文字列 (「NUL」 (「\0」) 文字が含たれる堎合がありたす) をコピヌしたす。
そこに。 utf8 が true の堎合、新しい SV で「SvUTF8_on」を呌び出したす。 ずしお実装されたした
「newSVpvn_flags」のラッパヌ。

SV* newSVpvn_utf8(NULLOK const char* s, STRLEN len,
U32utf8)

SvCUR SV 内の文字列の長さを返したす。 「SvLEN」を参照しおください。

ストレン SvCUR(SV* sv)

SvCUR_set
SV にある文字列の珟圚の長さを蚭定したす。 「SvCUR」および
「SvIV_set」。

void SvCUR_set(SV* sv, STRLEN len)

SvEND 文字列の最埌の文字の盎埌の䜍眮ぞのポむンタを返したす。
SV では、通垞、末尟に「NUL」文字がありたす (Perl であっおも)
スカラヌでは厳密には必芁ありたせん)。 「SvCUR」を参照しおください。 ずしお文字にアクセスしたす
*(SvEND(sv))。

è­Šå‘Š: 「SvCUR」が「SvLEN」ず等しい堎合、「SvEND」は未割り圓おを指したす。
メモリ。

char* SvEND(SV* sv)

SvGAMAGIC
SV が get マゞックたたはオヌバヌロヌドを持っおいる堎合は true を返したす。 どちらかが true の堎合、
スカラヌはアクティブなデヌタであり、デヌタが返されるたびに新しい倀を返す可胜性がありたす。
にアクセスされたす。 したがっお、論理ナヌザヌごずに䞀床だけ読み取るように泚意する必芁がありたす。
操䜜を実行し、その戻り倀を凊理したす。 どちらも圓おはたらない堎合、スカラヌの
倀は曞き蟌たれない限り倉曎できたせん。

U32 SvGAMAGIC(SV* sv)

SvGROW SV 内の文字バッファヌを拡匵しお、指定された文字を栌玍できるスペヌスを確保したす。
バむト数 (远加の末尟「NUL」文字甚にスペヌスを確保するこずを忘れないでください)。
必芁に応じお「sv_grow」を呌び出しお展開を実行したす。 ぞのポむンタを返したす。
文字バッファ。 SV のタむプは SVt_PV 以䞊である必芁がありたす。 代替手段の XNUMX ぀は、電話するこずです
SV のタむプがわからない堎合は、「sv_grow」。

char * SvGROW(SV* sv, STRLEN len)

SvIOK SV に敎数が含たれおいるかどうかを瀺す U32 倀を返したす。

U32 SvIOK(SV* sv)

SvIOKp SV に敎数が含たれおいるかどうかを瀺す U32 倀を返したす。 チェックしたす
プラむベヌト 蚭定。 代わりに「SvIOK」を䜿甚しおください。

U32 SvIOKp(SV* sv)

SvIOK_notUV
SV に笊号付き敎数が含たれるかどうかを瀺すブヌル倀を返したす。

bool SvIOK_notUV(SV* sv)

SvIOK_off
SV の IV ステヌタスの蚭定を解陀したす。

void SvIOK_off(SV* sv)

SvIOK_on
SV にそれが敎数であるこずを䌝えたす。

void SvIOK_on(SV* sv)

SvIOK_only
SV にそれが敎数であるこずを䌝え、他のすべおの OK ビットを無効にしたす。

void SvIOK_only(SV* sv)

SvIOK_only_UV
SV にそれが笊号なし敎数であるこずを䌝え、他のすべおの OK ビットを無効にしたす。

void SvIOK_only_UV(SV* sv)

SvIOK_UV
SV に必須の敎数が含たれおいるかどうかを瀺すブヌル倀を返したす。
眲名されおいないものずしお解釈されたす。 倀が範囲内にある非負の敎数
IV ず UV の䞡方のフラグは、SvUOK たたは SVIOK ずしお蚭定できたす。

bool SvIOK_UV(SV* sv)

SvIsCOW SV がコピヌオンラむト (共有ハッシュのいずれか) であるかどうかを瀺す U32 倀を返したす。
キヌ スカラヌ、たたは 5.9.0 が COW 甚に構成されおいる堎合は完党な Copy On Write スカラヌ)。

U32 SvIsCOW(SV* sv)

SvIsCOW_shared_hash
SV がコピヌオンラむト共有ハッシュ キヌであるかどうかを瀺すブヌル倀を返したす。
スカラヌ。

bool SvIsCOW_shared_hash(SV* sv)

SvIV 指定された SV を敎数に匷制倉換しお返したす。 バヌゞョンに぀いおは「SvIVx」を参照しおください。
これにより、sv が XNUMX 回だけ評䟡されるこずが保蚌されたす。

IV SvIV(SV* sv)

SvIVX チェックや倉換を行わずに、SV の IV スロットの生の倀を返したす。 のみ
SvIOK が true であるこずが確実な堎合に䜿甚しおください。 「SvIV()」も参照しおください。

IV SvIVX(SV* sv)

SvIVx 指定された SV を敎数に匷制倉換しお返したす。 「sv」を評䟡するこずを保蚌したす
XNUMX回だけ。 「sv」が副䜜甚のある匏である堎合にのみこれを䜿甚し、それ以倖の堎合は䜿甚したす。
より効率的な「SvIV」を䜿甚しおください。

IV SvIVx(SV* sv)

SvIV_nomg
「SvIV」ず䌌おいたすが、魔法を凊理したせん。

IV SvIV_nomg(SV* sv)

SvIV_set
sv の IV ポむンタの倀を val に蚭定したす。 同じように実行するこずも可胜です
「SvIVX」ぞの巊蟺倀割り圓おを䜿甚したこのマクロの関数。 将来の Perls では、
ただし、巊蟺倀の代わりに「SvIV_set」を䜿甚する方が効率的です。
「SvIVX」に割り圓おたす。

void SvIV_set(SV* sv, IV val)

SvLEN SV 内の文字列バッファのサむズを返したす䞀郚は含たれたせん。
「SvOOK」に起因したす。 「SvCUR」を参照しおください。

ストレン スvLEN(SV* sv)

SvLEN_set
SV に含たれる文字列の実際の長さを蚭定したす。 「SvIV_set」を参照しおください。

void SvLEN_set(SV* sv, STRLEN len)

SvMAGIC_set
sv の MAGIC ポむンタの倀を val に蚭定したす。 「SvIV_set」を参照しおください。

void SvMAGIC_set(SV* sv, MAGIC* val)

SvNIOK SV に数倀、敎数、たたはいずれが含たれるかを瀺す U32 倀を返したす。
ダブル。

U32 SvNIOK(SV* sv)

SvNIOKp SV に数倀、敎数、たたはいずれが含たれるかを瀺す U32 倀を返したす。
ダブル。 チェックしたす プラむベヌト 蚭定。 代わりに「SvNIOK」を䜿甚しおください。

U32 SvNIOKp(SV* sv)

SvNIOK_off
SV の NV/IV ステヌタスを蚭定解陀したす。

void SvNIOK_off(SV* sv)

SvNOK SV に double が含たれおいるかどうかを瀺す U32 倀を返したす。

U32 SvNOK(SV* sv)

SvNOKp SV に double が含たれおいるかどうかを瀺す U32 倀を返したす。 チェックしたす
プラむベヌト 蚭定。 代わりに「SvNOK」を䜿甚しおください。

U32 SvNOKp(SV* sv)

SvNOK_off
SV の NV ステヌタスの蚭定を解陀したす。

void SvNOK_off(SV* sv)

SvNOK_on
SV にそれが double であるこずを䌝えたす。

void SvNOK_on(SV* sv)

SvNOK_only
SV にそれが double であるこずを䌝え、他のすべおの OK ビットを無効にしたす。

void SvNOK_only(SV* sv)

SvNV 指定された SV を double に匷制倉換しお返したす。 バヌゞョンに぀いおは「SvNVx」を参照しおください。
sv を XNUMX 回だけ評䟡するこずを保蚌したす。

NV SvNV(SV* sv)

SvNVX チェックや倉換を行わずに、SV の NV スロットの生の倀を返したす。 のみ
SvNOK が true であるこずが確実な堎合に䜿甚したす。 「SvNV()」も参照しおください。

NV SvNVX(SV* sv)

SvNVx 指定された SV を double に匷制倉換しお返したす。 「sv」のみを評䟡するこずを保蚌したす
䞀床。 「sv」が副䜜甚のある匏である堎合にのみこれを䜿甚し、それ以倖の堎合は
より効率的な「SvNV」。

NV SvNVx(SV* sv)

SvNV_nomg
「SvNV」ず䌌おいたすが、魔法を凊理したせん。

NV SvNV_nomg(SV* sv)

SvNV_set
sv の NV ポむンタの倀を val に蚭定したす。 「SvIV_set」を参照しおください。

void SvNV_set(SV* sv, NV val)

SvOK 倀が定矩されおいるかどうかを瀺す U32 倀を返したす。 これだけです
スカラヌにずっお意味がありたす。

U32 SvOK(SV* sv)

SvOOK 文字列バッファぞのポむンタがオフセットされおいるかどうかを瀺す U32 を返したす。 これ
ハックは、文字の先頭からの削陀を高速化するために内郚的に䜿甚されたす。
SVPV。 SvOOK が true の堎合、割り圓おられた文字列バッファの先頭は次のずおりです。
実際には SvPVX よりも「SvOOK_offset()」バむト前です。 このオフセットは以前は次の堎所に保存されおいたした。
SvIVX ですが、珟圚はバッファの予備郚分に栌玍されおいたす。

U32 SvOOK(SV* sv)

SvOOK_offset
読み蟌みたす LEN SvPVX から割り圓おられたファむルの真の開始䜍眮たでのオフセット
バッファ。「sv_chop」を䜿甚しお効率的に削陀した堎合はれロ以倖になりたす。
バッファの先頭からの文字。 マクロずしお実装されたす。
のアドレス LEN、タむプは「STRLEN」である必芁がありたす。 評䟡する sv 䞀回以䞊。
セット LEN 「SvOOK(sv)」が false の堎合は 0 になりたす。

void SvOOK_offset(NN SV*sv, STRLEN len)

SvPOK SV に文字列が含たれおいるかどうかを瀺す U32 倀を返したす。

U32 SvPOK(SV* sv)

SvPOKp SV に文字列が含たれおいるかどうかを瀺す U32 倀を返したす。 小切手
  プラむベヌト 蚭定。 代わりに「SvPOK」を䜿甚しおください。

U32 SvPOKp(SV* sv)

SvPOK_off
SV の PV ステヌタスの蚭定を解陀したす。

void SvPOK_off(SV* sv)

SvPOK_on
SV にそれが文字列であるこずを䌝えたす。

void SvPOK_on(SV* sv)

SvPOK_only
SV にそれが文字列であるこずを䌝え、他のすべおの OK ビットを無効にしたす。 も回りたす
UTF-8ステヌタスをオフにしたす。

void SvPOK_only(SV* sv)

SvPOK_only_UTF8
SV にそれが文字列であるこずを䌝え、他のすべおの OK ビットを無効にし、
UTF-8の状態のたた。

void SvPOK_only_UTF8(SV* sv)

SvPV SV 内の文字列ぞのポむンタ、たたは SV の文字列化された圢匏を返したす。
SV には文字列が含たれたせん。 SV は文字列化されたバヌゞョンをキャッシュする堎合がありたす。
「SvPOK」。 「ゲット」魔法を扱う。 「len」倉数は次の長さに蚭定されたす。
文字列 (これはマクロなので、&len は䜿甚しないでください)。 バヌゞョンに぀いおは「SvPVx」も参照しおください。
これにより、sv が XNUMX 回だけ評䟡されるこずが保蚌されたす。

「SvPV()」の戻り倀が以䞋ず等しいずいう保蚌はないこずに泚意しおください。
「SvPVX(sv)」、たたは「SvPVX(sv)」に有効なデヌタが含たれおいるこず、たたは連続した呌び出し
「SvPV(sv)」は毎回同じポむンタ倀を返したす。 これはやり方によるものです
オヌバヌロヌドやコピヌオンラむトなどが凊理されるこず。 このような堎合、
戻り倀は䞀時バッファなどを指す堎合がありたす。 どうしおも必芁な堎合は
SvPVX フィヌルドを有効にする (たずえば、そこに曞き蟌む堎合) を参照しおください。
「SvPV_force」。

char* SvPV(SV* sv, STRLEN len)

SvPVバむト
「SvPV」ず䌌おいたすが、必芁に応じお sv を最初にバむト衚珟に倉換したす。

char* SvPVbyte(SV* sv, STRLEN len)

SvPVbytex
「SvPV」ず䌌おいたすが、必芁に応じお sv を最初にバむト衚珟に倉換したす。
sv を XNUMX 回だけ評䟡するこずを保蚌したす。 それ以倖の堎合は、より効率的な「SvPVbyte」を䜿甚しおください。

char* SvPVbytex(SV* sv, STRLEN len)

SvPVbytex_force
「SvPV_force」ず䌌おいたすが、必芁に応じお最初に sv をバむト衚珟に倉換したす。
sv を XNUMX 回だけ評䟡するこずを保蚌したす。 より効率的な「SvPVbyte_force」を䜿甚しおください
さもないず。

char* SvPVbytex_force(SV* sv, STRLEN len)

SvPVbyte_force
「SvPV_force」ず䌌おいたすが、必芁に応じお最初に sv をバむト衚珟に倉換したす。

char* SvPVbyte_force(SV* sv, STRLEN len)

SvPVbyte_nolen
「SvPV_nolen」ず䌌おいたすが、必芁に応じお最初に sv をバむト衚珟に倉換したす。

char* SvPVbyte_nolen(SV* sv)

SvPVutf8
「SvPV」ず䌌おいたすが、必芁に応じお最初に sv を utf8 に倉換したす。

char* SvPVutf8(SV* sv, STRLEN len)

SvPVutf8x
「SvPV」ず䌌おいたすが、必芁に応じお最初に sv を utf8 に倉換したす。 評䟡の保蚌
SV は 8 回だけです。 それ以倖の堎合は、より効率的な「SvPVutfXNUMX」を䜿甚しおください。

char* SvPVutf8x(SV* sv, STRLEN len)

SvPVutf8x_force
「SvPV_force」ず䌌おいたすが、必芁に応じお最初に sv を utf8 に倉換したす。 を保蚌したす
sv を 8 回だけ評䟡したす。 それ以倖の堎合は、より効率的な「SvPVutfXNUMX_force」を䜿甚しおください。

char* SvPVutf8x_force(SV* sv, STRLEN len)

SvPVutf8_force
「SvPV_force」ず䌌おいたすが、必芁に応じお最初に sv を utf8 に倉換したす。

char* SvPVutf8_force(SV* sv, STRLEN len)

SvPVutf8_nolen
「SvPV_nolen」ず䌌おいたすが、必芁に応じお最初に sv を utf8 に倉換したす。

char* SvPVutf8_nolen(SV* sv)

SvPVX SV 内の物理文字列ぞのポむンタを返したす。 SV には文字列が含たれおいる必芁がありたす。
5.9.3 より前では、SV のタむプが >= でない限り、このマクロを実行するのは安党ではありたせん。
SVt_PV。

これは、自動ロヌドされるサブルヌチンの名前を XS AUTOLOAD に保存するためにも䜿甚されたす。
ルヌティヌン。 perlguts の「XSUB による自動ロヌド」を参照しおください。

char* SvPVX(SV* sv)

SvPVx 「sv」を XNUMX 回だけ評䟡するこずを保蚌する「SvPV」のバヌゞョン。 以䞋の堎合にのみこれを䜿甚しおください
「sv」は副䜜甚のある匏です。それ以倖の堎合は、より効率的な「SvPV」を䜿甚しおください。

char* SvPVx(SV* sv, STRLEN len)

SvPV_力
「SvPV」ず䌌おいたすが、SV に文字列 (「SvPOK」) のみを匷制的に含めたす。
文字列 (「SvPOK_only」)、フックたたは詐欺垫によっお。 やるなら力が必芁だ
「SvPVX」を盎接曎新しおください。 プロセスには魔法がかかりたす。

任意のスカラヌをプレヌン PV に匷制するず、朜圚的にストリップされる可胜性があるこずに泚意しおください。
そこから埗られる有甚なデヌタ。 たずえば、SV が「SvROK」の堎合、参照先は次のようになりたす。
参照カりントがデクリメントされ、SV 自䜓が
" などの倀を含む文字列バッファを持぀ "SvPOK" スカラヌアレむ(0x1234)」。

char* SvPV_force(SV* sv, STRLEN len)

SvPV_force_nomg
「SvPV_force」ず䌌おいたすが、get マゞックを凊理したせん。

char* SvPV_force_nomg(SV* sv, STRLEN len)

SvPV_nolen
「SvPV」ず䌌おいたすが、長さ倉数を蚭定したせん。

char* SvPV_nolen(SV* sv)

SvPV_nomg
「SvPV」ず䌌おいたすが、魔法を凊理したせん。

char* SvPV_nomg(SV* sv, STRLEN len)

SvPV_nomg_nolen
「SvPV_nolen」ず䌌おいたすが、魔法を凊理したせん。

char* SvPV_nomg_nolen(SV* sv)

SvPV_set
おそらくこれはあなたが䜿いたいものではなく、おそらく「sv_usepvn_flags」が欲しかったのでしょう。
たたは「sv_setpvn」たたは「sv_setpvs」。

"sv" 内の PV ポむンタの倀を、Perl で割り圓おられた "NUL" で終了するポむンタに蚭定したす。
文字列「val」。 「SvIV_set」も参照しおください。

以前の PV バッファを忘れずに解攟しおください。 確認すべきこずがたくさんありたす。 気を぀けおください
既存のポむンタがコピヌオンラむトたたはその他の䞍正行為に関䞎しおいる可胜性があるため、
「SvOOK_off(sv)」を実行し、「sv_force_normal」たたは「SvPV_force」を䜿甚したすたたは SvIsCOW を確認したす
flag) を䜿甚しお、たずこの倉曎が安党であるこずを確認したす。 そしお最埌に、そうでない堎合は、
COW、「SvPV_free」を呌び出しお、前の PV バッファを解攟したす。

void SvPV_set(SV* sv, char* val)

SvREFCNT
オブゞェクトの参照カりントの倀を返したす。

U32 SvREFCNT(SV* sv)

SvREFCNT_dec
指定された SV の参照カりントをデクリメントしたす。 sv NULL の堎合もありたす。

void SvREFCNT_dec(SV* sv)

SvREFCNT_dec_NN
SvREFCNT_dec ず同じですが、知っおいる堎合にのみ䜿甚できたす。 sv は NULL ではありたせん。 私たち以来
NULL かどうかをチェックする必芁がなく、より高速で小さいです。

void SvREFCNT_dec_NN(SV* sv)

SvREFCNT_inc
指定された SV の参照カりントをむンクリメントし、SV を返したす。

次の SvREFCNT_inc* マクロはすべお、SvREFCNT_inc の最適化されたバヌゞョンです。
SvREFCNT_inc に眮き換えるこずができたす。

SV* SvREFCNT_inc(SV* sv)

SvREFCNT_inc_NN
SvREFCNT_inc ず同じですが、知っおいる堎合にのみ䜿甚できたす。 sv は NULL ではありたせん。 私たち以来
NULL かどうかをチェックする必芁がなく、より高速で小さいです。

SV* SvREFCNT_inc_NN(SV* sv)

SvREFCNT_inc_simple
SvREFCNT_inc ず同じですが、副䜜甚のない匏でのみ䜿甚できたす。
䞀時的な倀を保存する必芁がないため、凊理が高速になりたす。

SV* SvREFCNT_inc_simple(SV* sv)

SvREFCNT_inc_simple_NN
SvREFCNT_inc_simple ず同じですが、知っおいる堎合にのみ䜿甚できたす。 sv は NULL ではありたせん。
NULL かどうかをチェックする必芁がないため、高速か぀サむズが小さくなりたす。

SV* SvREFCNT_inc_simple_NN(SV* sv)

SvREFCNT_inc_simple_void
SvREFCNT_inc_simple ず同じですが、リタヌンが必芁ない堎合にのみ䜿甚できたす。
䟡倀。マクロは意味のある倀を返す必芁はありたせん。

void SvREFCNT_inc_simple_void(SV* sv)

SvREFCNT_inc_simple_void_NN
SvREFCNT_inc ず同じですが、戻り倀が必芁ない堎合にのみ䜿甚できたす。
あなたはそれを知っおいたす sv は NULL ではありたせん。マクロは意味のある倀を返す必芁はありたせん
倀を倉曎するか、NULL かどうかをチェックしお、より小さく高速になりたす。

void SvREFCNT_inc_simple_void_NN(SV* sv)

SvREFCNT_inc_void
SvREFCNT_inc ず同じですが、戻り倀が必芁ない堎合にのみ䜿甚できたす。
マクロは意味のある倀を返す必芁はありたせん。

void SvREFCNT_inc_void(SV* sv)

SvREFCNT_inc_void_NN
SvREFCNT_inc ず同じですが、戻り倀が必芁ない堎合にのみ䜿甚できたす。
あなたはそれを知っおいたす sv は NULL ではありたせん。マクロは意味のある倀を返す必芁はありたせん
倀を倉曎するか、NULL かどうかをチェックしお、より小さく高速になりたす。

void SvREFCNT_inc_void_NN(SV* sv)

SvROK SV が RV であるかどうかをテストしたす。

U32 SvROK(SV* sv)

SvROK_off
SV の RV ステヌタスの蚭定を解陀したす。

void SvROK_off(SV* sv)

SvROK_on
SV に RV であるこずを䌝えたす。

void SvROK_on(SV* sv)

SvRV RV を逆参照しお SV を返したす。

SV* SvRV(SV* sv)

SvRV_set
sv の RV ポむンタの倀を val に蚭定したす。 「SvIV_set」を参照しおください。

void SvRV_set(SV* sv, SV* val)

SvSTASH SV のスタッシュを返したす。

HV* SvSTASH(SV* sv)

SvSTASH_set
sv の STASH ポむンタの倀を val に蚭定したす。 「SvIV_set」を参照しおください。

void SvSTASH_set(SV* sv, HV* val)

SvTAINT 汚染が有効であり、珟圚の匏に䜕らかの入力があった堎合に SV を汚染したす。
汚染されおいたす -- 通垞は倉数ですが、ロケヌルなどの暗黙的な入力も汚染されおいる可胜性がありたす
蚭定。 「SvTAINT」は、その汚染を匏の出力に䌝播したす。
悲芳的なやり方で。぀たり、正確にどれであるかに泚意を払うこずなく、
出力はどの入力の圱響を受けるか。

void SvTAINT(SV* sv)

SVTAINTED
SV が汚染されおいるかどうかを確認したす。存圚する堎合は TRUE を返し、そうでない堎合は FALSE を返したす。

bool SvTAINTED(SV* sv)

SvTAINTED_off
SV の汚れを取り陀きたす。なれ 非垞に このルヌチンでは䞀郚の回路が短絡するため泚意しおください。
Perl の基本的なセキュリティ機胜。 XS モゞュヌルの䜜成者はこれを䜿甚しないでください
無条件の意味をすべお完党に理解しない限り機胜したせん。
䟡倀を汚さないこず。汚染の解陀は、暙準の Perl の方法で行う必芁がありたす。
倉数を盎接汚染しないのではなく、泚意深く䜜成された正芏衚珟です。

void SvTAINTED_off(SV* sv)

SvTAINTED_on
汚染が有効な堎合、SV を汚染枈みずしおマヌクしたす。

void SvTAINTED_on(SV* sv)

SvTRUE Perl が SV を true ずしお評䟡するか false ずしお評䟡するかを瀺すブヌル倀を返したす。
芋る SvOK() 定矩枈み/未定矩のテスト甚。スカラヌがそうでない堎合を陀き、「get」マゞックを凊理したす。
すでに SvPOK、SvIOK、たたは SvNOK (プラむベヌト フラグではなくパブリック フラグ)。

bool SvTRUE(SV* sv)

SvTRUE_nomg
Perl が SV を true ずしお評䟡するか false ずしお評䟡するかを瀺すブヌル倀を返したす。
芋る SvOK() 定矩枈み/未定矩のテスト甚。 「get」魔法は扱いたせん。

bool SvTRUE_nomg(SV* sv)

SvTYPE SV のタむプを返したす。 「svtype」を参照しおください。

svtype SvTYPE(SV* sv)

SvUOK SV に必須の敎数が含たれおいるかどうかを瀺すブヌル倀を返したす。
眲名されおいないものずしお解釈されたす。 倀が範囲内にある非負の敎数
IV ず UV の䞡方のフラグは、SvUOK たたは SVIOK ずしお蚭定できたす。

bool SvUOK(SV* sv)

SvUPGRADE
SV をより耇雑な圢匏にアップグレヌドするために䜿甚されたす。 「sv_upgrade」を䜿甚しお、
必芁に応じおアップグレヌドしたす。 「svtype」を参照しおください。

void SvUPGRADE(SV* sv, svtype タむプ)

SvUTF8 SV の UTF-32 ステヌタスを瀺す U8 倀を返したす。物事がセットアップされおいる堎合
正しくは、これは SV に UTF-8 ゚ンコヌドされたデヌタが含たれおいるかどうかを瀺したす。あなた
これを䜿うべきです After ぞの電話 SvPV たたはそのバリアントの 1 ぀呌び出しがあった堎合
文字列のオヌバヌロヌドは内郚フラグを曎新したす。

bytes プラグマを考慮する堎合は、代わりに「DO_UTF8」を䜿甚しおください。

U32 SvUTF8(SV* sv)

SvUTF8_off
SV の UTF-8 ステヌタスを蚭定解陀したす (デヌタは倉曎されず、フラグのみが倉曎されたす)。しないでください
軜薄に䜿う。

void SvUTF8_off(SV *sv)

SvUTF8_on
SV の UTF-8 ステヌタスをオンにしたす (デヌタは倉曎されず、フラグのみが倉曎されたす)。する
軜率に䜿甚しないでください。

void SvUTF8_on(SV *sv)

SvUV 指定された SV を笊号なし敎数に匷制倉換しお返したす。詳现に぀いおは、「SvUVx」を参照しおください。
sv を 1 回だけ評䟡するこずを保蚌するバヌゞョン。

UV SvUV(SV* sv)

SvUVX チェックや倉換を行わずに、SV の UV スロットの生の倀を返したす。のみ
SvIOK が true であるこずが確実な堎合に䜿甚しおください。 「SvUV()」も参照しおください。

UV SvUVX(SV* sv)

SvUVx 指定された SV を笊号なし敎数に匷制倉換しお返したす。を保蚌したす
「sv」は 1 回だけ評䟡したす。 「sv」がサむド付きの匏である堎合にのみこれを䜿甚したす。
それ以倖の堎合は、より効率的な「SvUV」を䜿甚しおください。

UV SvUVx(SV* sv)

SvUV_nomg
「SvUV」に䌌おいたすが、魔法を凊理したせん。

UV SvUV_nomg(SV* sv)

SvUV_set
sv の UV ポむンタの倀を val に蚭定したす。 「SvIV_set」を参照しおください。

void SvUV_set(SV* sv, UV val)

SvVOK SV に v-string が含たれおいるかどうかを瀺すブヌル倀を返したす。

bool SvVOK(SV* sv)

sv_catpvn_nomg
「sv_catpvn」ず䌌おいたすが、魔法を凊理したせん。

void sv_catpvn_nomg(SV* sv, const char* ptr,
STRLENレン

sv_catpv_nomg
「sv_catpv」ず䌌おいたすが、魔法を凊理したせん。

void sv_catpv_nomg(SV* sv, const char* ptr)

sv_catsv_nomg
「sv_catsv」ず䌌おいたすが、魔法を凊理したせん。

void sv_catsv_nomg(SV* dsv, SV* ssv)

sv_derived_from
「sv_derived_from_pv」ずたったく同じですが、「flags」パラメヌタを取りたせん。

bool sv_derived_from(SV* sv, const char *const 名)

sv_derived_from_pv
「sv_derived_from_pvn」ずたったく同じですが、文字列の代わりに NULL で終わる文字列を受け取りたす。
文字列/長さのペア。

bool sv_derived_from_pv(SV* sv,
const char *定数名、
U32 フラグ)

sv_derived_from_pvn
SV が指定されたクラスから掟生したかどうかを瀺すブヌル倀を返したす。 at
  C レベル。 Perl レベルで導出を確認するには、通垞の Perl ずしお「isa()」を呌び出したす。
方法。

珟圚、「flags」の唯䞀の重芁な倀は SVf_UTF8 です。

bool sv_derived_from_pvn(SV* sv,
const char *定数名、
const STRLEN len、U32 フラグ)

sv_derived_from_sv
「sv_derived_from_pvn」ずたったく同じですが、SV の圢匏で名前文字列を受け取りたす。
文字列ず長さのペアの代わりに。

bool sv_derived_from_sv(SV* sv, SV *namesv,
U32 フラグ)

sv_does 「sv_does_pv」ず䌌おいたすが、「flags」パラメヌタを取りたせん。

bool sv_does(SV* sv, const char *const 名)

sv_does_pv
「sv_does_sv」ず䌌おいたすが、SV の代わりに NULL で終わる文字列を受け取りたす。

bool sv_does_pv(SV* sv, const char *const 名,
U32 フラグ)

sv_does_pvn
「sv_does_sv」ず䌌おいたすが、SV の代わりに文字列ず長さのペアを受け取りたす。

bool sv_does_pvn(SV* sv, const char *const 名,
const STRLEN len、U32 フラグ)

sv_does_sv
SV が特定の名前付きロヌルを実行するかどうかを瀺すブヌル倀を返したす。の
SV には、Perl オブゞェクトたたは Perl クラスの名前を指定できたす。

bool sv_does_sv(SV* sv、SV* namesv、U32 フラグ)

sv_report_used
ただ解攟されおいないすべおの SV の内容をダンプしたす (デバッグ支揎)。

void sv_report_used()

sv_setsv_nomg
「sv_setsv」ず䌌おいたすが、魔法を凊理したせん。

void sv_setsv_nomg(SV* dsv, SV* ssv)

sv_utf8_upgrade_nomg
sv_utf8_upgrade ず䌌おいたすが、「sv」に察しお魔法を実行したせん。

STRLEN sv_utf8_upgrade_nomg(NN SV *sv)

SVボディ 割り圓お


look_like_number
SV の内容が数倀のように芋える (たたは数倀である) かどうかをテストしたす。 「むンフ」ず
「無限倧」は数倀ずしお扱われたす (したがっお、数倀以倖の譊告は発行されたせん)。
もしあなたの atof() 圌らを䞍快にさせたせん。 Get-magic は無芖されたす。

I32 芋た目の数(SV *const sv)

newRV_noinc
SV の RV ラッパヌを䜜成したす。 元の SV の参照カりントは次のずおりです。
増加したした。

SV* newRV_noinc(SV *const tmpRef)

newSV 新しいSVを䜜成したす。れロ以倖の「len」パラメヌタは、
SV が持぀必芁がある事前に割り圓おられた文字列スペヌス。末尟の「NUL」の远加バむト
も予玄されおいたす。 (文字列スペヌスが指定されおいおも、SV には SvPOK は蚭定されたせん)
新しい SV の参照カりントは 1 に蚭定されたす。

5.9.3幎には、 newSV() 叀いものを眮き換えたす ニュヌスSV() API を䜜成し、最初のパラメヌタを削陀したす。
x、呌び出し元が自分自身を識別できるようにするデバッグ補助。この揎助は、
新しいビルド オプション PERL_MEM_LOG に眮き換えられたした (「PERL_MEM_LOG」を参照)
perlhacktips)。 叀い API は、XS モゞュヌルで䜿甚するためにただ存圚しおいたす。
叀いパヌル。

SV* newSV(const STRLEN len)

新しいSVhek
ハッシュ キヌ構造から新しい SV を䜜成したす。それはポむントするスカラヌを生成したす
可胜な堎合は共有文字列テヌブルにコピヌしたす。次の堎合、新しい (未定矩) SV を返したす。
hek は NULL です。

SV* newSVhek(const HEK *const hek)

newSViv 新しい SV を䜜成し、そこに敎数をコピヌしたす。 SV の参照カりントは次のずおりです。
1に蚭定したす。

SV* newSViv(const IV i)

newSVnv 新しい SV を䜜成し、そこに浮動小数点倀をコピヌしたす。参照カりント
SV は 1 に蚭定されたす。

SV* newSVnv(const NV n)

newSVpv 新しい SV を䜜成し、文字列 (「NUL」 (「\0」) 文字が含たれる堎合がありたす) をコピヌしたす。
そこに。 SV の参照カりントは 1 に蚭定されたす。「len」が XNUMX の堎合、Perl は
を䜿甚しお長さを蚈算したす strlen, (぀たり、このオプションを䜿甚するず、「s」が
「NUL」文字を埋め蟌むこずはできず、終端の「NUL」バむトが必芁です。

効率を高めるために、代わりに「newSVpvn」の䜿甚を怜蚎しおください。

SV* newSVpv(const char *const s, const STRLEN len)

新しいSVpvf
新しい SV を䜜成し、「sprintf」のような圢匏の文字列で初期化したす。

SV* newSVpvf(const char *const pat, ...)

新しいSVpvn
新しい SV を䜜成し、そこに文字列をコピヌしたす。文字列には「NUL」文字が含たれる堎合がありたす。
("\0") およびその他のバむナリ デヌタ。 SV の参照カりントは 1 に蚭定されたす。
「len」がれロの堎合、Perl は長さ 0 の (Perl) 文字列を䜜成したす。あなたは
゜ヌスバッファが少なくずも「len」バむト長であるこずを保蚌する責任がありたす。もし
「buffer」匕数が NULL の堎合、新しい SV は未定矩になりたす。

SV* newSVpvn(const char *const s, const STRLEN len)

newSVpvn_flags
新しい SV を䜜成し、文字列 (「NUL」 (「\0」) 文字が含たれる堎合がありたす) をコピヌしたす。
そこに。 SV の参照カりントは 1 に蚭定されたす。「len」が XNUMX の堎合、
Perl は長さ 0 の文字列を䜜成したす。あなたには、次のこずを保蚌する責任がありたす。
゜ヌス文字列の長さは少なくずも「len」バむトです。 「s」匕数が NULL の堎合、新しい
SVは䞍定ずなりたす。珟圚受け入れられるフラグ ビットは「SVf_UTF8」ず「SVf_UTFXNUMX」のみです。
「SVs_TEMP」。 「SVs_TEMP」が蚭定されおいる堎合、結果に察しお「sv_2mortal()」が呌び出されたす。
戻る前に。 「SVf_UTF8」が蚭定されおいる堎合、「s」は UTF-8 であるずみなされ、
新しい SV には「SVf_UTF8」フラグが蚭定されたす。 「newSVpvn_utf8()」は䟿利です
この関数のラッパヌ。次のように定矩されたす。

#define newSVpvn_utf8(s, len, u) \
newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)

SV* newSVpvn_flags(const char *const s,
const STRLEN レン、
const U32 フラグ)

newSVpvn_share
文字列内の共有文字列を指す SvPVX_const を䜿甚しお新しい SV を䜜成したす
テヌブル。文字列がテヌブルにただ存圚しない堎合は、最初に文字列が䜜成されたす。
SvIsCOW フラグをオンにしたす (たたは 5.16 以前では READONLY ず FAKE)。もし
「hash」パラメヌタがれロ以倖の堎合は、その倀が䜿甚されたす。それ以倖の堎合は、ハッシュが蚈算されたす。
文字列のハッシュは、埌で「SvSHARED_HASH()」を䜿甚しお SV から取埗できたす。
倧きい。ここでの考え方は、文字列テヌブルが共有ハッシュキヌに䜿甚されるためです。
これらの文字列には SvPVX_const == HeKEY が含たれ、ハッシュ怜玢では文字列が回避されたす。
比范しおください。

SV* newSVpvn_share(const char* s、I32 len、U32 ハッシュ)

新しいSVpv
「newSVpvn」ず䌌おいたすが、文字列の代わりにリテラルの「NUL」で終わる文字列を受け取りたす。
文字列/長さのペア。

SV* newSVpvs(const char* s)

newSVpvs_flags
「newSVpvn_flags」ず䌌おいたすが、文字列の代わりにリテラルの「NUL」で終わる文字列を受け取りたす。
文字列/長さのペア。

SV* newSVpvs_flags(const char* s、U32 フラグ)

newSVpvs_share
「newSVpvn_share」ず䌌おいたすが、文字列の代わりにリテラルの「NUL」で終わる文字列を受け取りたす。
文字列ず長さのペアであり、ハッシュ パラメヌタは省略されたす。

SV* newSVpvs_share(const char* s)

newSVpv_share
「newSVpvn_share」ず䌌おいたすが、文字列の代わりに「NUL」で終わる文字列を受け取りたす。
文字列/長さのペア。

SV* newSVpv_share(const char* s、U32 ハッシュ)

newSVrv 既存の RV「rv」が指す新しい SV を䜜成したす。 「rv」が RV ではない堎合
その埌、1 にアップグレヌドされたす。 「classname」が null でない堎合、新しい SV は次のようになりたす。
指定されたパッケヌゞで祝犏されたす。新しい SV ずその参照が返されたす
count は 1 です。参照カりント 1 は「rv」によっお所有されたす。

SV* newSVrv(SV *const rv,
const char *const クラス名)

newSVsv 元の SV の正確な耇補である新しい SV を䜜成したす。 (甹途
「sv_setsv」。)

SV* newSVsv(SV *const old)

newSVuv 新しい SV を䜜成し、そこに笊号なし敎数をコピヌしたす。の参照カりント
SV は 1 に蚭定されたす。

SV* newSVuv(const UV u)

新しいSV_type
指定されたタむプの新しい SV を䜜成したす。新しい SV の参照カりントは次のずおりです。
1に蚭定したす。

SV* newSV_type(const svtype タむプ)

sv_2ブヌル
このマクロを䜿甚できるのは次の堎合のみです。 sv_true() たたはその同等のマクロであり、
埌者の匕数は SvPOK、SvIOK、SvNOK のいずれでもありたせん。 sv_2bool_flags を呌び出したす。
SV_GMAGIC フラグ。

bool sv_2bool(SV *const sv)

sv_2bool_flags
この機胜を䜿甚できるのは次の堎合のみです。 sv_true() ず友人、そしお埌者の堎合のみ
匕数が SvPOK、SvIOK、SvNOK のいずれでもありたせん。フラグに SV_GMAGIC が含たれおいる堎合、
それは mg_get 最初。

bool sv_2bool_flags(SV *sv、I32 フラグ)

sv_2cv さたざたな戊略を䜿甚しお、SV から CV を取埗しようずしたす。さらに、可胜であれば次のようにしおください
*st ず *gvp をスタッシュずそれに関連付けられた GV に蚭定したす。 「lref」のフラグは次のずおりです。
gv_fetchsv に枡されたす。

CV* sv_2cv(SV* sv, HV **const st, GV **const gvp,
const I32 lref)

sv_2io さたざたなガンビットを䜿甚しお、SV から IO を取埗しようずしたす。GV の堎合は IO スロットです。たたは
RV の堎合は再垰的な結果。たたは、その名前にちなんで名付けられたシンボルの IO スロット
文字列の堎合は PV。

「Get」マゞックは枡された SV では無芖されたすが、SV の堎合は「SvRV(sv)」で呌び出されたす。
RVです。

IO* sv_2io(SV *const sv)

sv_2iv_flags
必芁な文字列倉換を行っお、SV の敎数倀を返したす。もし
flags には SV_GMAGIC が含たれおおり、 mg_get 初め。通垞は次の方法で䜿甚されたす。
「SvIV(sv)」および「SvIVx(sv)」マクロ。

IV sv_2iv_flags(SV *const sv、const I32 フラグ)

sv_2モヌタル
既存の SV を死亡者ずしおマヌクしたす。 SV は「すぐに」砎壊されたす。
FREETMPS ぞの明瀺的な呌び出し、たたはステヌトメントなどの堎所での暗黙的な呌び出しによる
境界線 SvTEMP() がオンになっおいるずいうこずは、SV の文字列バッファヌを
この SV がコピヌされた堎合は「盗たれた」。 「sv_newmortal」および「sv_mortalcopy」も参照しおください。

SV* sv_2mortal(SV *const sv)

sv_2nv_flags
必芁な文字列たたは敎数の倉換を行っお、SV の数倀を返したす。
フラグに SV_GMAGIC が含たれおいる堎合、 mg_get 初め。通垞は次の方法で䜿甚されたす。
「SvNV(sv)」マクロず「SvNVx(sv)」マクロ。

NV sv_2nv_flags(SV *const sv、const I32 フラグ)

sv_2pvbyte
SV のバむト゚ンコヌド衚珟ぞのポむンタを返し、*lp をその倀に蚭定したす。
長さ。副䜜甚ずしお SV が UTF-8 からダりングレヌドされる可胜性がありたす。

通垞は「SvPVbyte」マクロ経由でアクセスしたす。

char* sv_2pvbyte(SV *sv, STRLEN *const lp)

sv_2pvutf8
SV の UTF-8 ゚ンコヌド衚珟ぞのポむンタヌを返し、 *lp をその倀に蚭定したす。
長さ。副䜜甚ずしお SV が UTF-8 にアップグレヌドされる可胜性がありたす。

通垞は「SvPVutf8」マクロ経由でアクセスしたす。

char* sv_2pvutf8(SV *sv, STRLEN *const lp)

sv_2pv_flags
SV の文字列倀ぞのポむンタを返し、*lp にその長さを蚭定したす。もし
flags には SV_GMAGIC が含たれおおり、 mg_get 初め。次の堎合に sv を文字列に匷制したす。
必芁。通垞は「SvPV_flags」マクロを介しお呌び出されたす。 「sv_2pv()」ず
「sv_2pv_nomg」も通垞はここに行きたす。

char* sv_2pv_flags(SV *const sv, STRLEN *const lp,
const I32 フラグ)

sv_2uv_flags
必芁な文字列倉換を行っお、SV の笊号なし敎数倀を返したす。
フラグに SV_GMAGIC が含たれおいる堎合、 mg_get 初め。通垞は次の方法で䜿甚されたす。
「SvUV(sv)」および「SvUVx(sv)」マクロ。

UV sv_2uv_flags(SV *const sv、const I32 フラグ)

sv_backoff
文字列オフセットを削陀したす。通垞は「SvOOK_off」マクロ ラッパヌを䜿甚する必芁がありたす。
を代わりにお䜿いください。

int sv_backoff(SV *const sv)

sv_bless
指定されたパッケヌゞに SV を祝犏したす。 SV は RV である必芁がありたす。パッケヌゞは次のずおりです。
stash によっお指定されたす (「gv_stashpv()」を参照)。 SV の参照カりントは、
圱響を受けたせん。

SV* sv_bless(SV *const sv、HV *const stash)

sv_catpv
「NUL」で終わる文字列を文字列の末尟に連結したす。
SV。 SV に UTF-8 ステヌタスが蚭定されおいる堎合、远加されるバむトは次のようになりたす。
有効な UTF-8。 「get」マゞックは凊理したすが、「set」マゞックは凊理したせん。 「sv_catpv_mg」を参照しおください。

void sv_catpv(SV *const sv, const char* ptr)

sv_catpvf
匕数を「sprintf」のように凊理し、フォヌマットされた出力を SV に远加したす。
远加されたデヌタに「ワむド」文字 (以䞋を含むがこれに限定されない) が含たれおいる堎合、
%s でフォヌマットされた UTF-8 PV ず %c でフォヌマットされた 255 を超える文字を持぀ SV)、
元の SV は UTF-8 にアップグレヌドされる可胜性がありたす。 「get」マゞックは凊理したすが、「set」マゞックは凊理したせん
魔法。 「sv_catpvf_mg」を参照しおください。元の SV が UTF-8 の堎合、パタヌンは次のようになりたす。
有効な UTF-8;元の SV がバむトであれば、パタヌンもバむトである必芁がありたす。

void sv_catpvf(SV *const sv, const char *const pat,
...

sv_catpvf_mg
「sv_catpvf」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_catpvf_mg(SV *const sv,
const char *const pat, ...)

sv_catpvn
SV 内の文字列の末尟に文字列を連結したす。 「レン」
コピヌするバむト数を瀺したす。 SV に UTF-8 ステヌタスが蚭定されおいる堎合、
远加されるバむトは有効な UTF-8 である必芁がありたす。 「get」マゞックは凊理したすが、「set」マゞックは凊理したせん。
「sv_catpvn_mg」を参照しおください。

void sv_catpvn(SV *dsv, const char *sstr, STRLEN len)

sv_catpvn_flags
SV 内の文字列の末尟に文字列を連結したす。 「レン」
コピヌするバむト数を瀺したす。

デフォルトでは、SV に
UTF-8 ステヌタス セット、それ以倖の堎合はバむト列。匷制的に远加するこずができたす
「SV_CATUTF8」フラグを指定するこずで UTF-8 ずしお解釈される文字列、およびバむトずしお解釈される文字列
「SV_CATBYTES」フラグを指定するこずによっお。 SV たたは远加される文字列は次のようになりたす。
必芁に応じお UTF-8 にアップグレヌドしたす。

「flags」に「SV_SMAGIC」ビットが蚭定されおいる堎合、その埌「dsv」に「mg_set」が蚭定されたす。
適切な。 「sv_catpvn」ず「sv_catpvn_nomg」はこれに関しお実装されおいたす
機胜。

void sv_catpvn_flags(SV *const dstr,
const char *sstr、
const STRLEN レン、
const I32 フラグ)

sv_catpvs
「sv_catpvn」ず䌌おいたすが、文字列ず長さのペアの代わりにリテラル文字列を受け取りたす。

void sv_catpvs(SV* sv, const char* s)

sv_catpvs_flags
「sv_catpvn_flags」ず䌌おいたすが、文字列の代わりにリテラルの「NUL」で終わる文字列を受け取りたす。
文字列/長さのペア。

void sv_catpvs_flags(SV* sv, const char* s,
I32 フラグ)

sv_catpvs_mg
「sv_catpvn_mg」ず䌌おいたすが、文字列ず長さのペアの代わりにリテラル文字列を受け取りたす。

void sv_catpvs_mg(SV* sv, const char* s)

sv_catpvs_nomg
「sv_catpvn_nomg」ず䌌おいたすが、文字列ず長さのペアの代わりにリテラル文字列を受け取りたす。

void sv_catpvs_nomg(SV* sv, const char* s)

sv_catpv_flags
「NUL」で終わる文字列を文字列の末尟に連結したす。
SV。 SV に UTF-8 ステヌタスが蚭定されおいる堎合、远加されるバむトは次のようになりたす。
有効な UTF-8。 「flags」に「SV_SMAGIC」ビットが蚭定されおいる堎合、「mg_set」は
必芁に応じお SV を倉曎したす。

void sv_catpv_flags(SV *dstr, const char *sstr,
const I32 フラグ)

sv_catpv_mg
「sv_catpv」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_catpv_mg(SV *const sv, const char *const ptr)

sv_catsv
SV "ssv" の文字列を SV "dsv" の文字列の末尟に連結したす。もし
「ssv」は null で、䜕も行いたせん。それ以倖の堎合は、「dsv」のみを倉曎したす。 「get」魔法を扱う
䞡方のSVにありたすが、「セット」マゞックはありたせん。 「sv_catsv_mg」および「sv_catsv_nomg」を参照しおください。

void sv_catsv(SV *dstr, SV *sstr)

sv_catsv_flags
SV "ssv" の文字列を SV "dsv" の文字列の末尟に連結したす。もし
「ssv」は null で、䜕も行いたせん。それ以倖の堎合は、「dsv」のみを倉曎したす。 「フラグ」に含たれる堎合
「SV_GMAGIC」ビットを蚭定するず、必芁に応じお䞡方の SV で「mg_get」が呌び出されたす。 「フラグ」の堎合
"SV_SMAGIC" を含めるず、埌で倉曎された SV 䞊で "mg_set" が呌び出されたす。
適切な。 「sv_catsv」「sv_catsv_nomg」「sv_catsv_mg」は、
この機胜の条件。

void sv_catsv_flags(SV *const dsv, SV *const ssv,
const I32 フラグ)

sv_chop 文字列バッファの先頭から文字を効率的に削陀したす。
SvPOK(sv)、たたは少なくずも SvPOKp(sv) は true でなければならず、「ptr」はぞのポむンタでなければなりたせん。
文字列バッファ内のどこかにありたす。 「ptr」が最初の文字になりたす。
調敎した匊。 「OOKハック」を䜿甚したす。埩垰時はSvPOK(sv)ずSvPOKp(sv)のみ
OK フラグのうちの 1 ぀が true になりたす。

泚意: この関数が戻った埌は、「ptr」ず SvPVX_const(sv) は参照できなくなる可胜性がありたす。
同じデヌタチャンクに。

残念なこずに、この関数の名前は Perl の「chop」の名前ず䌌おいたす。
挔算子は完党に偶然です。この関数は巊から動䜜したす。 "チョップ"
右から動䜜したす。

void sv_chop(SV *const sv, const char *const ptr)

sv_clear
SV をクリアしたす。デストラクタヌを呌び出し、本䜓で䜿甚されおいるメモリを解攟し、
身䜓そのもの。 SVの頭は タむプはすべお 1 に蚭定されおいたすが、解攟されおいたす
地球芏暡の砎壊䞭に誀っお生きおいるずみなされないようにするため
この関数は、REFCNT が 0 の堎合にのみ呌び出す必芁がありたす。ほずんどの時間
代わりに「sv_free()」たたはそのマクロ ラッパヌ「SvREFCNT_dec」を呌び出しおください。

void sv_clear(SV *const orig_sv)

sv_cmp 1 ぀の SV の文字列を比范したす。 -0、1、たたは XNUMX を返し、
「sv1」の文字列は、「sv2」の文字列より小さい、等しい、たたは倧きいです。は
UTF-8 ず「バむトの䜿甚」を認識し、ハンドルは魔法を取埗し、その匕数を匷制的に取埗したす。
必芁に応じお文字列を远加したす。 「sv_cmp_locale」も参照しおください。

I32 sv_cmp(SV *const sv1, SV *const sv2)

sv_cmp_flags
1 ぀の SV 内の文字列を比范したす。 -0、1、たたは XNUMX を返し、
「sv1」の文字列は、「sv2」の文字列より小さい、等しい、たたは倧きいです。は
UTF-8 ず「バむトの䜿甚」を認識し、必芁に応じお匕数を文字列に匷制したす。もし
フラグには SV_GMAGIC が含たれおおり、get マゞックを凊理したす。こちらも参照
「sv_cmp_locale_flags」。

I32 sv_cmp_flags(SV *const sv1, SV *const sv2,
const U32 フラグ)

sv_cmp_locale
ロケヌルを認識した方法で 8 ぀の SV 内の文字列を比范したす。 UTF-XNUMX であり、「䜿甚」
バむトを認識し、ハンドルは魔法を取埗し、必芁に応じお匕数を文字列に匷制したす。
「sv_cmp」も参照しおください。

I32 sv_cmp_locale(SV *const sv1, SV *const sv2)

sv_cmp_locale_flags
ロケヌルを認識した方法で 8 ぀の SV 内の文字列を比范したす。 UTF-XNUMX であり、「䜿甚」
バむトを認識し、必芁に応じおその匕数を文字列に匷制したす。フラグの堎合
SV_GMAGIC が含たれおおり、get マゞックを凊理したす。 「sv_cmp_flags」も参照しおください。

I32 sv_cmp_locale_flags(SV *const sv1,
SV *const sv2、
const U32 フラグ)

sv_collxfrm
これは、SV_GMAGIC フラグを指定しお「sv_collxfrm_flags」を呌び出したす。 「sv_collxfrm_flags」を参照しおください。

char* sv_collxfrm(SV *const sv, STRLEN *const nxp)

sv_collxfrm_flags
Collat​​e Transform マゞックがただ存圚しおいない堎合は、SV に远加したす。フラグの堎合
SV_GMAGIC が含たれおいる堎合、get-magic を凊理したす。

任意のスカラヌ倉数は、スカラヌを含む PERL_MAGIC_collxfrm マゞックを実行できたす。
倉数のデヌタですが、通垞のメモリが認識できる圢匏に倉換されたす。
比范を䜿甚するず、ロケヌル蚭定に埓っおデヌタを比范できたす。

char* sv_collxfrm_flags(SV *const sv,
STRLEN *const nxp、
I32 定数フラグ)

sv_copypv_flags
sv_copypv および sv_copypv_nomg の実装。フラグが含たれおいる堎合、get magic を呌び出したす。
SV_GMAGIC。

void sv_copypv_flags(SV *const dsv, SV *const ssv,
const I32 フラグ)

sv_copypv_nomg
sv_copypv ず䌌おいたすが、最初に get magic を呌び出したせん。

void sv_copypv_nomg(SV *const dsv, SV *const ssv)

sv_dec SV の倀を自動デクリメントし、次の堎合に文字列から数倀ぞの倉換を実行したす。
必芁。 「get」マゞックず挔算子のオヌバヌロヌドを凊理したす。

void sv_dec(SV *const sv)

sv_dec_nomg
SV 内の倀を自動デクリメントし、次の堎合に文字列から数倀ぞの倉換を実行したす。
必芁。挔算子のオヌバヌロヌドを凊理したす。 「get」マゞックの凊理をスキップしたす。

void sv_dec_nomg(SV *const sv)

sv_eq 2 ぀の SV の文字列が同䞀かどうかを瀺すブヌル倀を返したす。は
UTF-8 ず「バむトの䜿甚」を認識し、ハンドルは魔法を取埗し、その匕数を匷制的に取埗したす。
必芁に応じお文字列を远加したす。

I32 sv_eq(SV* sv1、SV* sv2)

sv_eq_flags
2 ぀の SV の文字列が同䞀かどうかを瀺すブヌル倀を返したす。は
UTF-8 ず「バむトの䜿甚」を認識し、必芁に応じお匕数を文字列に匷制したす。もし
flags には SV_GMAGIC が含たれおおり、get-magic も凊理したす。

I32 sv_eq_flags(SV* sv1、SV* sv2、const U32 フラグ)

sv_force_normal_flags
SV 䞊のさたざたな皮類の停装を元に戻したす。停装は文字列「以䞊」を意味したす。
PV は共有文字列であるため、プラむベヌト コピヌを䜜成したす。私たちが参照者である堎合は、参照を停止しおください。もし
私たちは glob なので、xpvmg にダりングレヌドしたす。コピヌオンラむト スカラヌの堎合、これは
コピヌを行うずきの曞き蟌み時間。ロヌカルでも䜿甚されたす。これが vstring の堎合、
vstring マゞックを削陀したす。 「SV_COW_DROP_PV」が蚭定されおいる堎合は、コピヌオンラむト スカラヌ
PV バッファ (存圚する堎合) を削陀し、コピヌを䜜成するのではなく SvPOK_off になりたす。
(このスカラヌが他の倀に蚭定されようずしおいる堎合に䜿甚されたす。) さらに、
「flags」パラメヌタは、reff 解陀時に「sv_unref_flags()」に枡されたす。
「sv_force_normal」は、フラグを 0 に蚭定しおこの関数を呌び出したす。

この関数は、この SV がこれから倉曎されるこずを Perl に通知するために䜿甚されるこずが期埅されおいたす。
に曞かれおおり、远加の垳簿管理に察凊する必芁がありたす。したがっお、それは
読み取り専甚倀をクロヌクしたす。

void sv_force_normal_flags(SV *const sv,
const U32 フラグ)

sv_free SV の参照カりントをデクリメントし、れロになった堎合は、「sv_clear」を呌び出したす。
デストラクタヌを呌び出し、本䜓で䜿甚されおいるメモリを解攟したす。最埌に割り圓おを解陀したす
SVのヘッドそのもの。通垞はラッパヌ マクロ「SvREFCNT_dec」を介しお呌び出されたす。

void sv_free(SV *const sv)

sv_gets ファむルハンドルから行を取埗し、SV に保存し、オプションで次の行に远加したす。
珟圚保存されおいる文字列。 「append」が 0 でない堎合、その行は SV に远加されたす。
䞊曞きする代わりに。 「append」は、
远加される文字列は SV 内の で始たる必芁がありたす (通垞、「SvCUR(sv)」が適切です)
遞択。

char* sv_gets(SV *const sv, PerlIO *const fp,
I32 远加)

sv_get_backrefs
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

SV が匱参照のタヌゲットである堎合、埌方参照を返したす。
SV に関連付けられた構造䜓。それ以倖の堎合は NULL を返したす。

null 以倖の結果を返す堎合、戻り倀の型が関係したす。それが
AV の堎合、AV の芁玠は、これを指す匱い参照 RV になりたす。
アむテム。他の型の堎合、項目自䜓が匱参照になりたす。

参照 Perl_sv_add_backref(), Perl_sv_del_backref(), Perl_sv_kill_backrefs()

SV* sv_get_backrefs(SV *const sv)

sv_grow SV 内の文字バッファを拡匵したす。必芁に応じお、「sv_unref」を䜿甚し、
SV を「SVt_PV」にアップグレヌドしたす。文字バッファぞのポむンタを返したす。䜿甚
代わりに「SvGROW」ラッパヌ。

char* sv_grow(SV *const sv, STRLEN newlen)

sv_inc SV の倀を自動むンクリメントし、次の堎合に文字列から数倀ぞの倉換を実行したす。
必芁。 「get」マゞックず挔算子のオヌバヌロヌドを凊理したす。

void sv_inc(SV *const sv)

sv_inc_nomg
SV の倀を自動むンクリメントし、次の堎合に文字列から数倀ぞの倉換を実行したす。
必芁。挔算子のオヌバヌロヌドを凊理したす。 「get」マゞックの凊理をスキップしたす。

void sv_inc_nomg(SV *const sv)

sv_挿入
SV 内の指定されたオフセット/長さに文字列を挿入したす。に䌌おいたす
パヌル substr 関数。ハンドルには魔法がかかりたす。

void sv_insert(SV *const bigstr, const STRLEN オフセット,
const STRLEN レン、
const char *const little、
const STRLEN littlelen)

sv_insert_flags
「sv_insert」ず同じですが、远加の「フラグ」が「SvPV_force_flags」に枡されたす。
これは「bigstr」に適甚されたす。

void sv_insert_flags(SV *const bigstr,
const STRLEN オフセット、
const STRLEN レン、
const char *const little、
const STRLEN リトルレン、
const U32 フラグ)

sv_isa SV が指定されたクラスに祝犏されおいるかどうかを瀺すブヌル倀を返したす。
これはサブタむプをチェックしたせん。 「sv_derived_from」を䜿甚しお継承を怜蚌する
関係。

int sv_isa(SV* sv, const char *const 名)

sv_isoobject
SV が祝犏されたオブゞェクトを指す RV であるかどうかを瀺すブヌル倀を返したす。
SV が RV ではない堎合、たたはオブゞェクトが祝犏されおいない堎合、これは返されたす。
停。

int sv_isobject(SV* sv)

sv_len SV 内の文字列の長さを返したす。魔法ず型匷制を凊理し、
UTF8 フラグを適切に蚭定したす。 「SvCUR」も参照しおください。これにより、
xpv_cur スロット。

STRLEN sv_len(SV *const sv)

sv_len_utf8
ワむド UTF-8 バむトをカりントしお、SV 内の文字列の文字数を返したす。
単䞀の文字ずしお。魔法ず型匷制を凊理したす。

STRLEN sv_len_utf8(SV *const sv)

sv_magic
SVに魔法を付䞎したす。たず、必芁に応じお「sv」をタむプ「SVt_PVMG」にアップグレヌドしたす。
「how」タむプの新しいマゞック項目をマゞックリストの先頭に远加したす。

凊理の説明に぀いおは、「sv_magicext」(「sv_magic」が珟圚呌び出しおいる)を参照しおください。
「name」匕数ず「namlen」匕数の。

SvREADONLY SV にマゞックを远加したり、さらに远加したりするには、「sv_magicext」を䜿甚する必芁がありたす。
同じ「方法」の 1 ぀のむンスタンスよりも。

void sv_magic(SV *const sv, SV *const obj,
const int 方法、const char *const 名、
const I32 ナムレン)

sv_magicext
SV に魔法を远加し、必芁に応じおアップグレヌドしたす。提䟛された vtable を適甚し、
远加された魔法ぞのポむンタを返したす。

「sv_magicext」は「sv_magic」が蚱可しないものを蚱可するこずに泚意しおください。で
特に、SvREADONLY SV にマゞックを远加し、耇数のむンスタンスを远加できたす。
同じ「方法」。

「namlen」がれロより倧きい堎合、「savepvn」 copy 「名前」の倀が栌玍されおいる堎合、
「namlen」がれロの堎合、「name」はそのたた保存され、別の特殊なケヌスずしお、次の堎合に保存されたす。
「(name && namlen == HEf_SVKEY)」の堎合、「name」には「SV*」が含たれるずみなされ、次のようになりたす。
REFCNT がむンクリメントされた状態でそのたた保存されたす。

(これは珟圚、「sv_magic」によっおサブルヌチンずしお䜿甚されおいたす。)

MAGIC * sv_magicext(SV *const sv, SV *const obj,
const int どのように、
const MGVTBL *const vtbl,
const char *定数名、
const I32 ナムレン)

sv_mortalcopy
元の SV のコピヌである新しい SV を䜜成したす (「sv_setsv」を䜿甚)。新しい
SV は死亡者ずしおマヌクされたす。明瀺的な呌び出しによっお「すぐに」砎棄されたす
FREETMPS ぞのアクセス、たたはステヌトメント境界などの堎所での暗黙的な呌び出しによっお。芋る
「sv_newmortal」ず「sv_2mortal」も。

SV* sv_mortalcopy(SV *const oldsv)

sv_newmortal
臎呜的な新しいヌル SV を䜜成したす。 SV の参照カりントは 1 に蚭定されたす。
FREETMPS ぞの明瀺的な呌び出し、たたは
ステヌトメント境界などの堎所での暗黙的な呌び出し。 「sv_mortalcopy」も参照しおください。
そしお「sv_2mortal」。

SV* sv_newmortal()

sv_newref
SV の参照カりントをむンクリメントしたす。代わりに「SvREFCNT_inc()」ラッパヌを䜿甚しおください。

SV* sv_newref(SV *const sv)

sv_pos_b2u
offsetp が指す倀を、先頭からのバむト数から倉換したす。
文字列を UTF-8 文字の同等数に換算したす。魔法を扱い、
型の匷制。

「sv_pos_b2u_flags」を優先的に䜿甚しおください。これにより、次の文字列よりも長い文字列が正しく凊理されたす。
2Gb。

void sv_pos_b2u(SV *const sv, I32 *const offsetp)

sv_pos_b2u_flags
文字列の先頭からのバむト数からのオフセットをカりントに倉換したす。
同等の数の UTF-8 文字。タむプの匷制を凊理したす。 フラグ 合栌
「SvPV_flags」に蚭定し、通垞は「SV_GMAGIC|SV_CONST_RETURN」で凊理する必芁がありたす。
魔法。

STRLEN sv_pos_b2u_flags(SV *const sv,
STRLEN 定数オフセット、U32 フラグ)

sv_pos_u2b
offsetp が指す倀を、UTF-8 文字の数から倉換したす。
文字列の先頭から、同等のバむト数たでのカりント。 lenp が非の堎合
れロの堎合、lenp に察しおも同じこずを行いたすが、今回はオフセットから開始したす。
文字列の先頭からよりも。魔法ず型匷制を凊理したす。

「sv_pos_u2b_flags」を優先的に䜿甚しおください。これにより、次の文字列よりも長い文字列が正しく凊理されたす。
2Gb。

void sv_pos_u2b(SV *const sv, I32 *const offsetp,
I32 *const lenp)

sv_pos_u2b_flags
文字列の先頭からの UTF-8 文字数のオフセットを
同等のバむト数のカりント。 lenp がれロ以倖の堎合、同じこずを行いたす。
lenp ですが、今回は先頭からではなくオフセットから開始したす。
匊。タむプの匷制を凊理したす。 フラグ は「SvPV_flags」に枡され、通垞は
マゞックを凊理するには「SV_GMAGIC|SV_CONST_RETURN」にする必芁がありたす。

STRLEN sv_pos_u2b_flags(SV *const sv, STRLEN uoffset,
STRLEN *const lenp、U32 フラグ)

sv_pvbyten_force
「SvPVbytex_force」マクロのバック゚ンド。代わりに垞にマクロを䜿甚しおください。

char* sv_pvbyten_force(SV *const sv, STRLEN *const lp)

sv_pvn_force
䜕らかの方法で SV から意味のある文字列を取埗したす。のプラむベヌト実装
耇雑なマクロ匏に察応できないコンパむラ向けのマクロ「SvPV_force」。
代わりに垞にマクロを䜿甚しおください。

char* sv_pvn_force(SV* sv, STRLEN* lp)

sv_pvn_force_flags
䜕らかの方法で SV から意味のある文字列を取埗したす。 「flags」に「SV_GMAGIC」ビットが蚭定されおいる堎合、
適切な堎合は「sv」で「mg_get」を実行したすが、それ以倖の堎合は実行したせん。 「sv_pvn_force」ず
この機胜に関しおは「sv_pvn_force_nomg」が実装されおいたす。普通に欲しいのは
代わりにさたざたなラッパヌ マクロを䜿甚するには、「SvPV_force」および「SvPV_force_nomg」を参照しおください。

char* sv_pvn_force_flags(SV *const sv,
STRLEN *定数 lp,
const I32 フラグ)

sv_pvutf8n_force
「SvPVutf8x_force」マクロのバック゚ンド。代わりに垞にマクロを䜿甚しおください。

char* sv_pvutf8n_force(SV *const sv, STRLEN *const lp)

sv_reftype
SV が䜕ぞの参照であるかを説明する文字列を返したす。

const char* sv_reftype(const SV *const sv, const int ob)

sv_replace
最初の匕数を 2 番目の匕数のコピヌにしおから、元の匕数を削陀したす。の
タヌゲット SV は゜ヌス SV の本䜓の所有暩を物理的に匕き継ぎ、
そのフラグを継承したす。ただし、タヌゲットは所有する魔法ずすべおの魔法を保持したす。
゜ヌスは砎棄されたす。これはかなり特殊な SV コピヌであるこずに泚意しおください。
手術;ほずんどの堎合、「sv_setsv」たたはその倚くのマクロの 1 ぀を䜿甚するこずになりたす。
フロント゚ンド。

void sv_replace(SV *const sv, SV *const nsv)

sv_reset
「リセット」Perl 関数の基瀎ずなる実装。 perl レベルに泚意しおください。
この関数は挠然ず非掚奚になっおいたす。

void sv_reset(const char* s, HV *const stash)

sv_rvweaken
参照を匱める: この RV に「SvWEAKREF」フラグを蚭定したす。参照先のSVを䞎える
「PERL_MAGIC_backref」マゞック (ただ存圚しおいない堎合)。これぞの埌方参照をプッシュしたす
そのマゞックに関連付けられた埌方参照の配列ぞの RV。 RV が
魔法の堎合、蚭定された魔法は RV がクリアされた埌に呌び出されたす。

SV* sv_rvweaken(SV *const sv)

sv_setiv
敎数を指定された SV にコピヌし、必芁に応じお最初にアップグレヌドしたす。ではない
「セット」マゞックを凊理したす。 「sv_setiv_mg」も参照しおください。

void sv_setiv(SV *const sv, const IV num)

sv_setiv_mg
「sv_setiv」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_setiv_mg(SV *const sv, const IV i)

sv_setnv
指定された SV に double をコピヌし、必芁に応じお最初にアップグレヌドしたす。取り扱いたせん
「セット」マゞック。 「sv_setnv_mg」も参照しおください。

void sv_setnv(SV *const sv, const NV num)

sv_setnv_mg
「sv_setnv」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_setnv_mg(SV *const sv, const NV num)

sv_setpv
文字列をSVにコピヌしたす。文字列は「NUL」文字で終了する必芁がありたす。
「セット」マゞックは扱いたせん。 「sv_setpv_mg」を参照しおください。

void sv_setpv(SV *const sv, const char *const ptr)

sv_setpvf
「sv_catpvf」ず同様に機胜したすが、テキストを远加するのではなく、SV にコピヌしたす。
「セット」マゞックは扱いたせん。 「sv_setpvf_mg」を参照しおください。

void sv_setpvf(SV *const sv, const char *const pat,
...

sv_setpvf_mg
「sv_setpvf」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_setpvf_mg(SV *const sv,
const char *const pat, ...)

sv_setpviv
敎数を指定された SV にコピヌし、その文字列倀も曎新したす。ではない
「セット」マゞックを凊理したす。 「sv_setpviv_mg」を参照しおください。

void sv_setpviv(SV *const sv, const IV num)

sv_setpviv_mg
「sv_setpviv」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_setpviv_mg(SV *const sv, const IV iv)

sv_setpvn
文字列 (埋め蟌たれた「NUL」文字を含む可胜性がある) を SV にコピヌしたす。の
「len」パラメヌタはコピヌされるバむト数を瀺したす。 「ptr」匕数の堎合
NULL の堎合、SV は未定矩になりたす。 「セット」マゞックは扱いたせん。芋る
「sv_setpvn_mg」。

void sv_setpvn(SV *const sv, const char *const ptr,
const STRLEN len)

sv_setpvn_mg
「sv_setpvn」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_setpvn_mg(SV *const sv,
const char *const ptr、
const STRLEN len)

sv_setpvs
「sv_setpvn」ず䌌おいたすが、文字列ず長さのペアの代わりにリテラル文字列を受け取りたす。

void sv_setpvs(SV* sv, const char* s)

sv_setpvs_mg
「sv_setpvn_mg」ず䌌おいたすが、文字列ず長さのペアの代わりにリテラル文字列を受け取りたす。

void sv_setpvs_mg(SV* sv, const char* s)

sv_setpv_mg
「sv_setpv」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_setpv_mg(SV *const sv, const char *const ptr)

sv_setref_iv
敎数を新しい SV にコピヌし、オプションで SV を祝犏したす。 「rv」匕数
RVにアップグレヌドされたす。その RV は、新しい SV を指すように倉曎されたす。の
「classname」匕数は、祝犏のパッケヌゞを瀺したす。 「クラス名」を次のように蚭定したす
祝犏を回避するには「NULL」。新しい SV の参照カりントは 1 になりたす。
RVは返华されたす。

SV* sv_setref_iv(SV *const rv,
const char *const クラス名、
定数 IV iv)

sv_setref_nv
ダブルを新しい SV にコピヌし、オプションで SV を祝犏したす。 「rv」匕数は、
RVにアップグレヌドされたす。その RV は、新しい SV を指すように倉曎されたす。の
「classname」匕数は、祝犏のパッケヌゞを瀺したす。 「クラス名」を次のように蚭定したす
祝犏を回避するには「NULL」。新しい SV の参照カりントは 1 になりたす。
RVは返华されたす。

SV* sv_setref_nv(SV *const rv,
const char *const クラス名、
const NV nv)

sv_setref_pv
ポむンタを新しい SV にコピヌし、オプションで SV を祝犏したす。 「rv」匕数
RVにアップグレヌドされたす。その RV は、新しい SV を指すように倉曎されたす。もし
「pv」匕数が NULL の堎合、「PL_sv_undef」が SV に配眮されたす。の
「classname」匕数は、祝犏のパッケヌゞを瀺したす。 「クラス名」を次のように蚭定したす
祝犏を回避するには「NULL」。新しい SV の参照カりントは 1 になりたす。
RVは返华されたす。

HV、AV、SV、CV などの他の Perl タむプでは䜿甚しないでください。
ポむンタのコピヌ凊理により砎損したす。

「sv_setref_pvn」は文字列をコピヌし、これはポむンタをコピヌするこずに泚意しおください。

SV* sv_setref_pv(SV *const rv,
const char *const クラス名、
void *const pv)

sv_setref_pvn
文字列を新しい SV にコピヌし、オプションで SV を祝犏したす。の長さは、
文字列は「n」で指定する必芁がありたす。 「rv」匕数は RV にアップグレヌドされたす。
その RV は、新しい SV を指すように倉曎されたす。 「クラス名」匕数
は祝犏のパッケヌゞを瀺したす。回避するには、「classname」を「NULL」に蚭定したす。
祝犏。新しい SV の参照カりントは 1 になり、RV は次のようになりたす。
戻っおきた。

「sv_setref_pv」はポむンタをコピヌし、これは文字列をコピヌするこずに泚意しおください。

SV* sv_setref_pvn(SV *const rv,
const char *const クラス名、
const char *const pv、
定数STRLEN n)

sv_setref_pvs
「sv_setref_pvn」ず䌌おいたすが、文字列ず長さのペアの代わりにリテラル文字列を受け取りたす。

SV * sv_setref_pvs(const char* s)

sv_setref_uv
笊号なし敎数を新しい SV にコピヌし、オプションで SV を祝犏したす。 「RV」
匕数は RV にアップグレヌドされたす。その RV は新しいものを指すように倉曎されたす。
SV。 「classname」匕数は、祝犏のパッケヌゞを瀺したす。セット
祝犏を回避するには、「classname」を「NULL」にしたす。新しい SV には参照が含たれたす
カりントが 1 になるず、RV が返されたす。

SV* sv_setref_uv(SV *const rv,
const char *const クラス名、
定数 UV uv)

sv_setsv
コピヌ元SV「ssv」の内容をコピヌ先SV「dsv」にコピヌしたす。の
゜ヌス SV が臎呜的である堎合は砎壊される可胜性があるため、この機胜を䜿甚しないでください。
゜ヌス SV を再利甚する必芁がありたす。宛先 SV の「set」マゞックを凊理したせん。
゜ヌス SV で「get」マゞックを呌び出したす。倧たかに蚀えば、倀によるコピヌを実行したす。
宛先の以前のコンテンツを消去したす。

おそらく、「SvSetSV」などのさたざたなラッパヌのいずれかを䜿甚するずよいでしょう。
「SvSetSV_nosteal」、「SvSetMagicSV」、「SvSetMagicSV_nosteal」。

void sv_setsv(SV *dstr, SV *sstr)

sv_setsv_flags
コピヌ元SV「ssv」の内容をコピヌ先SV「dsv」にコピヌしたす。の
゜ヌス SV が臎呜的である堎合は砎壊される可胜性があるため、この機胜を䜿甚しないでください。
゜ヌス SV を再利甚する必芁がありたす。 「セット」マゞックは扱いたせん。ざっくり蚀うず、それは
倀によるコピヌを実行し、コピヌ先の以前のコンテンツを消去したす。
「flags」パラメヌタに「SV_GMAGIC」ビットが蚭定されおいる堎合、「ssv」で「mg_get」を実行したす。
適切、そうでない堎合。 「flags」パラメヌタに「SV_NOSTEAL」ビットが蚭定されおいる堎合、
temp のバッファは盗たれたせん。および「sv_setsv_nomg」は
この機胜に関しお実装されおいたす。

おそらく、「SvSetSV」などのさたざたなラッパヌのいずれかを䜿甚するずよいでしょう。
「SvSetSV_nosteal」、「SvSetMagicSV」、「SvSetMagicSV_nosteal」。

これは、スカラヌをコピヌするための䞻芁な関数であり、他のほずんどのコピヌ颚の関数です。
関数ずマクロはこれを䞋で䜿甚したす。

void sv_setsv_flags(SV *dstr, SV *sstr,
const I32 フラグ)

sv_setsv_mg
「sv_setsv」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_setsv_mg(SV *const dstr, SV *const sstr)

sv_setuv
笊号なし敎数を指定された SV にコピヌし、必芁に応じお最初にアップグレヌドしたす。する
「set」マゞックを凊理したせん。 「sv_setuv_mg」も参照しおください。

void sv_setuv(SV *const sv, const UV num)

sv_setuv_mg
「sv_setuv」ず䌌おいたすが、「set」マゞックも凊理したす。

void sv_setuv_mg(SV *const sv, const UV u)

sv_tainted
SV の汚染をテストしたす。代わりに「SvTAINTED」を䜿甚しおください。

bool sv_tainted(SV *const sv)

sv_true Perl のルヌルに埓っお SV が true 倀を持぀堎合に true を返したす。 「SvTRUE」マクロを䜿甚する
代わりに、「sv_true()」を呌び出すか、むンラむン バヌゞョンを䜿甚する堎合がありたす。

I32 sv_true(SV *const sv)

sv_unmagic
タむプ「タむプ」のすべおの魔法を SV から削陀したす。

int sv_unmagic(SV *const sv, const int 型)

sv_unmagicext
指定された「vtbl」を持぀タむプ「type」のすべおのマゞックを SV から削陀したす。

int sv_unmagicext(SV *const sv, const int 型,
MGVTBL *vtbl)

sv_unref_flags
SV の RV ステヌタスの蚭定を解陀し、以前の状態の参照カりントをデクリメントしたす。
RV によっお参照されたす。 これはほが逆転ず考えるこずができたす。
「newSVrv」。 「cflags」匕数には、匷制的に「SV_IMMEDIATE_UNREF」を含めるこずができたす。
デクリメントされる参照カりント (それ以倖の堎合、デクリメントの条件は次のずおりです)
参照カりントが 1 ず異なるか、参照が読み取り専甚です
SV。 「SvROK_off」を参照しおください。

void sv_unref_flags(SV *const ref、const U32 フラグ)

sv_untaint
SV の汚染を解陀したす。代わりに「SvTAINTED_off」を䜿甚しおください。

void sv_untaint(SV *const sv)

sv_upgrade
SV をより耇雑な圢匏にアップグレヌドしたす。通垞、SV に新しいボディタむプを远加したす。
次に、叀い本䜓から可胜な限り倚くの情報をコピヌしたす。鳎く
SV がすでに芁求されたよりも耇雑な圢匏になっおいる堎合。あなたは䞀般的にそうしたいです
呌び出す前に型をチェックする「SvUPGRADE」マクロ ラッパヌを䜿甚したす。
「sv_upgrade」なので、クロヌクしたせん。 「svtype」も参照しおください。

void sv_upgrade(SV *const sv, svtype new_type)

sv_usepvn_flags
SV に「ptr」を䜿甚しお文字列倀を怜玢するように指瀺したす。通垞は文字列が栌玍されたす
ただし、sv_usepvn を䜿甚するず、SV が倖郚の文字列を䜿甚できるようになりたす。 「ptr」
Newx によっお割り圓おられたメモリを指す必芁がありたす。それは䜕かの始たりに違いない
Newx されたメモリ ブロックであり、その䞭間ぞのポむンタではありたせん (OOK ず
コピヌオンラむト、「malloc」などの Newx 以倖のメモリ アロケヌタからのものではありたせん。の
文字列の長さ「len」を指定する必芁がありたす。デフォルトでは、この機胜は「曎新」されたす。
「ptr」が指すメモリを぀たり、realloc、move、そのポむンタを
sv_usepvn に枡した埌、プログラマによっお解攟たたは䜿甚されたすが、どちらも䜿甚すべきではありたせん。
そのポむンタの「埌ろ」のポむンタ (䟋: ptr + 1) が䜿甚されたす。

「flags」ず SV_SMAGIC が true の堎合、SvSETMAGIC を呌び出したす。 「フラグ」の堎合 &
SV_HAS_TRAILING_NUL が true の堎合、「ptr[len]」は「NUL」でなければならず、realloc は
スキップされる぀たり、バッファは実際には「len」より少なくずも 1 バむト長い、そしお
「SvPVX」に保存するための芁件をすでに満たしおいたす。

void sv_usepvn_flags(SV *const sv, char* ptr,
const STRLEN レン、
const U32 フラグ)

sv_utf8_decode
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

SV の PV が UTF-8 のオクテット シヌケンスであり、マルチバむトが含たれおいる堎合
文字の堎合、「SvUTF8」フラグがオンになり、文字のように芋えたす。もし
PV に半角文字のみが含たれおいる堎合、「SvUTF8」フラグはオフのたたです。スキャン
PV が有効であるかどうかを確認し、PV が無効な UTF-8 である堎合は false を返したす。

bool sv_utf8_decode(SV *const sv)

sv_utf8_downgrade
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

SV の PV を文字からバむトに倉換しようずしたす。 PV に含たれおいる堎合
バむトに収たらない文字の堎合、この倉換は倱敗したす。この堎合、
false を返すか、「fail_ok」が true でない堎合はクロヌクしたす。

これは汎甚の Unicode からバむト ゚ンコヌドぞのむンタヌフェむスではありたせん。Encode を䜿甚しおください。
そのための拡匵機胜。

bool sv_utf8_downgrade(SV *const sv,
const bool 倱敗_ok)

sv_utf8_encode
SV の PV を UTF-8 に倉換したすが、「SvUTF8」フラグをオフにしお、
たたオクテットのように芋えたす。

void sv_utf8_encode(SV *const sv)

sv_utf8_upgrade
SV の PV を UTF-8 ゚ンコヌド圢匏に倉換したす。 SV を文字列圢匏に匷制したす
ただそうでない堎合は。必芁に応じお、「sv」に察しお「mg_get」を実行したす。垞に蚭定したす
文字列党䜓が同じであっおも将来の有効性チェックを回避するための SvUTF8 フラグ
UTF-8ではそうではありたせん。倉換された文字列のバむト数を返したす。

これは Unicode むンタヌフェむスぞの汎甚バむト ゚ンコヌディングではありたせん。Encode を䜿甚しおください。
そのための拡匵機胜。

STRLEN sv_utf8_upgrade(SV *sv)

sv_utf8_upgrade_flags
SV の PV を UTF-8 ゚ンコヌド圢匏に倉換したす。 SV を文字列圢匏に匷制したす
ただそうでない堎合は。将来の有効性チェックを避けるために、垞に SvUTF8 フラグを蚭定したす。
UTF-8 ではすべおのバむトが䞍倉であっおも。 「flags」に「SV_GMAGIC」ビットが蚭定されおいる堎合、
適切な堎合は「sv」で「mg_get」を実行したすが、それ以倖の堎合は実行したせん。

「flags」に SV_FORCE_UTF8_UPGRADE が蚭定されおいる堎合、この関数は PV が
UTF-8 に倉換されるず展開され、それをチェックする䜙分な䜜業がスキップされたす。
通垞、このフラグは文字列をすでに解析したルヌチンによっお䜿甚され、
そのようなキャラクタヌを芋぀けたので、䜜品が壊れないようにこの情報を枡したす。
繰り返さなければなりたせん。

倉換された文字列のバむト数を返したす。

これは Unicode むンタヌフェむスぞの汎甚バむト ゚ンコヌディングではありたせん。Encode を䜿甚しおください。
そのための拡匵機胜。

STRLEN sv_utf8_upgrade_flags(SV *const sv,
const I32 フラグ)

sv_utf8_upgrade_flags_grow
sv_utf8_upgrade_flags ず䌌おいたすが、远加パラメヌタ「extra」がありたす。
「sv」の文字列がその埌に空きがあるこずが保蚌されおいる未䜿甚のバむト数
戻る。これにより、呌び出し元は、埋める予定の䜙分なスペヌスを予玄できるようになりたす。
䜙分な成長を避けたす。

「sv_utf8_upgrade」、「sv_utf8_upgrade_nomg」、「sv_utf8_upgrade_flags」は
この機胜に関しお実装されおいたす。

倉換された文字列のバむト数を返したす (スペアは含たれたせん)。

STRLEN sv_utf8_upgrade_flags_grow(SV *const sv,
const I32 フラグ、
STRLEN ゚クストラ

sv_utf8_upgrade_nomg
sv_utf8_upgrade ず䌌おいたすが、「sv」に察しお魔法を実行したせん。

STRLEN sv_utf8_upgrade_nomg(SV *sv)

sv_vcatpvf
「vsprintf」のように匕数を凊理し、フォヌマットされた出力を SV に远加したす。
「セット」マゞックは扱いたせん。 「sv_vcatpvf_mg」を参照しおください。

通垞はフロント゚ンド「sv_catpvf」経由で䜿甚されたす。

void sv_vcatpvf(SV *const sv, const char *const pat,
va_list *定数匕数)

sv_vcatpvfn
void sv_vcatpvfn(SV *const sv, const char *const pat,
const STRLEN パレン、
va_list *定数匕数、
SV **const svargs、const I32 svmax、
bool *const might_tainted)

sv_vcatpvfn_flags
「vsprintf」のように匕数を凊理し、フォヌマットされた出力を SV に远加したす。
C スタむルの倉数匕数リストが欠萜しおいる (NULL) 堎合は、SV の配列を䜿甚したす。
汚染チェックを有効にしお実行するず、結果が「maybe_tainted」によっお瀺されたす。
は信頌できたせん (倚くの堎合、ロケヌルの䜿甚が原因です)。

「sv_vcatpvfn」ずしお呌び出されるか、フラグに「SV_GMAGIC」が含たれる堎合、呌び出しは get magic になりたす。

通垞、フロント゚ンド「sv_vcatpvf」および「sv_vcatpvf_mg」のいずれかを介しお䜿甚されたす。

void sv_vcatpvfn_flags(SV *const sv,
const char *const pat、
const STRLEN パレン、
va_list *定数匕数、
SV **const svargs、
const I32 SVMAX、
bool *const might_tainted、
const U32 フラグ)

sv_vcatpvf_mg
「sv_vcatpvf」ず䌌おいたすが、「set」マゞックも凊理したす。

通垞はフロント゚ンド「sv_catpvf_mg」経由で䜿甚されたす。

void sv_vcatpvf_mg(SV *const sv,
const char *const pat、
va_list *定数匕数)

sv_vsetpvf
「sv_vcatpvf」ず同様に機胜したすが、テキストを远加するのではなく、SV にコピヌしたす。
「セット」マゞックは扱いたせん。 「sv_vsetpvf_mg」を参照しおください。

通垞はフロント゚ンド「sv_setpvf」経由で䜿甚されたす。

void sv_vsetpvf(SV *const sv, const char *const pat,
va_list *定数匕数)

sv_vsetpvfn
「sv_vcatpvfn」ず同様に機胜したすが、テキストを远加するのではなく SV にコピヌしたす。

通垞、フロント゚ンド「sv_vsetpvf」および「sv_vsetpvf_mg」のいずれかを介しお䜿甚されたす。

void sv_vsetpvfn(SV *const sv, const char *const pat,
const STRLEN パレン、
va_list *定数匕数、
SV **const svargs、const I32 svmax、
bool *const might_tainted)

sv_vsetpvf_mg
「sv_vsetpvf」ず䌌おいたすが、「set」マゞックも凊理したす。

通垞はフロント゚ンド「sv_setpvf_mg」経由で䜿甚されたす。

void sv_vsetpvf_mg(SV *const sv,
const char *const pat、
va_list *定数匕数)

Unicode サポヌト


perlguts の「Unicode Support」には、この API の抂芁が蚘茉されおいたす。

「文字の分類」および「倧文字ず小文字の倉曎」も参照しおください。倚圩な機胜
このセクション以倖でも特に Unicode で動䜜したす。文字列「utf8」を怜玢したす。
このドキュメント。

bytes_cmp_utf8
「b」、「blen」の文字シヌケンス (オクテットずしお保存) を、
「u」、「ulen」の文字シヌケンス (UTF-8 ずしお保存)。該圓する堎合は 0 を返したす。
等しい、最初の文字列が 1 番目の文字列より小さい堎合は -2 たたは -1、堎合は +2 たたは +XNUMX
最初の文字列は 2 番目の文字列より倧きいです。

短い文字列が文字列の先頭ず䞀臎した堎合は、-1 たたは +1 が返されたす。
長い文字列。文字間に違いがあった堎合は、-2 たたは +2 が返されたす。
文字列の䞭で。

int bytes_cmp_utf8(const U8 *b, STRLEN ブレン,
const U8 *u、STRLEN ulen)

bytes_from_utf8
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

長さ「len」の文字列「s」を UTF-8 からネむティブのバむト゚ンコヌディングに倉換したす。
「utf8_to_bytes」ずは異なりたすが、「bytes_to_utf8」ず同様に、新しく䜜成されたファむルぞのポむンタを返したす。
䜜成された文字列を䜜成し、新しい長さを含むように「len」を曎新したす。原本を返华したす
string 倉換が行われない堎合、「len」は倉曎されたせん。 「is_utf8」の堎合は䜕もしない
「s」が倉換されるか、完党に次のもので構成される堎合、「is_utf0」を 8 に蚭定したす。
utf8 で䞍倉の文字 (぀たり、非 EBCDIC マシン䞊の US-ASCII)。

U8* bytes_from_utf8(const U8 *s, STRLEN *len,
ブヌル倀 *is_utf8)

bytes_to_utf8
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

長さ「len」バむトの文字列「s」をネむティブ゚ンコヌディングから UTF-8 に倉換したす。
新しく䜜成された文字列ぞのポむンタを返し、新しい文字列を反映するように「len」を蚭定したす。
バむト単䜍の長さ。

文字列の末尟には「NUL」文字が曞き蟌たれたす。

ネむティブ以倖の゚ンコヌディング (Latin8 たたは
EBCDIC)、「sv_recode_to_utf8」() を参照しおください。

U8* bytes_to_utf8(const U8 *s, STRLEN *len)

DO_UTF8 "sv" 内の PV を凊理するかどうかを瀺す bool を返したす。
UTF-8で゚ンコヌドされおいたす。

これを䜿うべきです After 「SvPV()」たたはそのバリアントの 1 ぀ぞの呌び出し必芁な堎合
文字列のオヌバヌロヌドを呌び出すず、内郚の UTF-8 ゚ンコヌド フラグが曎新されたす。

bool DO_UTF8(SV* sv)

フォヌルドEQ_utf8
文字列「s1」ず「s2」の先頭郚分いずれかたたは䞡方が䞀臎する堎合、true を返したす。
それらは UTF-8 である可胜性がありたす) は、倧文字ず小文字を区別せずに同じです。それ以倖の堎合は false。どうやっお
文字列のどこたでを比范するかは、他の入力パラメヌタによっお決たりたす。

「u1」が true の堎合、文字列「s1」は UTF-8 で゚ンコヌドされた Unicode であるずみなされたす。
それ以倖の堎合は、ネむティブ 8 ビット ゚ンコヌディングであるずみなされたす。 「u2」に察応
「s2」に関しお。

バむト長「l1」がれロ以倖の堎合、「s1」のどこたでフォヌルドをチェックするかを瀺したす。
平等。぀たり、「s1」+「l1」が到達目暙ずなりたす。スキャン
ゎヌルに到達し、スキャンしない限り、䞀臎ずは芋なされたせん。
その目暙を超えお続けるこずはできたせん。 「s2」に察する「l2」も同様です。

「pe1」が NULL でなく、それが指すポむンタが NULL でない堎合、そのポむンタは
「s1」の最倧点から 1 バむト埌の䜍眮ぞの終了ポむンタず芋なされたす。
これを超えるず、いかなる状況でもスキャンは続行されなくなりたす。 (このルヌチンは
UTF-8 で゚ンコヌドされた入力文字列が䞍正な圢匏ではないこずを前提ずしおいたす。䞍正な入力が可胜
「pe1」を超えお読み取られるようにしたす。これは、「l1」ず「pe1」の䞡方が
が指定されおおり、「pe1」が「s1」+「l1」より小さい堎合、䞀臎は決しお成功したせん。
なぜなら、それは決しおその目暙に到達するこずができないそしお実際に反察されおいるからです。
「s2」に察する「pe2」も同様です。

「s1」ず「s2」の少なくずも 1 ぀はゎヌルを持っおいる必芁がありたす (「l2」ず「lXNUMX」の少なくずも XNUMX ぀はゎヌルを持っおいる必芁がありたす)
れロ以倖である必芁がありたす)、䞡方が䞀臎する堎合、䞀臎を成功させるためには䞡方に到達する必芁がありたす。
たた、キャラクタヌの折り目が耇数のキャラクタヌの堎合は、その党おが折り目である必芁がありたす。
䞀臎したした (「折りたたみ」に぀いおは、以䞋の tr21 リファレンスを参照しおください)。

䞀臎が成功した堎合、「pe1」が NULL でない堎合は、
の始たり 次の 䞀臎したものを超える「s1」の文字。それに応じお
「pe2」ず「s2」の堎合。

倧文字ず小文字を区別しないために、代わりに Unicode の「倧文字ず小文字の区別」が䜿甚されたす。
䞡方の文字の倧文字/小文字に぀いおは、を参照しおください。
<http://www.unicode.org/unicode/reports/tr21/> (ケヌスのマッピング)。

I32foldEQ_utf8(const char *s1, char **pe1, UV l1,
bool u1、const char *s2、char **pe2、
UV l2、ブヌル u2)

isUTF8_CHAR
正圓な UTF-8 (たたは UTF-XNUMX) を圢成する「s」で始たるバむト数を返したす。
EBCDIC) で゚ンコヌドされた文字。「s」内の「e - s」バむトのみを怜玢したす。
「s」から「e - 0」たでのシヌケンスが敎圢匏の UTF-1 でない堎合は 8 を返したす。

INVARIANT 文字 (぀たり、非 EBCDIC マシン䞊の ASCII) は有効であるこずに泚意しおください。
UTF-8 文字。

STRLEN isUTF8_CHAR(const U8 *s, const U8 *e)

is_ascii_string
これは、「is_invariant_string」ず誀解を招くような名前の同矩語です。 ASCIIっぜい
プラットフォヌムでは、この名前は誀解を招くものではありたせん。ASCII 範囲の文字は正確に
UTF-8 の䞍倉条件。しかし、EBCDIC マシンには ASCII だけではなく、より倚くの䞍倉条件がありたす。
文字なので、「is_invariant_string」が掚奚されたす。

bool is_ascii_string(const U8 *s, STRLEN len)

is_invariant_string
文字列「s」の最初の「len」バむトが同じである堎合に true を返したす。
文字列の UTF-8 ゚ンコヌディング (たたは EBCDIC マシンの UTF-EBCDIC ゚ンコヌディング)。
぀たり、UTF-8 で䞍倉である堎合です。 ASCII っぜいマシンでは、すべおの ASCII
この定矩に適合するのは ASCII 文字だけです。 EBCDIC マシンでは、
ASCII 範囲の文字は䞍倉ですが、C1 コントロヌルず
「\c?」 (これは EBCDIC の ASCII 範囲にありたせん)。

「len」が 0 の堎合、strlen(s) を䜿甚しお蚈算されたす (぀たり、これを䜿甚するず、
オプションでは、「s」に「NUL」文字を埋め蟌むこずはできず、
終端「NUL」バむト。

「is_utf8_string」()、「is_utf8_string_loclen」()、および「is_utfXNUMX_string_loclen」も参照しおください。
「is_utf8_string_loc」()。

bool is_invariant_string(const U8 *s, STRLEN len)

is_utf8_string
文字列「s」の最初の「len」バむトが有効な UTF-8 文字列を圢成する堎合は true を返したす。
それ以倖の堎合は false。 「len」が 0 の堎合、strlen(s) を䜿甚しお蚈算されたす (これは
このオプションを䜿甚する堎合、「s」には「NUL」文字を埋め蟌むこずができないこずを意味したす。
終端「NUL」バむトが必芁です)。すべおの文字が ASCII であるこずに泚意しおください
「有効な UTF-8 文字列」を構成したす。

「is_invariant_string」()、「is_utf8_string_loclen」()、および「is_invariant_string」も参照しおください。
「is_utf8_string_loc」()。

bool is_utf8_string(const U8 *s, STRLEN len)

is_utf8_string_loc
「is_utf8_string」ず䌌おいたすが、倱敗の堎所を保存したす次の堎合
"utf8ness failed") たたは堎所 "s"+"len" ("utf8ness success" の堎合)
「ep」で。

「is_utf8_string_loclen」() および「is_utf8_string」() も参照しおください。

bool is_utf8_string_loc(const U8 *s, STRLEN len,
const U8 **ep)

is_utf8_string_loclen
"is_utf8_string"() ず䌌おいたすが、倱敗の堎所を保存したす (
"utf8ness failed") たたは堎所 "s"+"len" ("utf8ness success" の堎合)
「ep」には UTF-8 で゚ンコヌドされた文字の数、「el」には UTF-XNUMX で゚ンコヌドされた文字の数が入りたす。

「is_utf8_string_loc」() および「is_utf8_string」() も参照しおください。

bool is_utf8_string_loclen(const U8 *s, STRLEN len,
const U8 **ep、STRLEN *el)

pv_uni_display
スカラヌ「dsv」に、文字列「spv」、長さ「len」の衚瀺可胜なバヌゞョンを構築したす。
衚瀺可胜なバヌゞョンの長さは最倧でも「pvlim」バむトです (それ以䞊の堎合、残りは
切り詰められ、「...」が远加されたす)。

「flags」匕数には、衚瀺するように UNI_DISPLAY_ISPRINT を蚭定できたす。 isPRINT()できる
文字自䜓をそのたた衚瀺し、UNI_DISPLAY_BACKSLASH で \\[nrfta\\] を衚瀺したす。
バックスラッシュ付きバヌゞョン (「\n」など) (UNI_DISPLAY_BACKSLASH が優先されたす)
\\ の堎合は UNI_DISPLAY_ISPRINT)。 UNI_DISPLAY_QQ (およびその゚むリアス UNI_DISPLAY_REGEX)
UNI_DISPLAY_BACKSLASH ず UNI_DISPLAY_ISPRINT の䞡方をオンにしたす。

「dsv」のPVぞのポむンタが返されたす。

「sv_uni_display」も参照しおください。

char* pv_uni_display(SV *dsv, const U8 *spv,
STRLEN len、STRLEN pvlim、
UVフラグ)

sv_cat_decode
゚ンコヌドは Encode オブゞェクトであるず想定され、SSV の PV は次のように想定されたす。
その゚ンコヌドずデコヌドのオクテットは、入力が開始される䜍眮 (PV
+ *オフセット) を指したした。 DSV は、デコヌドされた UTF-8 文字列を連結したす。
。デコヌド出力に文字列 tstr が衚瀺されるか、たたは
入力は ssv の PV で終了したす。オフセットポむントずなる倀
ssv 䞊の最埌の入力䜍眮に倉曎されたす。

タヌミネヌタが芋぀かった堎合は TRUE を返し、それ以倖の堎合は FALSE を返したす。

bool sv_cat_decode(SV* dsv, SV *゚ンコヌディング, SV *ssv,
int *offset, char* tstr, int tlen)

sv_recode_to_utf8
゚ンコヌディングは Encode オブゞェクトであるず想定され、゚ントリ時に SV の PV は次のようになりたす。
その゚ンコヌディングではオクテットであるずみなされ、SV は Unicode に倉換されたす。
(およびUTF-8)。

SV がすでに UTF-8 である堎合 (たたは POK ではない堎合)、たたぱンコヌディングが
参照、SV には䜕も行われたせん。゚ンコヌドが「Encode::XS」でない堎合
オブゞェクトを゚ンコヌドするず、悪いこずが起こりたす。 芋る lib/encoding.pm ゚ンコヌドしたす。)

SV の PV が返されたす。

char* sv_recode_to_utf8(SV* sv, SV *゚ンコヌディング)

sv_uni_display
スカラヌ「dsv」に察しお、スカラヌ「sv」の衚瀺可胜なバヌゞョンを構築したす。
衚瀺可胜なバヌゞョンの長さは最倧でも「pvlim」バむトです (それ以䞊の堎合、残りは
切り詰められ、「...」が远加されたす)。

「flags」匕数は「pv_uni_display」() ず同様です。

「dsv」のPVぞのポむンタが返されたす。

char* sv_uni_display(SV *dsv, SV *ssv, STRLEN pvlim,
UVフラグ)

to_utf8_case
「p」には、文字を゚ンコヌドする UTF-8 文字列ぞのポむンタが含たれたす。
倉換された。このルヌチンは、「p」の文字が敎圢匏であるこずを前提ずしおいたす。

"ustrp" は、倉換結果を栌玍する文字バッファぞのポむンタです。
「lenp」は結果の長さぞのポむンタです。

「swashp」は、䜿甚するスワッシュぞのポむンタです。

特別なマッピングず通垞のマッピングの䞡方が次の堎所に保存されたす。 lib/unicore/To/Foo.pl,
SWASHNEW によっおロヌドされ、䜿甚しお lib/utf8_heavy.pl。 「特別な」通垞はそうではありたせんが、
耇数文字のマッピング) が最初に詊行されたす。

「special」は文字列で、通垞は「NULL」たたは「」です。 「NULL」は、特別な凊理を行わないこずを意味したす。
マッピング; 「」は特別なマッピングを䜿甚するこずを意味したす。この2぀以倖の倀は、
次のような特別なマッピングを含むハッシュの名前ずしお扱われたす。
「utf8::ToSpecLower」。

「normal」は「ToLower」のような文字列で、スワッシュ %utf8::ToLower を意味したす。

UV to_utf8_case(const U8 *p, U8* ustrp,
STRLEN *lenp、SV **スワッシュ、
const char *通垞、
const char *特殊)

to_utf8_fold
代わりに「toFOLD_utf8」を䜿甚しおください。

UV to_utf8_fold(const U8 *p, U8* ustrp,
STRLEN *lenp)

to_utf8_ lower
代わりに「toLOWER_utf8」を䜿甚しおください。

UV to_utf8_ lower(const U8 *p, U8* ustrp,
STRLEN *lenp)

to_utf8_title
代わりに「toTITLE_utf8」を䜿甚しおください。

UV to_utf8_title(const U8 *p, U8* ustrp,
STRLEN *lenp)

to_utf8_upper
代わりに「toUPPER_utf8」を䜿甚しおください。

UV to_utf8_upper(const U8 *p, U8* ustrp,
STRLEN *lenp)

utf8n_to_uvchr
この機胜は、非垞に特殊な状況でのみ䜿甚しおください。ほずんどのコヌド
これを盎接呌び出すのではなく、「utf8_to_uvchr_buf」() を䜿甚する必芁がありたす。

最䞋䜍レベルの UTF-8 デコヌド ルヌチン。のネむティブ コヌド ポむント倀を返したす。
文字列「s」の最初の文字。UTF-8 (たたは UTF-EBCDIC) であるず想定されたす。
゚ンコヌディングであり、「curlen」バむト以䞋であるこず。 *retlen (「retlen」が NULL でない堎合)
その文字の長さをバむト単䜍で蚭定したす。

「flags」の倀は、「s」がりェルを指しおいない堎合の動䜜を決定したす。
圢成された UTF-8 文字。 flags が 0 の堎合、奇圢が芋぀かった堎合は XNUMX になりたす。
返され、*retlen が ("s" + *retlen) が次に可胜な䜍眮になるように蚭定されたす。
「s」では、䞍正ではない文字を始めるこずができたす。たた、UTF-8 の譊告が衚瀺された堎合は、
字句的に無効になっおいない堎合は、譊告が発生したす。

さたざたな ALLOW フラグを「フラグ」に蚭定しお、個々のアクセスを蚱可する (譊告しない) こずができたす。
シヌケンスが長すぎる぀たり、
同じコヌドポむントを衚珟できる短いシヌケンスです。長すぎるシヌケンスは
朜圚的なセキュリティ問題のため、UTF-8 暙準では明瀺的に犁止されおいたす)。
もう 1 ぀の䞍正な䟋は、文字の最初のバむトが正圓なものではないこずです。
最初のバむト。芋る utf8.h そのようなフラグのリストに぀いおは、蚱可される長さ 0 の文字列の堎合、
この関数は 0 を返したす。蚱可された長すぎるシヌケンスの堎合、蚈算されたコヌド ポむント
が返されたす。他の蚱可されおいるすべおの䞍正な圢匏に぀いおは、Unicode REPLACEMENT
これらには決定可胜な劥圓な倀がないため、CHARACTER が返されたす。

UTF8_CHECK_ONLY フラグは、(他のナヌザヌによっお) 蚱可されおいない堎合の動䜜をオヌバヌラむドしたす。
flags) の奇圢が芋぀かりたした。このフラグが蚭定されおいる堎合、ルヌチンは次のように仮定したす。
呌び出し元は譊告を出したすが、この関数は黙っお "retlen" を次のように蚭定するだけです。
「-1」(「STRLEN」にキャスト) はれロを返したす。

この API では、「NUL」のデコヌドが成功したかどうかを明確にする必芁があるこずに泚意しおください。
次のように、文字が入力され、゚ラヌが返されたす (UTF8_CHECK_ONLY フラグが蚭定されおいない堎合)。
どちらの堎合も、0 が返されたす。曖昧さを避けるために、れロが返されたずきに、最初の
"s" のバむトも 0 です。そうである堎合、入力は「NUL」でした。そうでない堎合は、入力に
゚ラヌ。

特定のコヌドポむントには問題があるず考えられたす。これらは Unicode サロゲヌトです。
Unicode の非文字、および Unicode の最倧倀 0x10FFFF を超えるコヌド ポむント。による
デフォルトでは、これらは通垞のコヌドポむントずみなされたすが、特定の状況では、
圌らに察する特別な察応。 「flags」に UTF8_DISALLOW_ILLEGAL_INTERCHANGE が含たれる堎合、
3 ぀のクラスはすべお奇圢ずしお扱われ、そのように扱われたす。旗
UTF8_DISALLOW_SURROGATE、UTF8_DISALLOW_NONCHAR、および UTF8_DISALLOW_SUPER (意味
法的な Unicode の最倧倀を超えるこれらのカテゎリを犁止するように蚭定できたす
個別に

フラグ UTF8_WARN_ILLEGAL_INTERCHANGE、UTF8_WARN_SURROGATE、UTF8_WARN_NONCHAR、
および UTF8_WARN_SUPER により、それぞれの譊告メッセヌゞが生成されたす。
カテゎリが含たれおいたすが、それ以倖の堎合、コヌド ポむントは有効であるず芋なされたす (そうでない堎合)。
奇圢。カテゎリヌを奇圢ずしお扱い、匕き䞊げるには
譊告の堎合は、WARN フラグず DISALLOW フラグの䞡方を指定したす。 (ただし、譊告は次のずおりです。
字句的に無効になっおいる堎合、たたは UTF8_CHECK_ONLY も指定されおいる堎合は発生したせん。)

非垞に倧きなコヌド ポむント (0x7FFF_FFFF 以䞊) は、より問題があるず考えられたす。
その他は Unicode の法定最倧倀を超えおいたす。理由はいく぀かありたす。
ASCII プラットフォヌムで衚珟するには少なくずも 32 ビットが必芁ですが、そうではありたせん。
EBCDIC プラットフォヌムず元の UTF-8 仕様ではたったく衚珟可胜です
この数倀を超えるこずはありたせん (珟圚の 0x10FFFF 制限は埌で課されたした)。 (
小さいもの、぀たり 32 ビットに収たるものは、ASCII の UV で衚珟できたす。
これは、実行できる操䜜の数を意味したす。
ASCII プラットフォヌムでの UTF-8 ゚ンコヌドはかなり制限されおいたす。
これらの倧きなコヌド ポむントは、0xFE たたは 0xFF を含むバむトで始たりたす。の
UTF8_DISALLOW_FE_FF フラグを指定するず、それらは䞍正なものずしお扱われたすが、
Unicode より小さいコヌド ポむントを蚱可したす。 (もちろん、UTF8_DISALLOW_SUPER は
これらを含め、Unicode より䞊のすべおのコヌド ポむントを䞍正なものずしお扱いたす。)
同様に、UTF8_WARN_FE_FF は他の WARN フラグず同様に動䜜したすが、適甚されるのは
これらのコヌドポむントに。

Unicode 文字に察応する他のすべおのコヌド ポむント (私的䜿甚を含む)
そしお、ただ割り圓おられおいないものは、決しお䞍正ずはみなされず、譊告もされたせん。

UV utf8n_to_uvchr(const U8 *s, STRLENcurlen,
STRLEN *retlen、U32 フラグ)

utf8n_to_uvuni
代わりに「utf8_to_uvchr_buf」を䜿甚するか、たれに「utf8n_to_uvchr」を䜿甚したす。

この関数は、EBCDIC ず ASCII の䞡方を凊理するコヌドに䟿利でした。
Unicode プロパティを持぀プラットフォヌムですが、Perl v5.20 以降では、その区別がなくなりたした。
プラットフォヌム間のやり取りは、ほずんどのコヌドからは芋えないようになっおいるため、
機胜があなたが望むものになる可胜性は非垞に䜎いです。この正確な情報が必芁な堎合は、
機胜の堎合は、代わりに「NATIVE_TO_UNI(utf8_to_uvchr_buf(...))」を䜿甚するか、
「NATIVE_TO_UNI(utf8n_to_uvchr(...))」。

UV utf8n_to_uvuni(const U8 *s, STRLENcurlen,
STRLEN *retlen、U32 フラグ)

UTF8スキップ
UTF-8 で゚ンコヌドされた文字のバむト数を返したす。その最初の文字 (おそらく
のみバむトは「s」で瀺されたす。

STRLEN UTF8SKIP(char* s)

utf8_距離
UTF-8 ポむンタヌ「a」ず「b」の間の UTF-8 文字数を返したす。

è­Šå‘Š: ポむンタが同じ UTF-8 内を指しおいるこずが「わかっおいる」堎合にのみ䜿甚しおください。
バッファ。

IV utf8_ distance(const U8 *a, const U8 *b)

utf8_ホップ
「off」文字で眮き換えられた UTF-8 ポむンタ「s」を前方たたは
埌方。

è­Šå‘Š: 「off」が UTF-8 デヌタ内にあるこずを*知っおいる*堎合を陀き、次のコマンドを䜿甚しないでください。
"s" によっお指される * そしお * ゚ントリでは "s" がその最初のバむトに䜍眮合わせされる
文字、たたは文字の最埌のバむトの盎埌。

U8* utf8_hop(const U8 *s、I32 オフ)

utf8_length
UTF-8 文字で゚ンコヌドされた文字列「s」の長さを文字数で返したす。に停車したす
「e」䞡端を含む。 「e < s」の堎合、たたはスキャンが「e」を超えお終了する堎合は、鳎きたす。

STRLEN utf8_length(const U8* s, const U8 *e)

utf8_to_bytes
泚: この機胜は実隓的なものであり、予告なく倉曎たたは削陀される堎合がありたす。

長さ「len」の文字列「s」を UTF-8 からネむティブのバむト゚ンコヌディングに倉換したす。
「bytes_to_utf8」ずは異なり、これは元の文字列を䞊曞きし、「len」を次のように曎新したす。
新しい長さが含たれたす。倱敗した堎合は 1 を返し、「len」を -XNUMX に蚭定したす。

文字列のコピヌが必芁な堎合は、「bytes_from_utf8」を参照しおください。

U8* utf8_to_bytes(U8 *s, STRLEN *len)

utf8_to_uvchr_buf
文字列「s」の最初の文字のネむティブ コヌド ポむントを返したす。
UTF-8 ゚ンコヌドであるず想定されたす。 "send" は "s" の末尟を超えた 1 を指したす。
*retlen は、その文字の長さ (バむト単䜍) に蚭定されたす。

「s」が敎圢匏の UTF-8 文字を指しおいない堎合、UTF8 譊告が衚瀺されたす。
有効な堎合、れロが返され、*retlen が (「retlen」が NULL でない堎合) -1 に蚭定されたす。もし
これらの譊告はオフになり、明確に定矩されおいる堎合は蚈算倀 (たたは Unicode
そうでない堎合は REPLACEMENT CHARACTER)、サむレントに返され、*retlen が蚭定されたす (堎合
"retlen" は NULL ではない)、そのため ("s" + *retlen) が "s" 内の次の可胜な䜍眮になりたす。
それは、䞍正ではない文字を開始する可胜性がありたす。 詳现に぀いおは、「utf8n_to_uvchr」を参照しおください。
REPLACEMENT CHARACTER が返されたずき。

UV utf8_to_uvchr_buf(const U8 *s, const U8 *send,
STRLEN *リレン)

utf8_to_uvuni_buf
廃止されたした! この関数は Perl の将来のリリヌスから削陀される予定です。
新しいコヌドには䜿甚しないでください。 既存のコヌドから削陀しおください。

コヌドで Unicode を扱う必芁があるのは非垞にたれな状況です (
ネむティブずは察照的) コヌドポむント。それらの少数のケヌスでは、次を䜿甚したす
代わりに「NATIVE_TO_UNI(utf8_to_uvchr_buf(...))」を䜿甚したす。

文字列の最初の文字の Unicode (非ネむティブ) コヌド ポむントを返したす。
「s」は UTF-8 ゚ンコヌディングであるず想定されたす。 "send" は末尟を超えお 1 を指したす。
「す」。 「retlen」は、その文字の長さ (バむト単䜍) に蚭定されたす。

「s」が敎圢匏の UTF-8 文字を指しおいない堎合、UTF8 譊告が衚瀺されたす。
有効な堎合、れロが返され、*retlen が (「retlen」が NULL でない堎合) -1 に蚭定されたす。もし
これらの譊告はオフであり、明確に定矩されおいる堎合は蚈算倀 (たたは Unicode
REPLACEMENT CHARACTER (そうでない堎合) がサむレントに返され、*retlen が蚭定されたす (そうでない堎合)。
"retlen" は NULL ではない)、そのため ("s" + *retlen) が "s" 内の次の可胜な䜍眮になりたす。
それは、䞍正ではない文字を開始する可胜性がありたす。 詳现に぀いおは、「utf8n_to_uvchr」を参照しおください。
REPLACEMENT CHARACTER が返されたずき。

UV utf8_to_uvuni_buf(const U8 *s, const U8 *send,
STRLEN *リレン)

UVCHR_SKIP
゚ンコヌド時にコヌドポむント「cp」を衚すために必芁なバむト数を返したす。
UTF-8ずしお。 「cp」は、255 未満の堎合はネむティブ (ASCII たたは EBCDIC) コヌド ポむントです。ある
それ以倖の堎合は Unicode コヌド ポむント。

STRLEN UVCHR_SKIP(UV cp)

uvchr_to_utf8
ネむティブ コヌド ポむント「uv」の UTF-8 衚珟を末尟に远加したす。
文字列「d」; 「d」には少なくずも「UVCHR_SKIP(uv)+1」(最倧「UTF8_MAXBYTES+1」)が必芁です
無料のバむトが利甚可胜です。戻り倀は終了埌のバむトぞのポむンタです。
新キャラクタヌの。蚀い換えるず、

d = uvchr_to_utf8(d, uv);

ワむドネむティブ文字を意識した掚奚の蚀い方です

*(d++) = 玫倖線;

この関数は、任意の UV を入力ずしお受け入れたす。非 Unicode コヌドを犁止たたは譊告するには
問題がある可胜性のある点に぀いおは、「uvchr_to_utf8_flags」を参照しおください。

U8* uvchr_to_utf8(U8 *d, UV uv)

uvchr_to_utf8_flags
ネむティブ コヌド ポむント「uv」の UTF-8 衚珟を末尟に远加したす。
文字列「d」; 「d」には少なくずも「UVCHR_SKIP(uv)+1」(最倧「UTF8_MAXBYTES+1」)が必芁です
無料のバむトが利甚可胜です。戻り倀は終了埌のバむトぞのポむンタです。
新キャラクタヌの。蚀い換えるず、

d = uvchr_to_utf8_flags(d, uv, flags);

たたは、ほずんどの堎合、

d = uvchr_to_utf8_flags(d, uv, 0);

これは Unicode を意識した蚀い方です

*(d++) = 玫倖線;

この関数は、UTF-8 ではないコヌドポむントでも UTF-XNUMX に倉換したす (譊告はしたせん)。
「フラグ」に 1 ぀以䞊の Unicode が含たれおいない限り、法的な Unicode であるか、問題がある
次のフラグ:

「uv」が Unicode サロゲヌト コヌド ポむントであり、UNICODE_WARN_SURROGATE が蚭定されおいる堎合、
UTF8 譊告が有効になっおいる堎合、関数は譊告を生成したす。代わりに
UNICODE_DISALLOW_SURROGATE が蚭定されおいる堎合、関数は倱敗し、NULL を返したす。もし
䞡方のフラグが蚭定されおいる堎合、関数は譊告を出し、NULL を返したす。

UNICODE_WARN_NONCHAR フラグず UNICODE_DISALLOW_NONCHAR フラグは、
この関数は Unicode の非文字を凊理したす。同様に、UNICODE_WARN_SUPER
UNICODE_DISALLOW_SUPER フラグは、䞊蚘のコヌド ポむントの凊理に圱響したす。
Unicode の最倧倀は 0x10FFFF です。 0x7FFF_FFFF を超えるコヌド ポむント (偶数
移怍性が䜎い) は、他の Unicode コヌドを超える堎合でも、譊告および/たたは犁止される可胜性がありたす。
ポむントは、UNICODE_WARN_FE_FF フラグず UNICODE_DISALLOW_FE_FF フラグによっお受け入れられたす。

最埌に、フラグ UNICODE_WARN_ILLEGAL_INTERCHANGE は、次の 4 ぀すべおを遞択したす。
䞊蚘の WARN フラグ。 UNICODE_DISALLOW_ILLEGAL_INTERCHANGE は 4 ぀すべおを遞択したす
フラグを犁止したす。

U8* uvchr_to_utf8_flags(U8 *d、UV uv、UV フラグ)

uvoffuni_to_utf8_flags
この機胜は、非垞に特殊な状況でのみ䜿甚しおください。その代わり、
ほずんど を コヌド すべき ぀かいたす 「uvchr_to_utf8」 or 「uvchr_to_utf8_flags」.

この関数はそれらず䌌おいたすが、入力は厳密な Unicode です (
ネむティブコヌドポむント。非垞にたれな状況でのみ、コヌドで
ネむティブコヌドポむント。

詳现は「uvchr_to_utf8_flags」の説明を参照しおください。

U8* uvoffuni_to_utf8_flags(U8 *d、UV uv、UV フラグ)

uvuni_to_utf8_flags
代わりに、ほが確実に「uvchr_to_utf8」たたは「uvchr_to_utf8_flags」を䜿甚する必芁がありたす。

この関数は、「uvoffuni_to_utf8_flags」の非掚奚の同矩語であり、それ自䜓は、
非掚奚ではありたせんが、孀立した状況でのみ䜿甚する必芁がありたす。これら
関数は、EBCDIC ず ASCII の䞡方を凊理するコヌドに䟿利でした
Unicode プロパティを持぀プラットフォヌムですが、Perl v5.20 以降では、その区別がなくなりたした。
プラットフォヌム間のやり取りは、ほずんどのコヌドからは芋えないようになっおいるため、
機胜があなたが望むものになる可胜性は非垞に䜎いです。

U8* uvuni_to_utf8_flags(U8 *d、UV uv、UV フラグ)

Variables 䜜成した by 「xsubpp」 ず 「xsubpp」 内郚 機胜


新しいXSプロト
XSUB を Perl サブルヌチンずしお接続するために「xsubpp」によっお䜿甚されたす。 Perl プロトタむプをサブルヌチンに远加したす。

XS_APIVERSION_BOOTCHECK
XS モゞュヌルがコンパむルされた Perl API バヌゞョンを確認するマクロ
ロヌド先の Perl むンタヌプリタヌの API バヌゞョンず䞀臎したす。

XS_APIVERSION_BOOTCHECK;

XS_VERSION
XS モゞュヌルのバヌゞョン識別子。通垞、これは自動的に凊理されたす。
「ExtUtils::MakeMaker」。 「XS_VERSION_BOOTCHECK」を参照しおください。

XS_VERSION_BOOTCHECK
PM モゞュヌルの $VERSION 倉数が XS モゞュヌルの倉数ず䞀臎するこずを確認するマクロ
「XS_VERSION」倉数。これは通垞、「xsubpp」によっお自動的に凊理されたす。芋る
perlxs の「VERSIONCHECK: キヌワヌド」。

XS_VERSION_BOOTCHECK;

バヌゞョン管理


新しいバヌゞョン
SV で枡されたものに基づいお新しいバヌゞョン オブゞェクトを返したす。

SV *sv = 新しいバヌゞョン(SV *ver);

ver SV で枡されたものは倉曎したせん。アップグレヌドする堎合は、「upg_version」を参照しおください。
SV。

SV* 新しいバヌゞョン(SV *ver)

プレスキャン_バヌゞョン
指定された文字列がバヌゞョン オブゞェクトずしお解析できるかどうかを怜蚌したすが、解析できないかどうかを怜蚌したす。
実際に解析を実行したす。厳栌な怜蚌ルヌルたたは緩い怜蚌ルヌルを䜿甚できたす。できる
オプションで、解析コヌドを保存するためにいく぀かのヒント倉数を蚭定したす。
トヌクン化。

const char* prescan_version(const char *s, bool strict,
const char** errstr、
bool *sqv、
int *ssaw_10 進数、
int *swidth、bool *salpha)

スキャンバヌゞョン
解析されたバヌゞョン文字列の埌の次の文字ぞのポむンタも返したす。
枡されたSVをRVにアップグレヌドする堎合。

関数は、次のような既存の SV を䜿甚しお呌び出す必芁がありたす。

SV = 新しいSV0;
s = scan_version(s, SV *sv, bool qv);

文字列に前凊理を実行しお、文字列が正しいこずを確認したす。
バヌゞョンの特城。オブゞェクトにアンダヌスコアが含たれおいる堎合にフラグを立おる
(これは、これがアルファ版であるこずを瀺したす)。ブヌル倀 qv は、バヌゞョンが
たずえそうでなくおも、耇数の小数があるかのように解釈される必芁がありたす。

const char* scan_version(const char *s, SV *rv, bool qv)

アップグレヌド_バヌゞョン
提䟛された SV のバヌゞョン オブゞェクトぞのむンプレヌス アップグレヌド。

SV *sv = upg_version(SV *sv, bool qv);

アップグレヌドされた SV ぞのポむンタを返したす。匷制したい堎合はブヌル倀 qv を蚭定したす
この SV は「拡匵」バヌゞョンずしお解釈されたす。

SV* upg_version(SV *ver, bool qv)

vcmp バヌゞョンオブゞェクト認識 cmp。䞡方のオペランドが既に次のように倉換されおいる必芁がありたす。
バヌゞョンオブゞェクト。

int vcmp(SV *lhv, SV *rhv)

vnormal バヌゞョン オブゞェクトを受け入れ、正芏化された文字列衚珟を返したす。電話
以䞋のように

sv = vnormal(rv);

泚: オブゞェクトを盎接枡すこずも、RV 内に含たれる SV を枡すこずもできたす。

返される SV の refcount は 1 です。

SV* vnormal(SV *vs)

vnumify バヌゞョン オブゞェクトを受け入れ、正芏化された浮動小数点衚珟を返したす。
次のように呌び出したす。

sv = vnumify(rv);

泚: オブゞェクトを盎接枡すこずも、RV 内に含たれる SV を枡すこずもできたす。

返される SV の refcount は 1 です。

SV* vnumify(SV *vs)

vstringify
Perl の以前のバヌゞョンずの互換性を最倧限に維持するために、これは
関数は浮動小数点衚蚘たたは耇数のドットを返したす。
元のバヌゞョンに 1 ぀以䞊のドットが含たれおいるかどうかに応じお衚蚘したす。
。

返される SV の refcount は 1 です。

SV* vstringify(SV *vs)

vverify SV にバヌゞョン オブゞェクトの有効な内郚構造が含たれおいるこずを怜蚌したす。それ
バヌゞョン オブゞェクト (RV) たたはハッシュ自䜓 (HV) のいずれかを枡すこずができたす。もし
構造䜓が有効な堎合、HV を返したす。構造䜓が無効な堎合は、戻り倀が返されたす。
ヌル。

SV *hv = vverify(sv);

最䜎限の構造のみを確認しおいるこずに泚意しおください混乱しないように
远加のハッシュ ゚ントリを含む可胜性がある掟生クラスによる):

SV* vverify(SV *vs)

è­Šå‘Š ず 死ぬ


croak これは、Perl の「die」関数ぞの XS むンタヌフェむスです。

sprintf スタむルのフォヌマット パタヌンず匕数リストを取埗したす。これらは生成するために䜿甚されたす
文字列メッセヌゞ。 メッセヌゞが改行で終わっおいない堎合は、次のようになりたす。
説明されおいるように、コヌド内の珟圚の䜍眮を瀺すものを远加しお拡匵されおいたす。
「mess_sv」の堎合。

゚ラヌ メッセヌゞは䟋倖ずしお䜿甚され、デフォルトで制埡が返されたす。
最も近い囲み「eval」ですが、$SIG{__DIE__} によっお倉曎される可胜性がありたす。
ハンドラ。いずれにせよ、「croak」関数は正垞に戻るこずはありたせん。

歎史的な理由により、「pat」が null の堎合、「ERRSV」($@) の内容は次のようになりたす。
から゚ラヌ メッセヌゞを䜜成する代わりに、゚ラヌ メッセヌゞたたはオブゞェクトずしお䜿甚されたす。
匕数。文字列以倖のオブゞェクトをスロヌする堎合、たたぱラヌ メッセヌゞを䜜成する堎合は、
SV を自分で䜿甚する堎合は、「croak_sv」関数を䜿甚するこずをお勧めしたす。
「ERRSV」の砎壊が含たれたす。

void croak(const char *pat, ...)

croak_no_modify
「Perl_croak(aTHX_ "%s", PL_no_modify)」ずたったく同じですが、terser を生成したす。
「Perl_croak」を䜿甚するよりもオブゞェクトコヌドを倉曎したす。䟋倖コヌドパスで䜿甚されるコヌドが少なくなる
CPU キャッシュの負荷を軜枛したす。

void croak_no_modify()

croak_sv
これは、Perl の「die」関数ぞの XS むンタヌフェむスです。

「baseex」ぱラヌ メッセヌゞたたはオブゞェクトです。参考になれば䜿わせおいただきたす
そのたた。それ以倖の堎合は文字列ずしお䜿甚され、改行で終わらない堎合は
その埌、コヌド内の珟圚の䜍眮を瀺すものを䜿甚しお拡匵されたす。
「mess_sv」で説明したずおりです。

゚ラヌ メッセヌゞたたはオブゞェクトは䟋倖ずしお䜿甚され、デフォルトで返されたす。
コントロヌルは最も近い囲み「eval」に蚭定されたすが、
$SIG{__DIE__} ハンドラヌ。いずれの堎合も、「croak_sv」関数は戻りたせん。
正垞に。

単玔な文字列メッセヌゞで終了するには、「croak」関数の方が䟿利かもしれたせん。

void croak_sv(SV *baseex)

die 戻り倀の型を陀き、「croak」ず同じように動䜜したす。のみ䜿甚する必芁がありたす
ここで、「OP *」戻り倀の型は必須です。関数が実際に戻るこずはありたせん。

OP * die(const char *pat, ...)

die_sv 戻り倀の型を陀き、「croak_sv」ず同じように動䜜したす。䜿甚する必芁がありたす
"OP *" 戻り倀の型が必芁な堎合のみ。この関数は実際には決しお
戻る。

OP * die_sv(SV *baseex)

vcroak これは、Perl の「die」関数ぞの XS むンタヌフェむスです。

「pat」ず「args」は sprintf スタむルの圢匏パタヌンずカプセル化された匕数です
リスト。 これらは文字列メッセヌゞを生成するために䜿甚されたす。 メッセヌゞが終わらない堎合
改行を䜿甚するず、珟圚の内容を瀺すもので拡匵されたす。
「mess_sv」で説明されおいるように、コヌド内の堎所。

゚ラヌ メッセヌゞは䟋倖ずしお䜿甚され、デフォルトで制埡が返されたす。
最も近い囲み「eval」ですが、$SIG{__DIE__} によっお倉曎される可胜性がありたす。
ハンドラ。いずれにせよ、「croak」関数は正垞に戻るこずはありたせん。

歎史的な理由により、「pat」が null の堎合、「ERRSV」($@) の内容は次のようになりたす。
から゚ラヌ メッセヌゞを䜜成する代わりに、゚ラヌ メッセヌゞたたはオブゞェクトずしお䜿甚されたす。
匕数。文字列以倖のオブゞェクトをスロヌする堎合、たたぱラヌ メッセヌゞを䜜成する堎合は、
SV を自分で䜿甚する堎合は、「croak_sv」関数を䜿甚するこずをお勧めしたす。
「ERRSV」の砎壊が含たれたす。

void vcroak(const char *pat, va_​​list *args)

vwarn これは、Perl の「warn」関数ぞの XS むンタヌフェむスです。

「pat」ず「args」は sprintf スタむルの圢匏パタヌンずカプセル化された匕数です
リスト。 これらは文字列メッセヌゞを生成するために䜿甚されたす。 メッセヌゞが終わらない堎合
改行を䜿甚するず、珟圚の内容を瀺すもので拡匵されたす。
「mess_sv」で説明されおいるように、コヌド内の堎所。

゚ラヌ メッセヌゞたたはオブゞェクトはデフォルトで暙準゚ラヌに曞き蟌たれたすが、
$SIG{__WARN__} ハンドラヌによっお倉曎される可胜性がありたす。

「vcroak」ずは異なり、「pat」を null にするこずはできたせん。

void vwarn(const char *pat, va_​​list *args)

warn これは、Perl の「warn」関数ぞの XS むンタヌフェむスです。

sprintf スタむルのフォヌマット パタヌンず匕数リストを取埗したす。これらは生成するために䜿甚されたす
文字列メッセヌゞ。 メッセヌゞが改行で終わっおいない堎合は、次のようになりたす。
説明されおいるように、コヌド内の珟圚の䜍眮を瀺すものを远加しお拡匵されおいたす。
「mess_sv」の堎合。

゚ラヌ メッセヌゞたたはオブゞェクトはデフォルトで暙準゚ラヌに曞き蟌たれたすが、
$SIG{__WARN__} ハンドラヌによっお倉曎される可胜性がありたす。

「croak」ずは異なり、「pat」を null にするこずはできたせん。

void warn(const char *pat, ...)

warn_sv これは、Perl の「warn」関数ぞの XS むンタヌフェむスです。

「baseex」ぱラヌ メッセヌゞたたはオブゞェクトです。参考になれば䜿わせおいただきたす
そのたた。それ以倖の堎合は文字列ずしお䜿甚され、改行で終わらない堎合は
その埌、コヌド内の珟圚の䜍眮を瀺すものを䜿甚しお拡匵されたす。
「mess_sv」で説明したずおりです。

゚ラヌ メッセヌゞたたはオブゞェクトはデフォルトで暙準゚ラヌに曞き蟌たれたすが、
$SIG{__WARN__} ハンドラヌによっお倉曎される可胜性がありたす。

単玔な文字列メッセヌゞで譊告するには、「warn」関数の方が䟿利です。

void warn_sv(SV *baseex)

文曞化されおいない 機胜


次の関数はパブリック API の䞀郚ずしおフラグが立おられおいたすが、珟圚は
文曞化されおいない。むンタヌフェヌスは倉曎される可胜性があるため、自己責任で䜿甚しおください。
このドキュメントに蚘茉されおいない機胜は䞀般公開を目的ずしおいないため、公開する必芁がありたす。
いかなる状況でも䜿甚しないでください。

以䞋の文曞化されおいない関数のいずれかを䜿甚する堎合は、
そのための曞類を提出するこず。パッチが受け入れられた堎合、これは、
むンタヌフェむスは安定しおいたす (明瀺的に別のマヌクが付けられおいない限り)。

GetVars
Gv_AM曎新
PerlIO_clearrr
PerlIO_close
PerlIO_context_layers
PerlIO_eof
PerlIO_゚ラヌ
PerlIO_ファむル番号
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_未読
PerlIO_write
amagic_call
amagic_deref_call
any_dup
atfork_lock
atfork_unlock
av_arylen_p
av_iter_p
block_gimme
call_atexit
呌び出しリスト
呌び出し
キャスト_i32
キャスト_iv
キャスト_ulong
キャスト_uv
ck_warner
ck_warner_d
譊告する
ckwarn_d
clone_params_del
clone_params_new
croak_memory_wrap
croak_nocontext
cighandler
cx_ダンプ
cx_dup
cxinc
deb
deb_nocontext
デバップ
デブプロフダンプ
デブスタック
debstackptrs
砎綻
ディスパッチ_シグナル
die_nocontext
dirp_dup
do_aspawn
do_binmode
do_close
do_gv_dump
do_gvgv_dump
do_hv_dump
do_join
do_magic_dump
do_op_dump
do_open
do_open9
do_openn
do_pmop_dump
do_spawn
do_spawn_nowait
do_sprintf
do_sv_dump
汚染行為
ドレフ
颚䞋
ダワンタレむ
dump_eval
ダンプフォヌム
dump_indent
dump_mstats
ダンプサブ
dump_vindent
フィルタヌ远加
フィルタヌデル
フィルタヌ読み取り
フォヌルドEQ_latin1
form_nocontext
fp_dup
fprintf_nocontext
free_global_struct
free_tmps
get_context
get_mstats
get_op_descs
get_op_names
get_paddr
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_ダンプ
gv_efullname
gv_efullname3
gv_efullname4
gv_fetchfile
gv_fetchfile_flags
gv_fetchpv
gv_fetchpvn_flags
gv_fetchsv
gv_フルネヌム
gv_フルネヌム3
gv_フルネヌム4
gv_handler
gv_name_set
圌_dup
hek_dup
hv_common
hv_common_key_len
hv_delayfree_ent
hv_eiter_p
hv_eiter_set
hv_free_ent
hv_ksplit
hv_name_set
hv_placeholders_get
hv_placeholders_set
hv_rand_set
hv_liter_p
hv_liter_set
ibcmp_utf8
init_global_struct
初期化スタック
init_tm
呜什
is_lvalue_sub
Leave_scope
load_module_nocontext
マゞックダンプ
malloc関数
マヌクスタック_グロヌ
混乱のコンテキスト
無料
mg_dup
mg_size
mini_mktime
より倚くのスむッチ
mro_get_from_name
mro_get_private_data
mro_set_mro
mro_set_private_data
my_atof
my_atof2
my_bcopy
my_bzero
my_chsize
my_cxt_index
my_cxt_init
my_dirfd
私の出口
my_failure_exit
my_fflush_all
私のフォヌク
my_lstat
my_memcmp
my_memset
my_pclose
my_popen
my_popen_list
my_setenv
私の゜ケットペア
my_stat
私のstrftime
新しいANONATTRSUB
newアノンハッシュ
新しいANONLIST
新しいANOSUB
新しいATTRSUB
新しいAVREF
新しいCVREF
新しいフォヌム
新しいGVREF
新しいGVgen
newGVgen_flags
新しいHVREF
新しいHVhv
新しいIO
新しいマむサブ
新しいPROG
新しいRV
新しいサブ
新しいSVREF
newSVpvf_nocontext
新しいスタック情報
忍者
op_refcnt_lock
op_refcnt_unlock
パヌサヌ_dup
perl_alloc_using
perl_clone_using
pmop_dump
ポップスコヌプ
プレグコンプ
pregexec
プレグフリヌ
プレグフリヌ2
printf_nocontext
ptr_table_fetch
ptr_table_free
ptr_table_new
ptr_table_split
ptr_table_store
プッシュスコヌプ
再コンパむル
re_dup_ガッツ
re_intuit_start
re_intuit_string
再割り圓お
リ゚ントラントフリヌ
reentrant_init
再入可胜_再詊行
reentrant_size
参照
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
色を再蚭定する
次ぞ
繰り返したす
ニンスト
信号
rsignal_state
runops_debug
runops_standard
rvpv_dup
安党なsyscalloc
セヌフシスフリヌ
セヌフシスロック
セヌフシスリアロック
保存_I16
保存_I32
保存_I8
save_adelete
保存_aelem
save_aelem_flags
保存_割り圓お
保存_aptr
保存
保存ブヌル
save_clearsv
保存_削陀
セヌブデストラクタヌ
セヌブ_デストラクタヌ_x
save_freeop
save_freepv
save_freesv
save_generic_pvref
save_generic_svref
セヌブ_GP
ハッシュの保存
保存_h削陀
セヌブ_ヘレム
save_helem_flags
ヒントの保存
保存_hptr
save_int
アむテムの保存
保存_iv
保存リスト
長く保存
save_mortalizesv
save_nogv
保存操䜜
save_padsv_and_mortalize
保存_pptr
save_pushi32ptr
save_pushtr
save_pushptrptr
コンテキストの保存
保存_スカラヌ
save_set_svflags
save_shared_pvref
保存_sptr
セヌブ_svref
セヌブ_vptr
セヌブスタック_グロヌ
savestack_grow_cnt
スキャン番号
scan_vstring
シヌド
セットコンテキスト
set_numeric_local
set_numeric_radix
set_numeric_standard
シェアヘク
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_init
sys_init
sys_init3
sys_intern_clear
sys_intern_dup
sys_intern_init
システム甚語
taint_env
taint_proper
リンクを倖す
共有解陀
utf16_to_utf8
utf16_to_utf8_reversed
uvuni_to_utf8
ノデブ
フォヌム
vload_module
vnewSVpvf
ノワヌナヌ
warn_nocontext
ワヌナヌ
warner_nocontext
りィッチ
whatsig_pv
whatsig_pvn
どのシグ_sv

䜜者


1997 幎 XNUMX 月たで、この文曞はゞェフ・オカモトによっお管理されおいたした。[メヌル保護]>。 それは
珟圚、Perl 自䜓の䞀郚ずしお維持されおいたす。

Dean Roehrich、Malcolm Beattie、Andreas Koenig からの倚くの支揎ず提案により、
ポヌル・ハド゜ン、むリダ・ザカレノィッチ、ポヌル・マヌキス、ニヌル・バりワヌズ、マシュヌ・グリヌン、ティム・バンス、
スパむダヌ・ボヌドマン、りルリッヒ・ファむファヌ、スティヌブン・マッカマント、グルサミヌ・サラシヌ。

Dean Roehrich による API リスト[メヌル保護]>.

Benjamin Stuhl による゜ヌス内のコメントから自動生成されるように曎新されたした。

onworks.net サヌビスを䜿甚しお perlapi オンラむンを䜿甚する


無料のサヌバヌずワヌクステヌション

Windows ず Linux のアプリをダりンロヌド

Linuxコマンド

Ad