home *** CD-ROM | disk | FTP | other *** search
/ c't freeware shareware 1997 / CT_SW_97.ISO / pc / software / entwickl / win95 / pw32i306.exe / lib / IO / file.pm next >
Text File  |  1996-10-07  |  4KB  |  173 lines

  1. #
  2.  
  3. package IO::File;
  4.  
  5. =head1 NAME
  6.  
  7. IO::File - supply object methods for filehandles
  8.  
  9. =head1 SYNOPSIS
  10.  
  11.     use IO::File;
  12.  
  13.     $fh = new IO::File;
  14.     if ($fh->open "< file") {
  15.         print <$fh>;
  16.         $fh->close;
  17.     }
  18.  
  19.     $fh = new IO::File "> FOO";
  20.     if (defined $fh) {
  21.         print $fh "bar\n";
  22.         $fh->close;
  23.     }
  24.  
  25.     $fh = new IO::File "file", "r";
  26.     if (defined $fh) {
  27.         print <$fh>;
  28.         undef $fh;       # automatically closes the file
  29.     }
  30.  
  31.     $fh = new IO::File "file", O_WRONLY|O_APPEND;
  32.     if (defined $fh) {
  33.         print $fh "corge\n";
  34.         undef $fh;       # automatically closes the file
  35.     }
  36.  
  37.     $pos = $fh->getpos;
  38.     $fh->setpos $pos;
  39.  
  40.     $fh->setvbuf($buffer_var, _IOLBF, 1024);
  41.  
  42.     autoflush STDOUT 1;
  43.  
  44. =head1 DESCRIPTION
  45.  
  46. C<IO::File> is inherits from C<IO::Handle> ans C<IO::Seekable>. It extends
  47. these classes with methods that are specific to file handles.
  48.  
  49. =head1 CONSTRUCTOR
  50.  
  51. =over 4
  52.  
  53. =item new ([ ARGS ] )
  54.  
  55. Creates a C<IO::File>.  If it receives any parameters, they are passed to
  56. the method C<open>; if the open fails, the object is destroyed.  Otherwise,
  57. it is returned to the caller.
  58.  
  59. =back
  60.  
  61. =head1 METHODS
  62.  
  63. =over 4
  64.  
  65. =item open( FILENAME [,MODE [,PERMS]] )
  66.  
  67. C<open> accepts one, two or three parameters.  With one parameter,
  68. it is just a front end for the built-in C<open> function.  With two
  69. parameters, the first parameter is a filename that may include
  70. whitespace or other special characters, and the second parameter is
  71. the open mode, optionally followed by a file permission value.
  72.  
  73. If C<IO::File::open> receives a Perl mode string ("E<gt>", "+E<lt>", etc.)
  74. or a POSIX fopen() mode string ("w", "r+", etc.), it uses the basic
  75. Perl C<open> operator.
  76.  
  77. If C<IO::File::open> is given a numeric mode, it passes that mode
  78. and the optional permissions value to the Perl C<sysopen> operator.
  79. For convenience, C<IO::File::import> tries to import the O_XXX
  80. constants from the Fcntl module.  If dynamic loading is not available,
  81. this may fail, but the rest of IO::File will still work.
  82.  
  83. =back
  84.  
  85. =head1 SEE ALSO
  86.  
  87. L<perlfunc>, 
  88. L<perlop/"I/O Operators">,
  89. L<IO::Handle>
  90. L<IO::Seekable>
  91.  
  92. =head1 HISTORY
  93.  
  94. Derived from FileHandle.pm by Graham Barr E<lt>F<bodg@tiuk.ti.com>E<gt>.
  95.  
  96. =head1 REVISION
  97.  
  98. $Revision: 1.5 $
  99.  
  100. =cut
  101.  
  102. require 5.000;
  103. use vars qw($VERSION @EXPORT @EXPORT_OK $AUTOLOAD);
  104. use Carp;
  105. use Symbol;
  106. use English;
  107. use SelectSaver;
  108. use IO::Handle qw(_open_mode_string);
  109. use IO::Seekable;
  110.  
  111. require Exporter;
  112. require DynaLoader;
  113.  
  114. @ISA = qw(IO::Handle IO::Seekable Exporter DynaLoader);
  115.  
  116. $VERSION = sprintf("%d.%02d", q$Revision: 1.5 $ =~ /(\d+)\.(\d+)/);
  117.  
  118. @EXPORT = @IO::Seekable::EXPORT;
  119.  
  120. ################################################
  121. ## If the Fcntl extension is available,
  122. ##  export its constants.
  123. ##
  124.  
  125. sub import {
  126.     my $pkg = shift;
  127.     my $callpkg = caller;
  128.     Exporter::export $pkg, $callpkg;
  129.     eval {
  130.     require Fcntl;
  131.     Exporter::export 'Fcntl', $callpkg;
  132.     };
  133. };
  134.  
  135.  
  136. ################################################
  137. ## Constructor
  138. ##
  139.  
  140. sub new {
  141.     my $type = shift;
  142.     my $class = ref($type) || $type || "IO::File";
  143.     @_ >= 0 && @_ <= 3
  144.     or croak "usage: new $class [FILENAME [,MODE [,PERMS]]]";
  145.     my $fh = $class->SUPER::new();
  146.     if (@_) {
  147.     $fh->open(@_)
  148.         or return undef;
  149.     }
  150.     $fh;
  151. }
  152.  
  153. ################################################
  154. ## Open
  155. ##
  156.  
  157. sub open {
  158.     @_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])';
  159.     my ($fh, $file) = @_;
  160.     if (@_ > 2) {
  161.     my ($mode, $perms) = @_[2, 3];
  162.     if ($mode =~ /^\d+$/) {
  163.         defined $perms or $perms = 0666;
  164.         return sysopen($fh, $file, $mode, $perms);
  165.     }
  166.         $file = "./" . $file unless $file =~ m#^/#;
  167.     $file = _open_mode_string($mode) . " $file\0";
  168.     }
  169.     open($fh, $file);
  170. }
  171.  
  172. 1;
  173.