```{index} single: dispell; Peta::XS function ``` ```{index} single: Peta::XS::dispell; Perl function ``` # dispell Detach a wizard from the variable `$ref` points at. ## Synopsis ```perl use Peta::XS ':magic'; dispell(\$x, $w); # true if $w was attached, false otherwise ``` ## What you get back True if this wizard's attachment was found and removed, false if it was not attached. Idempotent: a second dispell of the same wizard returns false and changes nothing. ## Contract Removes exactly this wizard's attachment - other wizards on the same variable stay, and so does unrelated magic (a tie, for example). The attachment's private data is released. The `free` callback does NOT run: dispelling is detachment, not destruction; `free` fires only when the variable itself dies. ## Examples ```perl ## scoped watching: attach, observe, detach cast(\$config, $watch); run_suspicious_code(); dispell(\$config, $watch); # $config is an ordinary scalar again ## wizards detach independently cast(\$x, $w1); cast(\$x, $w2); dispell(\$x, $w1); # $w2 keeps firing say scalar magic(\$x); # 1 ``` ## See also - [`cast`](cast) - the inverse operation. - [`magic`](magic) - check what is (still) attached.