Description: The author of this module notes that it is best used, especially by him, when reading or manipulating log files. I have a tendency to use it for the exact same thing, especially when looking for context around captured lines.
CPAN: File::Bidirectional
Note:
Although I would like to note that using the tie’d interface as I have done takes approximately 2 1/2 times as long as a regular file read according to benchmarks, it is still a very handy tool and allows one not to reinvent the wheel.
Example 1:
Here we are going to go through a log file and when we hit the time stamp we want, we are going to change directions and go back through. There is no real reason to change direction here, I am merely demonstrating how it would be accomplished.
# Always use these
use strict;
use warnings;
# Use the module itself
use File::Bidirectional;
# Define the log file to be read
my $log = "/var/log/log_file";
# Open the logfile by tie'ing it to the module
# This is exactly the same as File::ReadBackwards
tie *LOG, "File::Bidirectional", "$log", {mode => 'backward'}
or die ("$log tie error: $!");
# Iterate over the logfile
while (my $line = ) {
# Split the log line
my @entry = split(/\s+/, $line);
# Take the timestamp and check if we
# have hit our threshold yet
# Get the line # then change direction
if (time_reached($entry[0]) == 1) {
$line_num = (tied *LOG)->line_num();
(tied *LOG)->switch();
}
}
# Cleanup
untie (*LOG);
