[ Team LiB ] |
Recipe 8.23 Pretending a String Is a File8.23.1 ProblemYou have data in string, but would like to treat it as a file. For example, you have a subroutine that expects a filehandle as an argument, but you would like that subroutine to work directly on the data in your string instead. Additionally, you don't want to write the data to a temporary file. 8.23.2 SolutionUse the scalar I/O in Perl v5.8: open($fh, "+<", \$string); # read and write contents of $string 8.23.3 DiscussionPerl's I/O layers include support for input and output from a scalar. When you read a record with <$fh>, you are reading the next line from $string. When you write a record with print, you change $string. You can pass $fh to a function that expects a filehandle, and that subroutine need never know that it's really working with data in a string. Perl respects the various access modes in open for strings, so you can specify that the strings be opened as read-only, with truncation, in append mode, and so on: open($fh, "<", \$string); # read only open($fh, ">", \$string); # write only, discard original contents open($fh, "+>", \$string); # read and write, discard original contents open($fh, "+<", \$string); # read and write, preserve original contents These handles behave in all respects like regular filehandles, so all I/O functions work, such as seek, truncate, sysread, and friends. 8.23.4 See AlsoThe open function in perlfunc(1) and in Chapter 29 of Programming Perl; Recipe 8.12 and Recipe 8.19 |
[ Team LiB ] |