=encoding utf8 =head1 NAME =begin original perlclassguts - Internals of how C and class syntax works =end original perlclassguts - C とクラス構文の動作の内部 (訳注: (TBR)がついている段落は「みんなの自動翻訳@TexTra」による 機械翻訳です。) =head1 DESCRIPTION =begin original This document provides in-depth information about the way in which the perl interpreter implements the C syntax and overall behaviour. It is not intended as an end-user guide on how to use the feature. For that, see L. =end original この文書は、perlインタプリタがCの構文と 全体的な動作を実装する方法についての詳細な情報を提供します。 これは、機能の使用方法に関するエンドユーザガイドとして 意図されたものではありません。 それについては、Lを参照してください。 (TBR) =begin original The reader is assumed to be generally familiar with the perl interpreter internals overall. For a more general overview of these details, see also L. =end original 読者は一般的にperlインタプリタの内部全体に精通していると想定されています。 これらの詳細のより一般的な概要については、Lも参照してください。 (TBR) =head1 DATA STORAGE =head2 Classes =begin original A class is fundamentally a package, and exists in the symbol table as an HV with an aux structure in exactly the same way as a non-class package. It is distinguished from a non-class package by the fact that the C macro will return true on it. =end original クラスは基本的にパッケージであり、非クラスパッケージとまったく 同じ方法で補助構造を持つHVとしてシンボルテーブルに存在します。 Cマクロがtrueを返すという事実によって、 非クラスパッケージと区別されます。 (TBR) =begin original Extra information relating to it being a class is stored in the C structure attached to the stash, in the following fields: =end original クラスであることに関する追加情報は、stashに付加された C構造体の以下のフィールドに格納されます。 (TBR) HV *xhv_class_superclass; CV *xhv_class_initfields_cv; AV *xhv_class_adjust_blocks; PADNAMELIST *xhv_class_fields; PADOFFSET xhv_class_next_fieldix; HV *xhv_class_param_map; =over 4 =item * =begin original C will be C for a class with no superclass. It will point directly to the stash of the parent class if one has been set with the C<:isa()> class attribute. =end original スーパークラスのないクラスの場合、Cは Cになります。 C<:isa()>クラス属性で親クラスが設定されている場合は、 親クラスのstashを直接指します。 (TBR) =item * =begin original C will contain a C pointing to a function to be invoked as part of the constructor of this class or any subclass thereof. This CV is responsible for initializing all the fields defined by this class for a new instance. This CV will be an anonymous real function - i.e. while it has no name and no GV, it is I a protosub and may be directly invoked. =end original Cには、このクラスまたはその任意のサブクラスの コンストラクタの一部として呼び出される関数を指すCが含まれます。 このCVは、新しいインスタンスに対してこのクラスによって定義された すべてのフィールドを初期化する責任があります。 このCVは匿名の実関数になります。 つまり、名前もGVもありませんが、protosubではなく、直接呼び出すことができます。 (TBR) =item * =begin original C may point to an AV containing CV pointers to each of the C blocks defined on the class. If the class has a superclass, this array will additionally contain duplicate pointers of the CVs of its parent class. The AV is created lazily the first time an element is pushed to it; it is valid for there not to be one, and this pointer will be C in that case. =end original Cは、クラスで定義された各Cブロックへの CVポインタを含むAVを指す場合があります。 クラスにスーパークラスがある場合、この配列には親クラスのCVの 重複ポインタも含まれます。 AVは、エレメントが最初にプッシュされたときに遅延的に作成されます。 AVが存在しない場合は有効であり、この場合、このポインタはCになります。 (TBR) =begin original The CVs are stored directly, not via RVs. Each CV will be an anonymous real function. =end original CVはRV経由ではなく直接保存されます。 各CVは匿名の実関数になります。 (TBR) =item * =begin original C will point to a C containing Cs, each being one defined field of the class. They are stored in order of declaration. Note however, that the index into this array will not necessarily be equal to the C of each field, because in the case of a subclass, the array will begin at zero but the index of the first field in it will be non-zero if its parent class contains any fields at all. =end original Cは、Cを含むCを指します。 それぞれがクラスの定義された1つのフィールドです。 これらは宣言順に格納されます。 ただし、この配列のインデックスは各フィールドのCと 必ずしも等しくないことに注意してください。 サブクラスの場合、配列はゼロから始まりますが、その親クラスに フィールドが含まれている場合、配列の最初のフィールドのインデックスは ゼロではないからです。 (TBR) =begin original For more information on how individual fields are represented, see L. =end original 個々のフィールドの表示方法の詳細については、Lを参照してください。 (TBR) =item * =begin original C gives the field index that will be assigned to the next field to be added to the class. It is only useful at compile-time. =end original Cは、クラスに追加される次の フィールドに割り当てられるフィールドインデックスを与えます。 これはコンパイル時にのみ有効です。 (TBR) =item * =begin original C may point to an HV which maps field C<:param> attribute names to the field index of the field with that name. This mapping is copied from parent classes; each class will contain the sum total of all its parents in addition to its own. =end original Cは、フィールドC<:param>属性名をその名前を持つ フィールドのフィールドインデックスにマップするHVを指す場合があります。 このマッピングは親クラスからコピーされます。 各クラスには、独自のクラスに加えて、すべての親の合計が含まれます。 (TBR) =back =head2 Fields =begin original A field is still fundamentally a lexical variable declared in a scope, and exists in the C of its corresponding CV. Methods and other method-like CVs can still capture them exactly as they can with regular lexicals. A field is distinguished from other kinds of pad entry in that the C macro will return true on it. =end original フィールドは基本的にスコープで宣言された字句変数であり、対応する CVのCに存在します。 メソッドやその他のメソッドのようなCVは、通常のlexicalsと まったく同じようにそれらをキャプチャできます。 フィールドは、Cマクロがそれに対してtrueを 返すという点で、他の種類のパッドエントリとは区別されます。 (TBR) =begin original Extra information relating to it being a field is stored in an additional structure accessible via the C macro on the padname. This structure has the following fields: =end original フィールドであることに関連する追加情報は、padnameの Cマクロを介してアクセス可能な追加構造体に格納されます。 この構造体には、次のフィールドがあります: (TBR) PADOFFSET fieldix; HV *fieldstash; OP *defop; SV *paramname; bool def_if_undef; bool def_if_false; =over 4 =item * =begin original C stores the "field index" of the field; that is, the index into the instance field array where this field's value will be stored. Note that the first index in the array is not specially reserved. The first field in a class will start from field index 0. =end original Cは、フィールドの「フィールドインデックス」を格納します。 つまり、このフィールドの値が格納されるインスタンスフィールド配列への インデックスです。 配列の最初のインデックスは特別に予約されていないことに注意してください。 クラスの最初のフィールドは、フィールドインデックス0から始まります。 (TBR) =item * =begin original C stores a pointer to the stash of the class that defined this field. This is necessary in case there are multiple classes defined within the same scope; it is used to disambiguate the fields of each. =end original Cは、このフィールドを定義したクラスのstashへのポインタを 格納します。 これは、同じスコープ内に複数のクラスが定義されている場合に必要です。 これは、それぞれのフィールドを明確にするために使用されます。 (TBR) { class C1; field $x; class C2; field $x; } =item * =begin original C may store a pointer to a defaulting expression optree for this field. Defaulting expressions are optional; this field may be C. =end original Cは、このフィールドのデフォルト式optreeへのポインタを格納できます。 デフォルト式はオプションです。 このフィールドはCである場合があります。 (TBR) =item * =begin original C may point to a regular string SV containing the C<:param> name attribute given to the field. If none, it will be C. =end original Cは、フィールドに指定されたC<:param>name属性を含む 通常の文字列SVを指す場合があります。 属性がない場合は、Cになります。 (TBR) =item * =begin original One of C and C will be true if the defaulting expression was set using the C or C<||=> operators respectively. =end original CおよびCのいずれかは、デフォルトの 式がそれぞれC演算子またはC<|$%$%%$=>演算子を使用して 設定された場合にtrueになります。 (TBR) =back =head2 Methods =begin original A method is still fundamentally a CV, and has the same basic representation as one. It has an optree and a pad, and is stored via a GV in the stash of its containing package. It is distinguished from a non-method CV by the fact that the C macro will return true on it. =end original メソッドは基本的には依然としてCVであり、CVと同じ基本表現を持ちます。 optreeとパッドがあり、GVを介して格納パッケージのstashに格納されます。 Cマクロがtrueを返すという事実によって、 メソッド以外のCVと区別されます。 (TBR) =begin original (Note: This macro should not be confused with the one that was previously called C. That one does not relate to the class system, and was renamed to C to avoid this confusion.) =end original (注意:このマクロは、以前Cと呼ばれていたものと 混同しないようにしてください。 このマクロはクラスシステムに関連しておらず、 この混同を避けるためにCに名前が変更されました。 ) (TBR) =begin original There is currently no extra information that needs to be stored about a method CV, so the structure does not add any new fields. =end original 現在、メソッドCVに関して格納する必要のある追加情報はないため、 この構造体では新しいフィールドは追加されません。 (TBR) =head2 Instances =begin original Object instances are represented by an entirely new SV type, whose base type is C. This should still be blessed into its class stash and wrapped in an RV in the usual manner for classical object. =end original オブジェクトインスタンスは、ベースタイプがCである 完全に新しいSVタイプによって表される。 これは、依然としてそのクラスstashに祝福され、 古典的なオブジェクトのための通常の方法でRVにラップされるべきである。 (TBR) =begin original As these are their own unique container type, distinct from hashes or arrays, the core C function returns a new value when asked about these. That value is C<"OBJECT">. =end original これらはハッシュや配列とは別の独自のコンテナ型なので、 コアC関数は問い合わせに対して新しい値を返します。 その値はC<"OBJECT">です。 (TBR) =begin original Internally, such an object is an array of SV pointers whose size is fixed at creation time (because the number of fields in a class is known after compilation). An object instance stores the max field index within it (for basic error-checking on access), and a fixed-size array of SV pointers storing the individual field values. =end original 内部的には、このようなオブジェクトはSVポインタの配列であり、 そのサイズは作成時に固定されています(クラスのフィールド数は コンパイル後にわかるため)。 オブジェクトインスタンスには、最大フィールドインデックス (アクセス時の基本的なエラーチェック用)と、個々のフィールド値を 格納するSVポインタの固定サイズの配列が格納されます。 (TBR) =begin original Fields of array and hash type directly store AV or HV pointers into the array; they are not stored via an intervening RV. =end original 配列およびハッシュタイプのフィールドは、AVまたはHVポインタを 配列に直接格納します。 これらのポインタは、介在するRVを介して格納されません。 (TBR) =head1 API =begin original The data structures described above are supported by the following API functions. =end original 上記のデータ構造は、次のAPI関数でサポートされています。 (TBR) =head2 Class Manipulation =head3 class_setup_stash void class_setup_stash(HV *stash); =begin original Called by the parser on encountering the C keyword. It upgrades the stash into being a class and prepares it for receiving class-specific items like methods and fields. =end original Cキーワードを検出したときにパーサーによって呼び出されます。 stashをクラスにアップグレードし、メソッドやフィールドなどの クラス固有の項目を受信できるように準備します。 (TBR) =head3 class_seal_stash void class_seal_stash(HV *stash); =begin original Called by the parser at the end of a C block, or for unit classes its containing scope. This function performs various finalisation activities that are required before instances of the class can be constructed, but could not have been done until all the information about the members of the class is known. =end original Cブロックの最後、またはユニットクラスの場合はそれを含む スコープでパーサーによって呼び出されます。 この関数は、クラスのインスタンスを構築する前に必要なさまざまな 終了アクティビティを実行しますが、クラスのメンバに関するすべての 情報がわかるまでは実行できませんでした。 (TBR) =begin original Any additions to or modifications of the class under compilation must be performed between these two function calls. Classes cannot be modified once they have been sealed. =end original コンパイル中のクラスへの追加または変更は、これら2つの関数呼び出しの間に 実行する必要があります。 クラスは、シールされた後は変更できません。 (TBR) =head3 class_add_field void class_add_field(HV *stash, PADNAME *pn); =begin original Called by F as part of defining a new field name in the current pad. Note that this function does I create the padname; that must already be done by F. This API function simply informs the class that the new field name has been created and is now available for it. =end original 現在のパッドで新しいフィールド名を定義する一環として、 Fによって呼び出されます。 この関数はpadnameを作成<しない>ことに注意してください。 作成はFによってすでに行われている必要があります。 このAPI関数は、新しいフィールド名が作成され、使用可能になったことを クラスに通知するだけです。 (TBR) =head3 class_add_ADJUST void class_add_ADJUST(HV *stash, CV *cv); =begin original Called by the parser once it has parsed and constructed a CV for a new C block. This gets added to the list stored by the class. =end original 新しいCブロックのCVを解析して構築した後に、パーサーに よって呼び出されます。 これは、クラスによって格納されるリストに追加されます。 (TBR) =head2 Field Manipulation =head3 class_prepare_initfield_parse void class_prepare_initfield_parse(); =begin original Called by the parser just before parsing an initializing expression for a field variable. This makes use of a suspended compcv to combine all the field initializing expressions into the same CV. =end original フィールド変数の初期化式を解析する直前にパーサーによって 呼び出されます。 これは、すべてのフィールド初期化式を同じcompcvに結合するために、 一時停止されたCVを使用します。 (TBR) =head3 class_set_field_defop void class_set_field_defop(PADNAME *pn, OPCODE defmode, OP *defop); =begin original Called by the parser after it has parsed an initializing expression for the field. Sets the defaulting expression and mode of application. C should either be zero, or one of C or C depending on the defaulting mode. =end original フィールドの初期化式を解析した後に、パーサーによってコールされます。 デフォルトの式およびアプリケーションのモードを設定します。 Cは、ゼロであるか、デフォルトのモードに応じて CまたはCのいずれかである必要があります。 (TBR) =head3 padadd_FIELD #define padadd_FIELD =begin original This flag constant tells the C family of functions that the new name should be added as a field. There is no need to call C; this will be done automatically. =end original このフラグ定数は、Cファミリの関数に、新しい名前を フィールドとして追加するように指示します。 Cを呼び出す必要はありません。 これは自動的に行われます。 (TBR) =head2 Method Manipulation =head3 class_prepare_method_parse void class_prepare_method_parse(CV *cv); =begin original Called by the parser after C but immediately before doing anything else. This prepares the C for parsing a method; arranging for the C test to be true, adding the C<$self> lexical, and any other activities that may be required. =end original Cの後、他の処理を行う直前にパーサーによって 呼び出されます。 これにより、メソッドを解析するためのCが準備されます。 Cテストが真になるように調整され、C<$self>の字句が追加され、 その他の必要なアクティビティが追加されます。 (TBR) =head3 class_wrap_method_body OP *class_wrap_method_body(OP *o); =begin original Called by the parser at the end of parsing a method body into an optree but just before wrapping it in the eventual CV. This function inserts extra ops into the optree to make the method work correctly. =end original メソッド本体をoptreeに解析する最後に、ただし最終的なCVに ラップする直前に、パーサーによって呼び出されます。 この関数は、メソッドを正しく動作させるために、optreeに 追加の操作を挿入します。 (TBR) =head2 Object Instances =head3 SVt_PVOBJ #define SVt_PVOBJ =begin original An SV type constant used for comparison with the C macro. =end original Cマクロとの比較に使用するSV型の定数です。 (TBR) =head3 ObjectMAXFIELD SSize_t ObjectMAXFIELD(sv); =begin original A function-like macro that obtains the maximum valid field index that can be accessed from the C array. =end original C配列からアクセス可能な最大有効フィールドインデックスを 取得する関数型マクロ。 (TBR) =head3 ObjectFIELDS SV **ObjectFIELDS(sv); =begin original A function-like macro that obtains the fields array directly out of an object instance. Fields can be accessed by their field index, from 0 up to the maximum valid index given by C. =end original オブジェクトインスタンスから直接フィールド配列を取得する 関数型のマクロです。 フィールドは、0からCで指定された 最大有効インデックスまでのフィールドインデックスによってアクセスできます。 (TBR) =head1 OPCODES =head2 OP_METHSTART newUNOP_AUX(OP_METHSTART, ...); =begin original An C is an C which must be present at the start of a method CV in order to make it work properly. This is inserted by C, and even appears before any optree fragment associated with signature argument checking or extraction. =end original CはCであり、適切に動作させるために メソッドCVの先頭に存在する必要があります。 これはCによって挿入され、 シグニチャ引数のチェックまたは抽出に関連付けられた optreeフラグメントの前にも表示されます。 (TBR) =begin original This op is responsible for shifting the value of C<$self> out of the arguments list and binding any field variables that the method requires access to into the pad. The AUX vector will contain details of the field/pad index pairings required. =end original この操作は、C<$self>の値を引数リストからシフトし、メソッドが アクセスする必要のあるフィールド変数をパッドにバインドする 役割を果たします。 AUXベクトルには、必要なフィールド/パッドインデックスのペアの 詳細が含まれます。 (TBR) =begin original This op also performs sanity checking on the invocant value. It checks that it is definitely an object reference of a compatible class type. If not, an exception is thrown. =end original この操作では、invocant値の健全性チェックも実行されます。 互換性のあるクラス型のオブジェクト参照であることが 確実であるかどうかがチェックされます。 そうでない場合は、例外がスローされます。 (TBR) =begin original If the C field includes the C flag, this indicates that the op begins the special C CV. In this case it should additionally take the second value from the arguments list, which should be a plain HV pointer (I, not via RV). and bind it to the second pad slot, where the generated optree will expect to find it. =end original CフィールドにCフラグが含まれている場合は、 opが特殊なCCVを開始することを示します。 この場合は、引数リストから2番目の値を追加で取得する必要があります。 これは、プレーンHVポインタ(RV経由ではなくI)である 必要があります。 生成されたクラスがそれを見つけることを期待する2番目の パッドスロットにバインドします。 (TBR) =head2 OP_INITFIELD =begin original An C is only invoked as part of the C CV during the construction phase of an instance. This is the time that the individual SVs that make up the mutable fields of the instance (including AVs and HVs) are actually assigned into the C array. The C and C private flags indicate whether it is creating an AV or HV; if neither is set then an SV is created. =end original Cは、インスタンスの構築フェーズ中に CCVの一部としてのみ起動されます。 これは、インスタンスの可変フィールドを構成する個々の SV(AVおよびHVを含む)が実際にC配列に割り当てられる 時間です。 CおよびCプライベートフラグは、 AVまたはHVを作成しているかどうかを示します。 どちらも設定されていない場合は、SVが作成されます。 (TBR) =begin original If the op has the C flag it expects to find an initializing value on the stack. For SVs this is the topmost SV on the data stack. For AVs and HVs it expects a marked list. =end original OPにCフラグが設定されている場合は、スタックで初期化値が 検出されることを想定しています。 SVの場合、これはデータスタックの最上位のSVです。 AVおよびHVの場合は、マーク付きリストを想定しています。 (TBR) =head1 COMPILE-TIME BEHAVIOUR =head2 C Phasers =begin original During compiletime, parsing of an C phaser is handled in a fundamentally different way to the existing perl phasers (C, etc...) =end original コンパイル時には、Cフェイザーの構文解析は、既存の perlフェイザー(Cなど)とは根本的に異なる方法で処理されます。 (TBR) =begin original Rather than taking the usual route, the tokenizer recognises that the C keyword introduces a phaser block. The parser then parses the body of this block similarly to how it would parse an (anonymous) method body, creating a CV that has no name GV. This is then inserted directly into the class information by calling C, entirely bypassing the symbol table. =end original 通常のルートを取るのではなく、トークナイザは、Cキーワードが フェイザーブロックを導入することを認識します。 次に、パーサーは、(匿名の)メソッド本体を解析する方法と同様に、 このブロックの本体を解析し、GVという名前のないCVを作成します。 これは、Cを呼び出すことによってクラス情報に直接挿入され、 シンボルテーブルを完全にバイパスします。 (TBR) =head2 Attributes =begin original During compilation, attributes of both classes and fields are handled in a different way to existing perl attributes on subroutines and lexical variables. =end original コンパイル中、クラスとフィールドの両方の属性は、サブルーチンおよび 字句変数の既存のperl属性とは異なる方法で処理されます。 (TBR) =begin original The parser still forms an C optree of C nodes, but these are passed to the C or C functions. Rather than using a class lookup for a method in the class being parsed, a fixed internal list of known attributes is used to find functions to apply the attribute to the class or field. In future this may support user-supplied extension attribute, though at present it only recognises ones defined by the core itself. =end original パーサーは依然としてCノードのCoptreeを形成しますが、 これらはCまたは C関数に渡されます。 解析されるクラス内のメソッドのクラスルックアップを使用するのではなく、 既知の属性の固定された内部リストを使用して、クラスまたはフィールドに属性を 適用する関数を検索します。 現在はコア自体によって定義されたもののみを認識しますが、将来的には ユーザ提供の拡張属性をサポートする可能性があります。 (TBR) =head2 Field Initializing Expressions =begin original During compilation, the parser makes use of a suspended compcv when parsing the defaulting expression for a field. All the expressions for all the fields in the class share the same suspended compcv, which is then compiled up into the same internal CV called by the constructor to initialize all the fields provided by that class. =end original コンパイル時に、パーサーは、フィールドのデフォルト式を解析するときに、 中断されたcompcvを使用します。 クラス内のすべてのフィールドのすべての式は、同じ中断されたcompcvを 共有します。 このCVは、コンストラクタによって呼び出される同じ内部CVにコンパイルされ、 そのクラスによって提供されるすべてのフィールドを初期化します。 (TBR) =head1 RUNTIME BEHAVIOUR =head2 Constructor =begin original The generated constructor for a class itself is an XSUB which performs three tasks in order: it creates the instance SV itself, invokes the field initializers, then invokes the ADJUST block CVs. The constructor for any class is always the same basic shape, regardless of whether the class has a superclass or not. =end original クラス自体に対して生成されたコンストラクタは、3つのタスクを順番に 実行するXSUBです。 インスタンスSV自体を作成し、フィールドイニシャライザを呼び出し、 次にADJUSTブロックCVを呼び出します。 クラスにスーパークラスがあるかどうかにかかわらず、クラスの コンストラクタは常に同じ基本シェイプです。 (TBR) =begin original The field initializers are collected into a generated optree-based CV called the field initializer CV. This is the CV which contains all the optree fragments for the field initializing expressions. When invoked, the field initializer CV might make a chained call to the superclass initializer if one exists, before invoking all of the individual field initialization ops. The field initializer CV is invoked with two items on the stack; being the instance SV and a direct HV containing the constructor parameters. Note carefully: this HV is passed I, not via an RV reference. This is permitted because both the caller and the callee are directly generated code and not arbitrary pure-perl subroutines. =end original フィールドイニシャライザは、フィールドイニシャライザCVと呼ばれる 生成されたoptreeベースのCVに収集されます。 これは、フィールド初期化式のすべてのoptreeフラグメントを含むCVです。 呼び出されると、フィールドイニシャライザCVは、個々のフィールド初期化操作を 呼び出す前に、スーパークラスイニシャライザが存在する場合は、 スーパークラスイニシャライザへのチェーンコールを行う可能性があります。 フィールドイニシャライザCVは、スタック上の2つの項目で呼び出されます。 インスタンスSVと、コンストラクタパラメータを含む直接HVです。 注意:このHVは、RV参照を経由するのではなく、I<直接>を渡されます。 これが許可されるのは、呼び出し元と呼び出し先の両方が直接生成された コードであり、任意の純粋なperlサブルーチンではないためです。 (TBR) =begin original The ADJUST block CVs are all collected into a single flat list, merging all of the ones defined by the superclass as well. They are all invoked in order, after the field initializer CV. =end original ADJUSTブロックのCVはすべて単一のフラットリストに収集され、 スーパークラスによって定義されたすべてのCVもマージされます。 これらはすべて、フィールド初期化子CVの後に順番に呼び出されます。 (TBR) =head2 C<$self> Access During Methods =begin original When C is called, it arranges that the pad of the new CV body will begin with a lexical called C<$self>. Because the pad should be freshly-created at this point, this will have the pad index of 1. The function checks this and aborts if that is not true. =end original Cが呼び出されると、新しいCVボディのパッドが C<$self>という字句で始まるように配置されます。 パッドはこの時点で新たに作成される必要があるため、パッドのインデックスは 1になります。 この関数はこれをチェックし、trueでない場合は中止します。 (TBR) =begin original Because of this fact, code within the body of a method or method-like CV can reliably use pad index 1 to obtain the invocant reference. The C opcode also relies on this fact. =end original このため、メソッドまたはメソッド型CVの本体内のコードでは、 パッドインデックス1を使用してinvocant参照を確実に取得できます。 COpcodeもこの事実に依存しています。 (TBR) =begin original In similar fashion, during the C the next pad slot is relied on to store the constructor parameters HV, at pad index 2. =end original 同様に、Cの間、次のパッドスロットは、 パッドインデックス2でコンストラクタパラメータHVを格納するために利用される。 (TBR) =head1 AUTHORS Paul Evans =cut