GuidesDealing With Records in Perl

Dealing With Records in Perl




One thing Perl does really well is read in information from
a file. There are a couple of useful special variables you can use to
neaten up your code when doing this or to alter the default behavior when
reading in records.

Tip of the Trade: Perl is a great tool for reading in information from
a file. Several useful special variables can be used to neaten up code or alter the default behavior when reading in records.

The first is the special variable $.. $. keeps track of
your current record number while iterating through a file. Thus:

while() {
    print "Current line number is $. n";
}

Using this saves setting up a separate variable to keep track.

The above example uses the default behavior, which reads in a
file line-by-line. This behavior can be altered by setting $/, which is the field separator, set to newline by default. For example, you could set it to read records separated by a semi-colon, instead:

$/ = ";";
while () {
    print;
}

However, bear in mind that changing this variable will affect
all code until the program finishes — which might be particularly
awkward (and bug-introducing) if you’re writing a module that will interact
with other code. To avoid this, use the function local, which
creates a temporary local variable with the same name as an existing variable:

{
    local $/ = ";";
    while () {
        print;
    }
}

The scope of local is the naked code block created by the outside
{ }. Once outside the block, $/ is back to whatever it was
before. In fact, whenever you’re setting special variables to non-default
values, it’s wise to use local like this.

A final note: Bear in mind that $. tracks records, not line
numbers. Thus, if you reset $/, $. will increment according to
your new record delimiter.

Juliet Kemp has been messing around with Linux systems, for financial reward and otherwise, for about a decade. She is also the author of “Linux System Administration Recipes: A Problem-Solution Approach” (Apress, 2009).

Follow ServerWatch on Twitter

Latest Posts

Related Stories