In Dread Ink, the Grave Hand of Jürgen Exner Did Inscribe:
May I suggest a different structure for your data?
Change the input_record_separator $/ into two consecutive newlines. Then
the whole verse will be read as a single unit, allowing you to
a) extract the numbers without worrying about if you are looking at a
first line or follow-up line within the same verse
b) blindly remove all newlines from within the verse and add whatever
number you like at its end
$/ The input record separator, newline by default. This influences
Perl's idea of what a "line" is. Works like awk's RS variable,
including treating empty lines as a terminator if set to the
null string. (An empty line cannot contain any spaces or tabs.)
You may set it to a multi-character string to match a
multi-character terminator, or to "undef" to read through the
end of file. Setting it to "\n\n" means something slightly
different than setting to "", if the file contains consecutive
empty lines. Setting to "" will treat two or more consecutive
empty lines as a single empty line. Setting to "\n\n" will
blindly assume that the next input character belongs to the
next
paragraph, even if it's a newline. (Mnemonic: / delimits line
boundaries when quoting poetry.)
local $/; # enable "slurp" mode
local $_ = <FH>; # whole file now here
s/\n[ \t]+/ /g;
Remember: the value of $/ is a string, not a regex. awk has to
be better for something.
Setting $/ to a reference to an integer, scalar containing an
integer, or scalar that's convertible to an integer will
attempt
to read records instead of lines, with the maximum record size
being the referenced integer. So this:
local $/ = \32768; # or \"32768", or \$var_containing_32768
open my $fh, $myfile or die $!;
local $_ = <$fh>;
will read a record of no more than 32768 bytes from FILE. If
you're not reading from a record-oriented file (or your OS
doesn't have record-oriented files), then you'll likely get a
full chunk of data with every read. If a record is larger than
the record size you've set, you'll get the record back in
pieces.
On VMS, record reads are done with the equivalent of "sysread",
so it's best not to mix record and non-record reads on the same
file. (This is unlikely to be a problem, because any file you'd
want to read in record mode is probably unusable in line mode.)
Non-VMS systems do normal I/O, so it's safe to mix record and
non-record reads of a file.
See also "Newlines" in perlport. Also see $..
This seems to be exactly what I need.
Why? You can build binary trees in Perl, no problem.
jue
I'd like to give it a try.
--
Frank
Drug war, well, as Rush Limbaugh said, anyone who uses drugs illegally
should be prosecuted and put away. I don't agree with him; I think they
should be treated, but that's what Rush believes and so, you know, we're
praying for Rush because he's in recovery and you take responsibilities for
your actions so I'm sure any day now Rush will demand to be put away for
the maximum sentence and ask for the most dangerous prison and we'll be
praying for maybe an African American cellmate who saw the Donovan McNabb
comments on ESPN. So we're prayin'.
~~ Al Franken, Book TV, on Rush Limbaugh's illegal drug arrest and racist
remarks