Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re^3: slurped scalar map

by ikegami (Patriarch)
on Jun 20, 2006 at 16:35 UTC ( [id://556459]=note: print w/replies, xml ) Need Help??


in reply to Re^2: slurped scalar map
in thread slurped scalar map

I should have mentioned that substr makes a copy when $rec1->() is called. That's unavoidable. You can't extract a string from another without making the new string. However, the copy is only done when $rec1->() is executed.

If that's a problem, you could extract small chunks at a time. For example, only 100 (by default) chars are duplicated at any given time.

sub new_callback_accessor { my $start = $_[0]; my $end = $_[1]; my $data_ref = \$_[2]; # Avoid making a copy. return sub { my ($callback, $blk_size) = @_; local *_; $blk_size = 100 unless defined $blk_size; $blk_size = $end-$start unless $blk_size; my $ofs = $start; my $len = $end-$start; while ($len) { $blk_size = $len if $blk_size > $len; $_ = substr($$data_ref, $ofs, $blk_size); $callback->(); $ofs += $len; $len -= $blk_size; } }; } { my $data = ...; my $start1 = ...; # Calculate start from map. my $end1 = ...; # Calculate end from map. my $rec1 = new_callback_accessor($start1, $end1, $data); $rec1->(sub { print }); print("\n"); }

Untested.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://556459]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (4)
As of 2024-04-26 01:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found