
まずは舌足らずをお詫び。
YappoLogs: Internals::SvREADONLYdanさんのただし、これではscalarしかflagをいじれません。というわけで、同様のことをXSでやるようにするモジュールを書いたというわけです。これは間違いでARRAYもHASHも弄れます。
これは、s/scalar/PV一つ/gですね。
どういうことかというと、PVAVとしてのarray, PVHVとしてのhashはread-onlyに出来ても、その中身は違うということ。
% perl -MDevel::Peek -le '@a=(1,2);Internals::SvREADONLY(@a,1);Dump \@a' SV = RV(0x1804cdc) at 0x1804cd0 REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x1812670 SV = PVAV(0x1805ca8) at 0x1812670 REFCNT = 2 FLAGS = (READONLY) ARRAY = 0x1101c50 FILL = 1 MAX = 3 ARYLEN = 0x0 FLAGS = (REAL) Elt No. 0 SV = IV(0x1804dec) at 0x1804df0 REFCNT = 1 FLAGS = (IOK,pIOK) IV = 1 Elt No. 1 SV = IV(0x1804f3c) at 0x1804f40 REFCNT = 1 FLAGS = (IOK,pIOK) IV = 2
ただし、指摘のようにInternals::SvREADONLY()
は$array[1]
や$hash{one}
も引数に取れるので、これを使うだけでXS
を使わずにConst.pmのようなことは出来ます。というか、最初の実装はそうでした。
ただし、Internals::SvREADONLY($_) for (@array)
のような、単純なPerlのループでも以外と時間がかかるもの。というわけで、List::Utilの各種関数と同じく、iterationもXS化した次第です。
それはまあいいのだけど、問題は
YappoLogs: Internals::SvREADONLYなにが言いたいかというとConstがUNAUTHORIZEDだという事
だよなあ。ImmutableとかにすればOKになる?
というわけで、何が言いたいかというと、名前募集中ということ。
Dan the Perl Monger
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。