Revision history for autovivification
+0.07 2010-12-31 16:20 UTC
+ + Chg : perl 5.8.3 is required.
+ + Doc : Complements and clarifications.
+ + Fix : Segmentation faults and misbehaviours in threaded applications.
+ + Fix : Compatibility with perl 5.13.7.
+ Thanks Andreas J. König for reporting and Andrew Main for
+ providing a fix.
+ + Fix : Broken linkage on Windows with gcc 3.4, which appears in
+ particular when using ActivePerl's default compiler suite.
+ For those setups, the autovivification shared library will now
+ be linked against the perl dll directly (instead of the import
+ library).
+ + Opt : The pragma takes slightly more time at compile-time, but is
+ slightly faster at run-time.
+ + Tst : Lengthy tests have been ported to Test::Leaner, making the
+ whole test suite about 50% faster.
+ + Tst : Threads tests are now only run on perl 5.13.4 and higher.
+ They could segfault randomly because of what seems to be an
+ internal bug of Perl, which has been addressed in 5.13.4.
+ There is also an environment variable that allows you to
+ forcefully run those tests, but it should be set only for
+ author testing and not for end users.
+
0.06 2010-04-24 17:40 UTC
+ Add : The A_THREADSAFE and A_FORKSAFE constants.
+ Fix : [RT #56870] : "no autovivification" vs Regexp::Common.
autovivification - Lexically disable autovivification.
VERSION
- Version 0.06
+ Version 0.07
SYNOPSIS
no autovivification;
METHODS
"unimport @opts"
- Magically called when "no autovivification" is encountered. Enables the
- features given in @opts, which can be :
+ Magically called when "no autovivification @opts" is encountered.
+ Enables the features given in @opts, which can be :
* 'fetch'
- Turn off autovivification for rvalue dereferencing expressions, such
- as "$value = $hashref->{key}[$idx]{$field}", "keys
- %{$hashref->{key}}" or "values %{$hashref->{key}}". Starting from
- perl 5.11, it also covers "keys" and "values" on array references.
+ Turns off autovivification for rvalue dereferencing expressions,
+ such as :
+
+ $value = $arrayref->[$idx]
+ $value = $hashref->{$key}
+ keys %$hashref
+ values %$hashref
+
+ Starting from perl 5.11, it also covers "keys" and "values" on array
+ references :
+
+ keys @$arrayref
+ values @$arrayref
+
When the expression would have autovivified, "undef" is returned for
a plain fetch, while "keys" and "values" return 0 in scalar context
and the empty list in list context.
* 'exists'
- Turn off autovivification for dereferencing expressions that are
- parts of an "exists", such as "exists
- $hashref->{key}[$idx]{$field}". '' is returned when the expression
- would have autovivified.
+ Turns off autovivification for dereferencing expressions that are
+ parts of an "exists", such as :
+
+ exists $arrayref->[$idx]
+ exists $hashref->{$key}
+
+ '' is returned when the expression would have autovivified.
* 'delete'
- Turn off autovivification for dereferencing expressions that are
- parts of a "delete", such as "delete $hashref->{key}[$idx]{$field}".
+ Turns off autovivification for dereferencing expressions that are
+ parts of a "delete", such as :
+
+ delete $arrayref->[$idx]
+ delete $hashref->{$key}
+
"undef" is returned when the expression would have autovivified.
* 'store'
- Turn off autovivification for lvalue dereferencing expressions, such
- as "$hashref->{key}[$idx]{$field} = $value" or "for
- ($hashref->{key}[$idx]{$field}) { ... }". An exception is thrown if
- vivification is needed to store the value, which means that
- effectively you can only assign to levels that are already defined
- (in the example, this would require "$hashref->{key}[$idx]" to
- already be a hash reference).
+ Turns off autovivification for lvalue dereferencing expressions,
+ such as :
+
+ $arrayref->[$idx] = $value
+ $hashref->{$key} = $value
+ for ($arrayref->[$idx]) { ... }
+ for ($hashref->{$key}) { ... }
+ function($arrayref->[$idx])
+ function($hashref->{$key})
+
+ An exception is thrown if vivification is needed to store the value,
+ which means that effectively you can only assign to levels that are
+ already defined In the example, this would require $arrayref (resp.
+ $hashref) to already be an array (resp. hash) reference.
* 'warn'
- Emit a warning when an autovivification is avoided.
+ Emits a warning when an autovivification is avoided.
* 'strict'
- Throw an exception when an autovivification is avoided.
+ Throws an exception when an autovivification is avoided.
Each call to "unimport" adds the specified features to the ones already
in use in the current lexical scope.
When @opts is empty, it defaults to "qw/fetch exists delete/".
"import @opts"
- Magically called when "use autovivification" is encountered. Disables
- the features given in @opts, which can be the same as for "unimport".
+ Magically called when "use autovivification @opts" is encountered.
+ Disables the features given in @opts, which can be the same as for
+ "unimport".
Each call to "import" removes the specified features to the ones already
in use in the current lexical scope.
slices.
DEPENDENCIES
- perl 5.8.
+ perl 5.8.3.
+
+ A C compiler. This module may happen to build with a C++ compiler as
+ well, but don't rely on it, as no guarantee is made in this regard.
XSLoader (standard since perl 5.006).