Joe Gottman wrote: > > I just read Exegesis 4, and I have a few questions about private > variables. First, is it possible to have 2 private variables of the same > name in different functions?
No. At least, not in different functions belonging to the same namespace (i.e. module, class, or package) > For instance, what would happen in the > following code? > > sub func1() { > our $varname is private \\= 1; > return $varname; > } > > sub func2() { > our $varname is private \\= 2; Fatal error: "Private variable $varname declared in two distinct scopes". > Second, in the above code, the "\\=" operator is used to initialize the > private variable. This allows it to be initialized the first time the > function is called, but prevents it from being reinitialized subsequent > times as long as the variable never becomes undefined. But what if the > variable can become undefined? In that case, the next time you call the > function the variable will be reinitialized, whether you want it to or not. In which case, use an external declaration: { our $varname is private = 1; sub func1() { return $varname; } } or just: { my $varname = 1; sub func1() { return $varname; } } > > Both of these show that "private" variables in Perl6 do not quite replace > C or C++ static variables. It would be nice if there was some way to do > something like this: > > my $foo is static = 3; See above. > so that $foo acts like a C++ static variable, i.e. its value always persists > between calls to the function containing it, and the initialization code is > performed only once. Unfortunately, I have no idea how this would be > implemented in Perl 6. Probably like this: sub func1() { my $varname is static = 1; return $varname; } :-) But I'm still to convince Larry of the rightness of providing that extra Way To Do It. Damian