IO::COMPRESS::BZIP2(3perl)
π IO::Compress::Bzip2(3perl) β like, the whole vibe
okay bestie, welcome to the IO::Compress::Bzip2 page from the Perl Programmers Reference Guide π. Buckle up, it's a long one, but we're doing this together, no cap.
β¨ NAME β¨
IO::Compress::Bzip2 β write bzip2 files/buffers π
β¨ SYNOPSIS β¨
okay so here's the whole menu of what you can do, laid out pretty:
use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error) ;
my $status = bzip2 $input => $output [,OPTS]
or die "bzip2 failed: $Bzip2Error\n";
my $z = IO::Compress::Bzip2->new( $output [,OPTS] )
or die "bzip2 failed: $Bzip2Error\n";
$z->print($string);
$z->printf($format, $string);
$z->write($string);
$z->syswrite($string [, $length, $offset]);
$z->flush();
$z->tell();
$z->eof();
$z->seek($position, $whence);
$z->binmode();
$z->fileno();
$z->opened();
$z->autoflush();
$z->input_line_number();
$z->newStream( [OPTS] );
$z->close() ;
$Bzip2Error ;
# IO::File mode
print $z $string;
printf $z $format, $string;
tell $z
eof $z
seek $z, $position, $whence
binmode $z
fileno $z
close $z ;
β¨ DESCRIPTION β¨
So this module is out here serving a whole Perl interface that lets you write bzip2 compressed data to files or to a buffer. iconic, honestly.
Now if you're trying to read bzip2 files/buffers instead? that's a whole different girlboss β go meet the companion module IO::Uncompress::Bunzip2 π¦.
π Functional Interface π
There's a top-level function, bzip2, that does "one-shot" compression between buffers and/or files. she's the plug-and-play option π. But if you want finer control over the compression process, go look at the "OO Interface" section, kay?
use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error) ;
bzip2 $input_filename_or_reference => $output_filename_or_reference [,OPTS]
or die "bzip2 failed: $Bzip2Error\n";
heads up bestie: the functional interface needs Perl5.005 or better. don't come at her with anything older, she will not run π
π«Ά bzip2 $input_filename_or_reference => $output_filename_or_reference [, OPTS]
bzip2 expects at least two parameters β $input_filename_or_reference and $output_filename_or_reference β plus zero or more optional parameters (peep "Optional Parameters" for those).
The $input_filename_or_reference parameter
This parameter, $input_filename_or_reference, is what tells bzip2 where the uncompressed data is coming from. she can show up in any of these forms:
- A filename β if
$input_filename_or_referenceis a simple scalar, it's assumed to be a filename. That file gets opened for reading, and the input data gets read from it. π - A filehandle β if
$input_filename_or_referenceis a filehandle, the input data gets read from it. The string'-'can be used as an alias for standard input π« - A scalar reference β if
$input_filename_or_referenceis a scalar reference, the input data gets read from$$input_filename_or_reference. - An array reference β if
$input_filename_or_referenceis an array reference, every element in the array must be a filename. The input data gets read from each file in turn. The complete array gets walked through first to make sure it only contains valid filenames, before any data is compressed π. - An Input FileGlob string β if
$input_filename_or_referenceis a string delimited by the characters"<"and">",bzip2assumes it's an input fileglob string. The input is the list of files that match the fileglob. SeeFile::GlobMapperfor more details π.
If $input_filename_or_reference is any other type, undef gets returned. sorry babe π
The $output_filename_or_reference parameter
The parameter $output_filename_or_reference controls where the compressed data ends up. she can take one of these forms:
- A filename β if
$output_filename_or_referenceis a simple scalar, it's assumed to be a filename. That file gets opened for writing, and the compressed data gets written to it. πΈ - A filehandle β if
$output_filename_or_referenceis a filehandle, the compressed data gets written to it. The string'-'can be used as an alias for standard output β¨ - A scalar reference β if
$output_filename_or_referenceis a scalar reference, the compressed data gets stored in$$output_filename_or_reference. - An Array Reference β if
$output_filename_or_referenceis an array reference, the compressed data gets pushed onto the array. - An Output FileGlob β if
$output_filename_or_referenceis a string delimited by the characters"<"and">",bzip2assumes it's an output fileglob string. The output is the list of files that match the fileglob. π
β οΈ okay so when$output_filename_or_referenceis a fileglob string,$input_filename_or_referencemust also be a fileglob string. Anything else is an error. periodt.
See File::GlobMapper for more details π§
If $output_filename_or_reference is any other type, undef gets returned.
π Notes
When $input_filename_or_reference maps to multiple files/buffers and $output_filename_or_reference is a single file/buffer, the input files/buffers get stored in $output_filename_or_reference as a concatenated series of compressed data streams. it's giving glow-up stack π
π Optional Parameters π
The optional parameters for the one-shot function bzip2 are (for the most part) identical to the ones used with the OO interface defined over in the "Constructor Options" section. the exceptions? listed right here bestie:
"AutoClose => 0|1"β this option applies to any input or output data streams given tobzip2that are filehandles. If"AutoClose"is specified and the value is true, it'll result in all input and/or output filehandles being closed oncebzip2has completed. This parameter defaults to0."BinModeIn => 0|1"β this option is now a no-op. All files will be read in binmode. she's retired but still on the guest list π"Append => 0|1"β the behaviour of this option depends on the type of output data stream, so let's break it down:- A Buffer β if
"Append"is enabled, all compressed data gets appended to the end of the output buffer. Otherwise the output buffer gets cleared before any compressed data is written to it. - A Filename β if
"Append"is enabled, the file gets opened in append mode. Otherwise the contents of the file, if any, get truncated before any compressed data is written to it. - A Filehandle β if
"Append"is enabled, the filehandle gets positioned to the end of the file via a call to"seek"before any compressed data is written to it. Otherwise the file pointer does not get moved. π
- A Buffer β if
When "Append" is specified and set to true, it'll append all compressed data to the output data stream.
So when the output is a filehandle it'll carry out a seek to the eof before writing any compressed data. If the output is a filename, it gets opened for appending. If the output is a buffer, all compressed data gets appended to the existing buffer. π«
Conversely, when "Append" is not specified, or it's present and set to false, it operates like this:
When the output is a filename, it truncates the contents of the file before writing any compressed data. If the output is a filehandle, its position does not get changed. If the output is a buffer, it gets wiped before any compressed data is output. π§Ό
Defaults to 0.
π Oneshot Examples π
Here are a few examples showing off what this module can do, bestie. she's got range π₯
Streaming
This super simple command line example demonstrates the module's streaming capabilities. The code reads data from STDIN, compresses it, and writes the compressed data to STDOUT.
$ echo hello world | perl -MIO::Compress::Bzip2=bzip2 -e 'bzip2 \*STDIN => \*STDOUT' >output.bz2
The special filename "-" can be used as a standin for both "\*STDIN" and "\*STDOUT", so the above can be rewritten as
$ echo hello world | perl -MIO::Compress::Bzip2=bzip2 -e 'bzip2 "-" => "-"' >output.bz2
Compressing a file from the filesystem
To read the contents of the file "file1.txt" and write the compressed data to the file "file1.txt.bz2":
use strict ;
use warnings ;
use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error) ;
my $input = "file1.txt";
bzip2 $input => "$input.bz2"
or die "bzip2 failed: $Bzip2Error\n";
Reading from a Filehandle and writing to an in-memory buffer
To read from an existing Perl filehandle, $input, and write the compressed data to a buffer, $buffer:
use strict ;
use warnings ;
use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error) ;
use IO::File ;
my $input = IO::File->new( "<file1.txt" )
or die "Cannot open 'file1.txt': $!\n" ;
my $buffer ;
bzip2 $input => \$buffer
or die "bzip2 failed: $Bzip2Error\n";
Compressing multiple files
To compress all files in the directory "/my/home" that match "*.txt" and store the compressed data in the same directory:
use strict ;
use warnings ;
use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error) ;
bzip2 '</my/home/*.txt>' => '<*.bz2>'
or die "bzip2 failed: $Bzip2Error\n";
and if you want to compress each file one at a time, this will do the trick π
use strict ;
use warnings ;
use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error) ;
for my $input ( glob "/my/home/*.txt" )
{
my $output = "$input.bz2" ;
bzip2 $input => $output
or die "Error compressing '$input': $Bzip2Error\n";
}
okay and that's just part one of this absolute saga, bestie β hang tight, more is coming πβ¨
π OO Interface
ok bestie this is where it gets GOOD β the object-oriented way, aka main character energy. You build an object, you talk to the object, the object does compression for you. Obsessed. π
π§Έ Constructor
The format of the constructor for IO::Compress::Bzip2 is shown below:
my $z = IO::Compress::Bzip2->new( $output [,OPTS] )
or die "IO::Compress::Bzip2 failed: $Bzip2Error\n";
So the constructor takes one mandatory parameter, $output (defined below, keep scrolling bestie), plus zero or more OPTS, which are defined over in "Constructor Options".
It hands you back an IO::Compress::Bzip2 object on success, and undef if it flops. π On failure, the variable $Bzip2Error will be holding an error message for you.
If you're running Perl 5.005 or better, the object $z that IO::Compress::Bzip2 returns can be used exactly like an IO::File filehandle. Like, literally the same. Which means all your normal output file operations work on $z. For example, to write to a compressed file/buffer you can use either of these forms:
$z->print("hello world\n");
print $z "hello world\n";
Below is a simple example of using the OO interface to create an output file myfile.bz2 and write some data to it. β¨
my $filename = "myfile.bz2";
my $z = IO::Compress::Bzip2->new($filename)
or die "IO::Compress::Bzip2 failed: $Bzip2Error\n";
$z->print("abcde");
$z->close();
See the "Examples" section for more. π¦
The mandatory parameter $output is what controls where your compressed data goes. This parameter can take one of these forms:
- A filename β If
$outputis a simple scalar, it's assumed to be a filename. That file gets opened for writing, and the compressed data gets written into it. π«Ά - A filehandle β If
$outputis a filehandle, the compressed data gets written to it. And plot twist: the string'-'can be used as an alias for standard output. β¨ - A scalar reference β If
$outputis a scalar reference, the compressed data gets stored in$$output. π
bestie listen β if$outputis literally any other type,IO::Compress::Bzip2::newwill returnundef. No cap. π
π Constructor Options
OPTS is any combination of zero or more of the following options:
AutoClose => 0|1β This one is only valid when the$outputparameter is a filehandle, iykyk. If you specify it and the value is true, it'll result in the$outputbeing closed once either theclosemethod gets called or theIO::Compress::Bzip2object is destroyed. This parameter defaults to0.Append => 0|1β Opens$outputin append mode. The behaviour of this option depends on the type of$output:- A Buffer β If
$outputis a buffer andAppendis enabled, all compressed data will be appended to the end of$output. Otherwise$outputwill be cleared before any data is written to it. π§Ή - A Filename β If
$outputis a filename andAppendis enabled, the file will be opened in append mode. Otherwise the contents of the file, if there are any, will be truncated before any compressed data is written to it. π¬ - A Filehandle β If
$outputis a filehandle, the file pointer will be positioned to the end of the file via a call toseekbefore any compressed data is written to it. Otherwise the file pointer will not be moved. π
- A Buffer β If
This parameter defaults to 0.
BlockSize100K => numberβ Specify the number of 100K blocks bzip2 uses during compression. Valid values are from1to9, where9is best compression. The default is1. π₯WorkFactor => numberβ Specifies how much effort bzip2 should take before resorting to a slower fallback compression algorithm. Valid values range from0to250, where0means use the default value30. The default is0. πͺStrict => 0|1β This is a placeholder option. It's giving "we're saving your seat, nobody's sitting here" energy. πͺ
π Examples
π Streaming
This very simple command line example demonstrates the streaming capabilities of the module. The code reads data from STDIN or all the files given on the commandline, compresses it, and writes the compressed data to STDOUT. β¨
use strict ;
use warnings ;
use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error) ;
my $z = IO::Compress::Bzip2->new("-", Stream => 1)
or die "IO::Compress::Bzip2 failed: $Bzip2Error\n";
while (<>) {
$z->print("abcde");
}
$z->close();
Note the use of "-" to mean "STDOUT". Alternatively you can use "\*STDOUT". π
π Compressing a file from the filesystem
To read the contents of the file file1.txt and write the compressed data to the file file1.txt.bz2, there are a few options. π
Start by creating the compression object and opening the input file:
use strict ;
use warnings ;
use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error) ;
my $input = "file1.txt";
my $z = IO::Compress::Bzip2->new("file1.txt.bz2")
or die "IO::Compress::Bzip2 failed: $Bzip2Error\n";
# open the input file
open my $fh, "<", "file1.txt"
or die "Cannot open file1.txt: $!\n";
# loop through the input file & write to the compressed file
while (<$fh>) {
$z->print($_);
}
# not forgetting to close the compressed file
$z->close();
π Methods
π¨οΈ print
Usage is:
$z->print($data)
print $z $data
Compresses and outputs the contents of the $data parameter. This behaves exactly like the print built-in.
Returns true if it worked. π
π printf
Usage is:
$z->printf($format, $data)
printf $z $format, $data
Compresses and outputs the contents of the $data parameter.
Returns true if it worked. β¨
ποΈ syswrite
Usage is:
$z->syswrite $data
$z->syswrite $data, $length
$z->syswrite $data, $length, $offset
Compresses and outputs the contents of the $data parameter.
Returns the number of uncompressed bytes written, or undef if it didn't work. π
βοΈ write
Usage is:
$z->write $data
$z->write $data, $length
$z->write $data, $length, $offset
Compresses and outputs the contents of the $data parameter.
Returns the number of uncompressed bytes written, or undef if it didn't work. π
πΏ flush
Usage is:
$z->flush;
Flushes any pending compressed data to the output file/buffer. π¦
TODO
Returns true on success. π
π tell
Usage is:
$z->tell()
tell $z
Returns the uncompressed file offset. πΈ
π eof
Usage is:
$z->eof();
eof($z);
Returns true if the close method has been called. β
β© seek
$z->seek($position, $whence);
seek($z, $position, $whence);
Provides a sub-set of the seek functionality, with the restriction that it is only legal to seek forward in the output file/buffer.
FATAL ERROR ALERT π¨ β it is a fatal error to attempt to seek backward. Do not. I'm serious bestie.
Empty parts of the file/buffer will have NULL (0x00) bytes written to them.
The $whence parameter takes one of the usual values, namely SEEK_SET, SEEK_CUR or SEEK_END.
Returns 1 on success, 0 on failure. π
π binmode
Usage is:
$z->binmode
binmode $z ;
This is a noop provided for completeness. It's giving "I'm here, I'm cute, I do nothing" energy. π
π opened
$z->opened()
Returns true if the object currently refers to an opened file/buffer. π«Ά
π autoflush
my $prev = $z->autoflush()
my $prev = $z->autoflush(EXPR)
If the $z object is associated with a file or a filehandle, this method returns the current autoflush setting for the underlying filehandle. If EXPR is present, and is non-zero, it will enable flushing after every write/print operation. πΏ
If $z is associated with a buffer, this method has no effect and always returns undef. π
heads up β the special variable $| cannot be used to set or retrieve the autoflush setting. Nope. Not that one.
π’ input_line_number
$z->input_line_number()
$z->input_line_number(EXPR)
This method always returns undef when compressing. Always. No thoughts, head empty. π«₯
π’ fileno
$z->fileno()
fileno($z)
If the $z object is associated with a file or a filehandle, fileno will return the underlying file descriptor. Once the close method is called, fileno will return undef. πΆ
If the $z object is associated with a buffer, this method will return undef.
π close
$z->close() ;
close $z ;
Flushes any pending compressed data and then closes the output file/buffer. π¬
For most versions of Perl this method will be automatically invoked if the IO::Compress::Bzip2 object is destroyed (either explicitly, or by the variable holding the reference to the object going out of scope). The exceptions are Perl versions 5.005 through 5.00504 and 5.8.0. In these cases, the close method will be called automatically, but not until global destruction of all live objects when the program is terminating. π
So if you want your scripts to be able to run on all versions of Perl, you should call close explicitly and not rely on automatic closing. Periodt.
Returns true on success, otherwise 0.
If the AutoClose option has been enabled when the IO::Compress::Bzip2 object was created, and the object is associated with a file, the underlying file will also be closed. π«Ά
π newStream([OPTS])
Usage is:
$z->newStream( [OPTS] )
Closes the current compressed data stream and starts a new one. Fresh start, new era, we love to see it. β¨
OPTS consists of any of the options that are available when creating the $z object.
See the "Constructor Options" section for more details. π
π¦ Importing
No symbolic constants are required by IO::Compress::Bzip2 at present. We're keeping it minimal, it's a vibe. π§
:allβ Importsbzip2and$Bzip2Error. Same as doing this:
use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error) ;
π EXAMPLES
π Apache::GZip Revisited
See IO::Compress::FAQ
π‘ Working with Net::FTP
See IO::Compress::FAQ
π«Ά SUPPORT
General feedback/questions/bug reports should be sent to <https://github.com/pmqs/IO-Compress/issues> (preferred) or <https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Compress>. Bestie will read your bug report, promise. π
π SEE ALSO
Compress::Zlib, IO::Compress::Gzip, IO::Uncompress::Gunzip, IO::Compress::Deflate, IO::Uncompress::Inflate, IO::Compress::RawDeflate, IO::Uncompress::RawInflate, IO::Uncompress::Bunzip2, IO::Compress::Lzma, IO::Uncompress::UnLzma, IO::Compress::Xz, IO::Uncompress::UnXz, IO::Compress::Lzip, IO::Uncompress::UnLzip, IO::Compress::Lzop, IO::Uncompress::UnLzop, IO::Compress::Lzf, IO::Uncompress::UnLzf, IO::Compress::Zstd, IO::Uncompress::UnZstd, IO::Uncompress::AnyInflate, IO::Uncompress::AnyUncompress
IO::Compress::FAQ
File::GlobMapper, Archive::Zip, Archive::Tar, IO::Zlib
The primary site for the bzip2 program is <https://sourceware.org/bzip2/>. πΈ
See the module Compress::Bzip2
βοΈ AUTHOR
This module was written by Paul Marquess, "pmqs@cpan.org". π Iconic behaviour honestly.
π MODIFICATION HISTORY
See the Changes file.
π COPYRIGHT AND LICENSE π
okay bestie, legal era, but make it cute π
Copyright (c) 2005-2026 Paul Marquess. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
no cap, that's the whole thing β same terms as Perl itself, so go be free with it, just don't be weird about it π
and that's a wrap on the whole page fr fr β¨ you made it all the way through, which is honestly iconic behavior π
this was IO::COMPRESS::BZIP2(3perl), served up from perl v5.44.0, dated 2026-10-17 π¦ go forth and bzip2 your little heart out, bestie β ily, bye ππΈ
π¦ where this page comes from
- arch rolling: perl 5.44.0-1 Β· Artistic-1.0-Perl AND GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms