in reply to Converting to boolean
An update ... though stuff like '=' assignments make this entirely less than obvious. Check these stats out.
use Devel::Size 'total_size'; $ARY[ $_ ] = ? for 1 .. 1_000_000; print total_size( \ @ARY ) . "\n"; # Do this as a comparison of a sparse array $ARY_B[ 1_000_000 ] = 1; print total_size( \ @ARY_B );
| Code | Size |
|---|---|
| sparse | 4,000,072 |
| undef | 16,194,340 |
| 1 | 20,195,340 |
| \ undef | 20,194,352 |
| \ !1 | 20,194,377 |
| \ !!1 | 20,194,378 |
| \ 1 | 20,195,340 |
| ( 1 + $| ) | 24,194,340 |
| \ ( 1 + $| ) | 40,194,340 |
| !1 | 41,194,340 |
| !!1 | 42,194,340 |
I use !! $x because the return value is one of the values PL_sv_yes or PL_sv_no both of which are a single scalar that is shared through the entire process, forever. It is somewhat like undef being shared everywhere. You can have a million return values from !! $x and have them take up no space or you can have a million 1's and every one takes up a whole SV's worth of memory.
The choice is obvious.
|
|---|