——————=head1 NAME
RSH::FileUtil - TODO RSH::FileUtil description.
=head1 SYNOPSIS
use RSH::FileUtil;
blah blah blah
=head1 DESCRIPTION
Stub documentation for RSH::FileUtil, created by epic. It looks like the
author of the extension was negligent enough to leave the stub
unedited.
Blah blah blah.
=cut
package
RSH::FileUtil;
use
5.008;
use
strict;
use
warnings;
# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.
=head2 EXPORT
None by default.
=cut
our
@EXPORT_OK
=
qw(&get_filehandle)
;
our
@EXPORT
=
qw(
)
;
our
$VERSION
=
'0.0.1'
;
# use/imports go here
use
FileHandle;
# ******************** Class Methods ********************
=head2 FUNCTIONS
=over
=cut
=item get_filehandle($filename, 'READ'|'WRITE'|'RDWR'|'APPEND', [%args]')
Takes care of the logic for getting a filehandle, especially if no_follow => 1.
=cut
sub
get_filehandle {
my
$filename
=
shift
;
my
$type
=
shift
;
my
%args
=
@_
;
my
$fh
=
undef
;
my
$flags
=
undef
;
if
(
$type
eq
'READ'
) {
$flags
= O_RDONLY; }
elsif
(
$type
eq
'WRITE'
) {
$flags
= (O_WRONLY | O_CREAT); }
elsif
(
$type
eq
'RDWR'
) {
$flags
= (O_RDWR | O_CREAT); }
elsif
(
$type
eq
'APPEND'
) {
$flags
= (O_WRONLY | O_APPEND | O_CREAT); }
if
(
defined
(
$args
{exclusive}) && (
$args
{exclusive} eq
'1'
)) {
$flags
=
$flags
| O_EXCL;
}
if
((
$type
eq
'WRITE'
) and (not
defined
(
$args
{no_truncate}) or (
$args
{no_truncate} eq
'0'
))) {
# by default, we truncate for writing, to make it work like perl defaults ...
$flags
=
$flags
| O_TRUNC;
}
if
(
defined
(
$args
{no_follow}) && (
$args
{no_follow} eq
'1'
)) {
# Do not follow symlinks--useful for the paranoid in cases of
# sensitive data that should not be moved.
eval
{
$fh
= new FileHandle
$filename
,
$flags
| O_NOFOLLOW;
};
if
($@) {
# catches O_NOFOLLOW not being defined--i.e. on filesystems that have
# no concept of symlinks or following. Paranoid or not, if it isn't
# supported we have to just make do
$fh
= new FileHandle
$filename
,
$flags
| O_NOFOLLOW;
}
}
else
{
# Just get a file handle and don't worry about whether we are following
# symlinks
$fh
= new FileHandle
$filename
,
$flags
;
}
return
$fh
;
}
=back
=cut
# #################### RSH::FileUtil.pm ENDS ####################
1;
=head1 SEE ALSO
=head1 AUTHOR
Matt Luker C<< <mluker@cpan.org> >>
=head1 COPYRIGHT AND LICENSE
Copyright 2007-2008 by Matt Luker
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
__END__
# ---------------------------------------------------------------------
# $Log$
# ---------------------------------------------------------------------