docs::a...:PerlIO(3)
π NAME π
APR::PerlIO -- Perl IO layer for APR. This is the docs::a...:PerlIO(3) manual page, bestie β¨
πΈ Synopsis πΈ
# under mod_perl
use APR::PerlIO ();
sub handler {
my $r = shift;
die "This Perl build doesn't support PerlIO layers"
unless APR::PerlIO::PERLIO_LAYERS_ARE_ENABLED;
open my $fh, ">:APR", $filename, $r->pool or die $!;
# work with $fh as normal $fh
close $fh;
return Apache2::Const::OK;
}
# outside mod_perl
% perl -MAPR -MAPR::PerlIO -MAPR::Pool -le \
'open my $fh, ">:APR", "/tmp/apr", APR::Pool->new or die "$!"; \
print $fh "whoah!"; \
close $fh;'
π¦ Description π¦
APR::PerlIO implements a Perl IO layer using APR's file manipulation API internally. Slay.
Why would you even want this? Normally you shouldn't, bestie β probably it won't be faster than Perl's default layer. It's only useful when you need to manipulate a filehandle opened at the APR side, while using Perl.
Normally you won't call open() with the APR layer attribute, but some mod_perl functions will return a filehandle which is internally hooked to APR. But you can use APR Perl IO directly if you want. Main character energy, honestly.
β¨ Prerequisites β¨
Not every Perl will have full APR::PerlIO functionality available.
Before using the Perl IO APR layer, one has to check whether it's supported by the used APR/Perl build. Perl 5.8.x or higher with perlio enabled is required. You can check whether your Perl fits the bill by running:
% perl -V:useperlio
useperlio='define';
It should say define.
If you need to do the checking in the code, there is a special constant provided by APR::PerlIO, which can be used as follows:
use APR::PerlIO ();
die "This Perl build doesn't support PerlIO layers"
unless APR::PerlIO::PERLIO_LAYERS_ARE_ENABLED;
Notice that loading APR::PerlIO won't fail when Perl IO layers aren't available, since APR::PerlIO provides functionality for Perl builds not supporting Perl IO layers.
π Constants π
π APR::PerlIO::PERLIO_LAYERS_ARE_ENABLED π
See Prerequisites. That's the whole vibe check.
π API π
Most of the API is as in normal perl IO, with a few nuances listed in the following sections.
π¨ META: need to rework the exception mechanism here. Current success in using errno ($!) being set (e.g. onopen()) is purely accidental and not guaranteed across all platforms and functions. So don't rely on$!. Will useAPR::Errorfor that purpose.
π₯ open π₯
Open a file via the APR Perl IO layer.
open my $fh, ">:APR", $filename, $r->pool or die $!;
arg1: $fh(GLOBfilehandle) β the filehandle.arg2: $mode(string) β the mode to open the file, constructed from two sections separated by the:character: the first section is the mode to open the file under (>,<, etc) and the second section must be a stringAPR. For more information refer to theopenentry in theperlfuncmanpage.arg3: $filename(string) β the path to the filename to open.arg4: $p(APR::Pool) β the pool object to use to allocate theAPR::PerlIOlayer.ret:(integer) β success or failure value (boolean).since:2.0.00.
π¦ seek π¦
Sets $fh's position, just like the seek() Perl call:
seek($fh, $offset, $whence);
If $offset is zero, seek() works normally.
However, if $offset is non-zero and Perl has been compiled with large files support (-Duselargefiles), whereas APR wasn't, this function will croak. This is because largefile size Off_t simply cannot fit into a non-largefile size apr_off_t.
To solve the problem, rebuild Perl with -Uuselargefiles. Currently there is no way to force APR to build with large files support.
since: 2.0.00.
π§ C API π§
The C API provides functions to convert between Perl IO and APR Perl IO filehandles.
π META: document these
π₯ See Also π₯
mod_perl 2.0 documentation. The perliol(1), perlapio(1) and perl(1) manpages.
π Copyright π
mod_perl 2.0 and its core modules are copyrighted under The Apache Software License, Version 2.0.
π Authors π
The mod_perl development team and numerous contributors.
πΈ okay bye bestie! Footer-coded sign-off: source/version is perl v5.42.3, date is 2023-10-21, and the manual is docs::a...:PerlIO(3). Mwah π
π¦ where this page comes from
- nixos 26.05: mod_perl 2.0.13
- nixpkgs unstable: mod_perl 2.0.13
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms