On 04/21/2015 10:37 PM, mt1957 wrote:
L.s. The following piece of code shows that one must be careful using my or state variables in a class. They have the same behavior as an our variable if I am right.
The difference is that 'our'-variables can be accessed from the outside ($A::p), 'my' and 'state'-varaibles can't.
The difference between 'my' and 'state' is that 'state' retains its state (sic) between several executions of the block, but since a class block is only executed once (while it's compiled), the distinction is moot here.
Are they all kind of global to the class/object? --- class A { my $a; has $.a; our $p; state $q; method set ($b) { $a = $b; $!a = $b+10; $p = $b+20; $q = $b+30; } method get { $!a //= 'undefined'; return "my=$a, has=$!a, our=$p, state=$q"; } } my $x = A.new; $x.set(2); # Set variables in x object say "X: ", $x.get; my $y = A.new; say "Y: ", $y.get; # Only attribute undefined $y.set(4); # Set variables in y object say "X: ", $x.get; # Modified in $x except for the attribute --- The results are; X: my=2, has=12, our=22, state=32 Y: my=2, has=undefined, our=22, state=32 X: my=4, has=12, our=24, state=34 Only the attribute is kept local to the object but all other variables are shared between $x and $y. Should one use only attributes in a class and use our variables to share between objects?
If you want per-object local storage, use attributes, yes. Cheers, Moritz