On Fri, 28 Jul 00 12:28:59 +0900, Joel Rees wrote: >Does my() always operate at compile time? Does that mean that my hopes >for easy run-time allocation must be dashed? my() has both a compile time, and a runtime effect. At compile time, it takes care of scoping issues. So, you cannot possibly use a variable in fixed code, that is allocated at runtime in eval STRING. The mere fact that a variable is accessed, makes sure that it is allocated, so these would refer to different variables. At runtime, it takes care of storage allocation. An example of the confusing side effects can be seen in: $\ = "\n"; print foo(10); print foo(20); print foo(10); sub foo { my ($comp) = @_; my $test = 1 if 0; $test = 2 if $comp == 20; $test || 3; } This prints: 3 2 2 So, don't do this. In summary: you needn't worry about compile time allocation. You need the declaration at compile time, to take proper care of scoping. But only the reference to the variable is allocated until runtime, and we're talking about a few tens of bytes per variable. Memory allocation for the value only happens when you assign something to it that isn't undef, and even that is in the same region. Allocation is only a worry if you get really large scalar values, i.e. starting at a few tens of k, depending on how many variables there are. -- Bart. # ===== Want to unsubscribe from this list? # ===== Send mail with body "unsubscribe" to macperl-request@macperl.org