IO::File is only involved if you use HANDLE->print(...), not for print(HANDLE ...), much less before the handle is even created by open. It's not relevant here.
Contrary to what you said, subs works fine.
use strict; use warnings; use subs qw( open ); use Errno qw( EPIPE ); sub open { $! = EPIPE; return 0; } open(my $fh, '<', \my $buf) or die("open: $!\n");
open: Broken pipe
Update: You probably want to test a module without changing it, so your code would look more like the following:
package ModuleToTest; sub f { open(my $fh, '<', \my $buf) or die("open: $!\n"); } 1;
use Test::More tests => 1; { package ModuleToTest; use subs qw( open ); use Errno qw( EPIPE ); sub open { $! = EPIPE; return 0; } } use Module; ok( !eval { Module->f(); 1 } );
1..1 ok 1
In reply to Re: Making open fail
by ikegami
in thread Making open fail
by SilasTheMonk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |