I'm trying to read in a file with names and addreses. It may look like this:
John Doe
123 Main Street
My Town, US 12345
Ralph Kramden
c/o Joe
999 North Lane
YourTown, US 22839
Where there is always a line between records. But I don't know how to tell Perl that the next X lines are all one record. (And X can vary).
How can that be done?
From perldoc perlvar:
$/
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.)
So try this:
{
open my $fh, "<", $input_file;
local $/ = "";
while(<$fh>) {
# each loop, $_ will be a different record
# the first will be "John Doe\n123 Main Street\nMy Town, US 12345\n\n"
# etc.
}
}
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