This is possible in pure perl, if you can live with using a global var?
$buffer = 'x' x 10000000; # memory used 12,200kb *x = \$buffer; # mem used 12.200kb print length $x; 10000000 print substr $x, 0, 30; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$x is now an alias for the buffer and can be used as any scalar can be. However, I don't think that there is any way to use a glob assignment with a hash element.
A possible alternative would be to wrap an lvalue sub (or method) around the $buffer.
sub test : lvalue { $buffer }; print length test; 10000000 print substr test, 0, 10; xxxxxxxxxx substr( test, 3, 3 ) = 'ABC'; print substr test, 0, 10; xxxABCxxxx print length test; 10000000
This behaves like a scalar for most purposes albeit that the syntax looks a little strange. As a method, the syntax would be
print substr obj->test, 20_000, 5; substr( obj->test, 20_000, 5 ) = 'hello';
which isn't too aweful. It would mean utilising a global with the risk of being stomped on elsewhere, but using a suitably obscure name should minimise the risk of that.
In reply to Re: How to swap scalar values without copies
by BrowserUk
in thread How to swap scalar values without copies
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |