argra****@users*****
argra****@users*****
2009年 1月 4日 (日) 04:46:48 JST
Index: docs/perl/5.10.0/perlguts.pod diff -u docs/perl/5.10.0/perlguts.pod:1.3 docs/perl/5.10.0/perlguts.pod:1.4 --- docs/perl/5.10.0/perlguts.pod:1.3 Tue Dec 23 05:09:08 2008 +++ docs/perl/5.10.0/perlguts.pod Sun Jan 4 04:46:47 2009 @@ -126,10 +126,9 @@ =end original -C<STRLEN> is an integer type (Size_t, usually defined as size_t in -F<config.h>) guaranteed to be large enough to represent the size of -any string that perl can handle. -(TBT) +C<STRLEN> は perl が扱えるどんな文字列のサイズも表現するのに十分なだけの +大きさを持つことが保証されている整数型(Size_t, 普通は F<config.h> で +size_t として定義されています)。 =begin original @@ -141,12 +140,12 @@ =end original -In the unlikely case of a SV requiring more complex initialisation, you -can create an empty SV with newSV(len). If C<len> is 0 an empty SV of -type NULL is returned, else an SV of type PV is returned with len + 1 (for -the NUL) bytes of storage allocated, accessible via SvPVX. In both cases -the SV has value undef. -(TBT) +あまりなさそうですが、SV がもっと複雑な初期化を必要とする場合、 +newSV(len) で空の SV も作成できます。 +もし C<len> が 0 なら、NULL 型の空の SV が返され、さもなければ +PV 型の SV は、SvPVX でアクセスできる len + 1 (NUL のため) バイトの領域を +割り当てられて返されます。 +両方の場合で、SV の値は未定義値です。 SV *sv = newSV(0); /* no storage allocated */ SV *sv = newSV(10); /* 10 (+1) bytes of uninitialised storage allocated */ @@ -289,17 +288,18 @@ =end original -C<SvPV> マクロでは、返される文字列の長さは、変数 C<len> に格納さ -れます (これはマクロですから、C<&len> と B<しないで> ください)。 -もしデータの長さを気にしないのであれば、use the C<SvPV_nolen> macro. -Historically the C<SvPV> macro with the global variable C<PL_na> has been -used in this case. +C<SvPV> マクロでは、返される文字列の長さは、変数 C<len> に格納されます +(これはマクロですから、C<&len> と I<しないで> ください)。 +もしデータの長さを気にしないのであれば、C<SvPV_nolen> マクロを +使ってください。 +歴史的に、この場合にはグローバル変数 C<PL_na> に C<SvPV> マクロが +使われてきました。 しかしこれは可能ですが効率は良くありません; なぜなら C<PL_na> はスレッド化した Perl ではスレッドローカルな 領域にアクセスしなければならないからです。 -いずれの場合にも、NUL を含んでいたり NUL で終端されていないような文字列を -扱うことができるということを忘れないでください. -(TBT) +いずれの場合にも、Perl は NUL を含んでいる文字列と NUL で +終端されていないような文字列の両方を扱うことができるということを +覚えておいてください。 =begin original @@ -311,8 +311,8 @@ 同様に、Cで C<SvPV(s, len), len)> とすることが安全ではないことを 忘れないでください。 -これはあなたの使うコンパイラーによっては -うまくいきますが、いつでもそうだとは限らないのです。 +これはあなたの使うコンパイラによってはうまくいきますが、 +いつでもそうだとは限らないのです。 そこで、こういったステートメントは以下のように分割します: SV *s; @@ -509,10 +509,8 @@ =end original そのアドレスは、C<SV*> が必要とされるところで使用することができます。 -Make sure that -you don't try to compare a random sv with C<&PL_sv_undef>. For example -when interfacing Perl code, it'll work correctly for: -(TBT) +任意の sv を C<&PL_sv_undef> を比較しようとしないように気をつけてください。 +例えば、Perl コードとのインターフェースで、以下は正しく動きます: foo(undef); @@ -534,7 +532,7 @@ =end original 従って、sv が定義されているかをチェックするために、毎回繰り返して -SvOK() を使います。 +SvOK() を使ってください。 =begin original @@ -543,9 +541,9 @@ =end original -Also you have to be careful when using C<&PL_sv_undef> as a value in -AVs or HVs (see L<AVs, HVs and undefined values>). -(TBT) +また、AV や HV の値として C<&PL_sv_undef> を使うときにも +注意しなければなりません (L<AVs, HVs and undefined values> を +参照してください)。 =begin original @@ -1256,10 +1254,9 @@ =end original -Sometimes you have to store undefined values in AVs or HVs. Although -this may be a rare case, it can be tricky. That's because you're -used to using C<&PL_sv_undef> if you need an undefined SV. -(TBT) +AV や HV に未定義値を保管しなければならないこともあります。 +これは珍しい場合ですが、手の込んだものになります。 +なぜなら、未定義の SV が必要なら、C<&PL_sv_undef> を使うことになるからです。 =begin original @@ -1292,11 +1289,11 @@ =end original -Unfortunately, this isn't true. AVs use C<&PL_sv_undef> as a marker -for indicating that an array element has not yet been initialized. -Thus, C<exists $av[0]> would be true for the above Perl code, but -false for the array generated by the XS code. -(TBT) +残念ながら、これは正しくありません。 +AV は、配列要素がまだ初期化されていないことを示すための印として +C<&PL_sv_undef> を使います。 +従って、上述の Perl コードは C<exists $av[0]> は真ですが、 +XS コードによって生成された配列では偽です。 =begin original @@ -1304,8 +1301,7 @@ =end original -Other problems can occur when storing C<&PL_sv_undef> in HVs: -(TBT) +HV に C<&PL_sv_undef> を保管する時にも別の問題が起こりえます: hv_store( hv, "key", 3, &PL_sv_undef, 0 ); @@ -1316,9 +1312,8 @@ =end original -This will indeed make the value C<undef>, but if you try to modify -the value of C<key>, you'll get the following error: -(TBT) +実際これは C<undef> 値を作りますが、C<key> の値を変更しようとすると、 +以下のようなエラーが出ます: Modification of non-creatable hash value attempted @@ -1930,9 +1925,8 @@ は既にある SV を揮発性の SV に変換します(そして、このために C<SvREFCNT_dec> を呼び出しを遅らせます)。 三つめは、既に存在する SV の揮発性のコピーを生成します。 -Because C<sv_newmortal> gives the new SV no value,it must normally be given one -via C<sv_setpv>, C<sv_setiv>, etc. : -(TBT) +C<sv_newmortal> は値のない新しい SV を作るので、普通は +C<sv_setpv>, C<sv_setiv> などを使って作らなければなりません: SV *tmp = sv_newmortal(); sv_setiv(tmp, an_integer); @@ -2231,6 +2225,8 @@ bills. Everything not permitted is forbidden.] (TBT) + +post bills =begin original Any SV may be magical, that is, it has special features that a normal