Perl では、値は通常「不揮発な」ものです。つまり、(Perl の undef 呼び出し や、Perl 自身で他のルーティンを通じて) 明示的に解放しない限り、解放され ることはありません。
先の tzname の例では、文字列であるところの、二つの新しい SV を引数スタッ クに積むために、生成する必要がありました。しかし、これらは最終的にはスカ ラ変数を保持する SV にコピーされますから、新しい SV に永久に固執するもの ではありません。
「揮発性」の SV (あるいは、AV や HV) は、普通の「不揮発性」の SV、AV、HV と全く同じように動作しますが、「現在の文脈」でしか有効ではないものです。 Perl インタプリタが現在の文脈を離れると、揮発性の SV、AV、HV は自動的に 解放されます。一般に「現在の文脈」というのは、Perl の一つの実行文を表わ します。
揮発性の変数を生成するには、
SV* sv_newmortal() SV* sv_2mortal(SV*) SV* sv_mortalcopy(SV*)
という関数を使います。最初のものは揮発性の SV を生成し、ふたつめは、既に ある SV を揮発性の SV に変換します。三つめは、既に存在する SV の揮発性の コピーを生成します。
揮発性のルーティンは、単に SV のためだけではありません。AVや HV も、 sv_2mortal や sv_mortalcopy ルーティンに、アドレスを (SV* にキャストして) 渡すことで、揮発性にすることができます。
Go to the first, previous, next, last section, table of contents.