=head1 NAME overload::open - Hooks the native open function =head1 SYNOPSIS use overload::open; my %opened_files; sub my_callback { return if !@_; $opened_files{shift}++ } overload::open->prehook_open(\&my_callback); open my $fh, '>', "foo.txt"; =head1 DESCRIPTION This module hooks the native C and/or C functions and passes the arguments first to your function and then calls sends it to the provided subroutine functions instead. It does this using XS and replacing the OP_OPEN/OP_SYSOPEN opcode's with an XS function. This function will call your provided sub, then once that returns it will run the original OP. =head1 FEATURES This function will work fine if you call C or C inside the callback due to it detecting recursive calls and not calling the callback for recursive calls. You are not allowed to pass XS subs as the callback because then this could result in a recursive loop. If you need to do this, wrap the XS function in a native Perl function. =head1 METHODS =over =item prehook_open use overload::open overload::open->prehook_open(\&my_sub) Runs a hook before C by hooking C. The provided sub reference will be passed the same arguments as open. =item prehook_sysopen use overload::open; overload::open->prehook_sysopen(\&my_sub) Runs a hook before C by hooking C. Passes the same arguments to the provided sub reference as provided to sysopen. =back =head1 AUTHOR Samantha McVey =head1 LICENSE This module is available under the same licences as perl, the Artistic license and the GPL.