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.
|
---|
In Section
Meditations