I am on a 64 bit machine
If there is any chance that your strings will get bigger than 4GB, I think you just need to change the if for a while and the rest would take care of itself:
sub myvec(\$$$) :lvalue {
use constant TWO_GB => 2**31;
my( $ref, $offset, $bits ) = @_;
while( $offset > TWO_GB - 1 ) {
$offset -= TWO_GB;
$ref = \substr $$ref, ( TWO_GB * $bits ) / 8;
}
CORE::vec( $$ref, $offset, $bits );
}
but again that's untested, so check it and convince yourself.
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|