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);