The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
    my $self = shift;
    my $fn = $self->[FILENAME];
    my $fh = $self->[FILEHANDLE];

    if ($fh) {
        seek $fh, 0, SEEK_END;
        return tell($fh)- $self->[STARTPOS];
    } elsif ($fn) {
        return (-s $fn) - $self->[STARTPOS];
    } else {
        return length($self->[BUFFER]);


Data::TemporaryBag - Handle long size data using temporary file .


  use Data::TemporaryBag;

  $data = Data::TemporaryBag->new;
  # add long string
  $data->add('ABC' x 1000);
  # You can use an overridden operator
  $data .= 'DEF' x 1000;
  $substr = $data->substr(2997, 6);  # ABCDEF


Data::TemporaryBag module provides a bag object class handling long size data. The short size data are kept on memory. When the data size becomes over $Threshold size, they are saved into a temporary file internally.


Data::TemporaryBag->new( [$data] )

Creates a bag object.


Clears $bag.

$bag->add( $data )

Adds $data to $bag. You can use an assignment operator '.=' instead.

$bag->substr( $offset, $length, $replace )

Extracts a substring out of $bag. It behaves similar to CORE::substr except that it can't be an lvalue.


Creates a clone of $bag.


Gets data of $bag as a string. It is possible that the string is extremely long.


Gets length of data.


Returns if the data in $bag are defined or not.


Returns the file name if $bag is saved in a temporary file.



The threshold of the data size in kilobytes whether saved into file or not. Default is 10.


The maximum number of the opened temporary files. Default is 10.


Copyright 2001 Yasuhiro Sasama (ySas), <>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.