sub new_accessor { my $start = $_[0]; my $end = $_[1]; my $data_ref = \$_[2]; # Avoid making a copy. return sub { return substr($$data_ref, $start, $end-$start); }; } { my $data = ...; my $start1 = ...; # Calculate start from map. my $end1 = ...; # Calculate end from map. my $rec1 = new_accessor($start1, $end1, $data); print($rec1->(), "\n"); }