I have a very big-size string $s="dfasdfasdfafd...."
, of nearly 1,000,000 characters. I want to convert it to a file handle, making it look like this string is read from a file. But I don't want to store it to a temp file and read it.
Can anyone give me some suggestions?
To create a file in Perl, you also use open(). The difference is that you need to prefix the file name with a > character to make Perl open the file for writing. Any existing file with the name you supply to open() will be overwritten, unless you specify >> instead, which opens a file for appending.
If you want to open a file for reading and writing, you can put a plus sign before the > or < characters. open DATA, "+>file. txt" or die "Couldn't open file file.
Open a reference to a string:
use strict; use warnings; use autodie;
my $foo = "abc\ndef\n";
open my $fh, "<", \$foo;
while (<$fh>) {
print "line $.: $_";
}
Output:
line 1: abc
line 2: def
You may want to use OO-style then use IO::String package.
#!/usr/bin/perl
use strict;
use warnings;
use IO::String;
my $s="dfasdfasdfafd....\nabc";
my $io = IO::String->new($s);
while (my $line = $io->getline()) {
print $line;
}
print "\nTHE END\n";
# write new line
$io->print("\nappend new line");
# back to the start
$io->seek(0, 0);
while ($io->sysread(my $line, 512)) {
print $line;
}
Also you may use almost all methods described in IO::Handle package.
This solution is useful when some of another package accepts only IO::Handle (IO::File) object to manipulate data.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With