Re: RFC 106 (v1) Yet another lexical variable proposal: lexical variables made default

[email protected] (Ariel Scolnicov) 18 Aug 2000 17:25:39 +0300
Newsgroups perl.perl6.language.strict
Organization Compugen, Ltd.
Message-ID <[email protected]>
"J. David Blackstone" <[email protected]> writes:

[...]

>   I agree with you.  However, I am unable to find a case in which a
> package global could not be replaced with a lexical defined in the
> module's .pm file and an accessor method for it.  Even if you are
> extending a class, you can still provide this.

Modes.  Emacs Lisp uses this (I'm not convinced that's a
recommendation).  Suppose I have a flag $PKG::verbose which prints
descriptive messages to LOG if 1 (but if 2 does something else, since
bits are significant).  If it's a global, I can do this:

    {
      local $PKG::verbose = 1;
      PKG::frobnicate;
    }
    # Back to previous verbosity level

Lacking true dynamic variables, this doesn't work (although
unwind-protect, if we had that, could also provide for restoring
variables).

The best we can do is:

    {
      my $old_verbosity = PKG::get_verbose;
      PKG::set_verbose(1);
      PKG::frobnicate;
      PKG::set_verbose($old_verbosity);
    }

but that doesn't work in the presence of eval{}/die.  So you also need 
unwind-protect.

[...]

-- 
Ariel Scolnicov        |"GCAAGAATTGAACTGTAG"            | [email protected]
Compugen Ltd.          |Tel: +972-2-6795059 (Jerusalem)	\ We recycle all our Hz
72 Pinhas Rosen St.    |Tel: +972-3-7658514 (Main office)`---------------------
Tel-Aviv 69512, ISRAEL |Fax: +972-3-7658555    http://3w.compugen.co.il/~ariels