use Fcntl qw( O_APPEND O_RDONLY O_WRONLY O_RDWR O_ACCMODE ); sub file_mode_from_c { my ($c_mode) = @_; $c_mode &= O_ACCMODE | O_APPEND; my $p_mode; if ( $c_mode == O_RDONLY ) { $p_mode = '<'; } elsif ( $c_mode == O_WRONLY ) { $p_mode = '>'; } elsif ( $c_mode == (O_WRONLY|O_APPEND) ) { $p_mode = '>>'; } elsif ( $c_mode == O_RDWR ) { $p_mode = '+>'; } elsif ( $c_mode == (O_RDWR|O_APPEND) ) { $p_mode = '+>>'; } return $p_mode; } my $p_mode = file_mode_from_c($c_mode) or die("..."); open(my $fh, "$p_mode=", $fd) or die("...: $!");