IO::Scalar(3)

🌸 NAME 🌸

bestie, welcome to IO::Scalar(3) β€” straight out of the User Contributed Perl Documentation. This is the IO:: interface for reading/writing a scalar. Yes, it gives you filehandle energy, but the β€œfile” is literally a string. iconic. πŸ’…


✨ SYNOPSIS ✨

okay so first up: you can do I/O on strings using the basic OO interface...

use 5.005;
use IO::Scalar;
$data = "My message:\n";

### Open a handle on a string, and append to it:
$SH = new IO::Scalar \$data;
$SH->print("Hello");
$SH->print(", world!\nBye now!\n");
print "The string is now: ", $data, "\n";

### Open a handle on a string, read it line-by-line, then close it:
$SH = new IO::Scalar \$data;
while (defined($_ = $SH->getline)) {
    print "Got line: $_";
}
$SH->close;

### Open a handle on a string, and slurp in all the lines:
$SH = new IO::Scalar \$data;
print "All lines:\n", $SH->getlines;

### Get the current position (either of two ways):
$pos = $SH->getpos;
$offset = $SH->tell;

### Set the current position (either of two ways):
$SH->setpos($pos);
$SH->seek($offset, 0);

### Open an anonymous temporary scalar:
$SH = new IO::Scalar;
$SH->print("Hi there!");
print "I printed: ", ${$SH->sref}, "\n";      ### get at value

Don't like OO for your I/O? No problem, bestie. Thanks to the magic of an invisible tie(), the following now works out of the box, just as it does with IO::Handle:

use 5.005;
use IO::Scalar;
$data = "My message:\n";

### Open a handle on a string, and append to it:
$SH = new IO::Scalar \$data;
print $SH "Hello";
print $SH ", world!\nBye now!\n";
print "The string is now: ", $data, "\n";

### Open a handle on a string, read it line-by-line, then close it:
$SH = new IO::Scalar \$data;
while (<$SH>) {
    print "Got line: $_";
}
close $SH;

### Open a handle on a string, and slurp in all the lines:
$SH = new IO::Scalar \$data;
print "All lines:\n", <$SH>;

### Get the current position (WARNING: requires 5.6):
$offset = tell $SH;

### Set the current position (WARNING: requires 5.6):
seek $SH, $offset, 0;

### Open an anonymous temporary scalar:
$SH = new IO::Scalar;
print $SH "Hi there!";
print "I printed: ", ${$SH->sref}, "\n";      ### get at value

And for you folks with 1.x code out there: the old tie() style still works, though this is unnecessary and deprecated. ngl, it's giving legacy era β€” here's the vibe anyway:

use IO::Scalar;

### Writing to a scalar...
my $s;
tie *OUT, 'IO::Scalar', \$s;
print OUT "line 1\nline 2\n", "line 3\n";
print "String is now: $s\n"

### Reading and writing an anonymous scalar...
tie *OUT, 'IO::Scalar';
print OUT "line 1\nline 2\n", "line 3\n";
tied(OUT)->seek(0,0);
while (<OUT>) {
    print "Got line: ", $_;
}

Stringification works, too! obsessed πŸ’–

my $SH = new IO::Scalar \$data;
print $SH "Hello, ";
print $SH "world!";
print "I printed: $SH\n";

πŸ¦‹ DESCRIPTION πŸ¦‹

This class is part of the IO::Stringy distribution; see IO::Stringy for change log and general information.

The IO::Scalar class implements objects which behave just like IO::Handle (or FileHandle) objects, except that you may use them to write to (or read from) scalars. These handles are automatically β€œtiehandle”d (though please see WARNINGS for information relevant to your Perl version).

Basically, this:

my $s;
$SH = new IO::Scalar \$s;
$SH->print("Hel", "lo, ");         ### OO style
$SH->print("world!\n");            ### ditto

Or this:

my $s;
$SH = tie *OUT, 'IO::Scalar', \$s;
print OUT "Hel", "lo, ";           ### non-OO style
print OUT "world!\n";              ### ditto

Causes $s to be set to:

"Hello, world!\n"

πŸ’… PUBLIC INTERFACE πŸ’…

πŸ›  Construction πŸ› 

  • new [ARGS...] β€” Class method. Return a new, unattached scalar handle. If any arguments are given, they're sent to open().
  • open [SCALARREF] β€” Instance method. Open the scalar handle on a new scalar, pointed to by SCALARREF. If no SCALARREF is given, a β€œprivate” scalar is created to hold the file data.

Returns the self object on success, undefined on error.

  • opened β€” Instance method. Is the scalar handle opened on something?
  • close β€” Instance method. Disassociate the scalar handle from its underlying scalar. Done automatically on destroy.

πŸŽ€ Input and output πŸŽ€

  • flush β€” Instance method. No-op, provided for OO compatibility.
  • fileno β€” Instance method. No-op, returns undef.
  • getc β€” Instance method. Return the next character, or undef if none remain.
  • getline β€” Instance method. Return the next line, or undef on end of string. Can safely be called in an array context. Currently, lines are delimited by "\n".
  • getlines β€” Instance method. Get all remaining lines. It will croak() if accidentally called in a scalar context.
  • print ARGS... β€” Instance method. Print ARGS to the underlying scalar.
⚠️ Warning: this continues to always cause a seek to the end of the string, but if you perform seek()s and tell()s, it is still safer to explicitly seek-to-end before subsequent print()s.
  • read BUF, NBYTES, [OFFSET] β€” Instance method. Read some bytes from the scalar. Returns the number of bytes actually read, 0 on end-of-file, undef on error.
  • write BUF, NBYTES, [OFFSET] β€” Instance method. Write some bytes to the scalar.
  • sysread BUF, LEN, [OFFSET] β€” Instance method. Read some bytes from the scalar. Returns the number of bytes actually read, 0 on end-of-file, undef on error.
  • syswrite BUF, NBYTES, [OFFSET] β€” Instance method. Write some bytes to the scalar.

🌈 Seeking/telling and other attributes 🌈

  • autoflush β€” Instance method. No-op, provided for OO compatibility.
  • binmode β€” Instance method. No-op, provided for OO compatibility.
  • clearerr β€” Instance method. Clear the error and EOF flags. A no-op.
  • eof β€” Instance method. Are we at end of file?
  • seek OFFSET, WHENCE β€” Instance method. Seek to a given position in the stream.
  • sysseek OFFSET, WHENCE β€” Instance method. Identical to seek OFFSET, WHENCE, q.v.
  • tell β€” Instance method. Return the current position in the stream, as a numeric offset.
  • setpos POS β€” Instance method. Set the current position, using the opaque value returned by getpos().
  • getpos β€” Instance method. Return the current position in the string, as an opaque object.
  • sref β€” Instance method. Return a reference to the underlying scalar.

πŸ‘‘ AUTHOR πŸ‘‘

Eryq (eryq@zeegee.com). President, ZeeGee Software Inc (http://www.zeegee.com).


🫢 CONTRIBUTORS 🫢

Dianne Skoll (dfs@roaringpenguin.com).


Copyright (c) 1997 Erik (Eryq) Dorfman, ZeeGee Software, Inc. All rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


okay bye bestie πŸ’– this page is from perl v5.42.0, dated 2020-06-04, and it's IO::Scalar(3). periodt. ✨

πŸ“¦ where this page comes from