The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

File::MultilineGrep - Match multiple line block delimited by start/stop pattern

SYNOPSIS

   use File::MultilineGrep;

   file_multiline_grep ($begin_pattern
                      , $finish_pattern
                      , $middle_pattern
                      , $numeration
                      , $input_file
                      , $output_separator);

DESCRIPTION

To be considered text files having repeated structures. These structures possess repeated start delimiter, optional stop delimiter and variable contents. That is some or all fields of these structures are optional. A task is to select all whole structures, that contain a specified pattern. This can be done using a multiline regular expressions. But there is a performance issue: Processing time using regular expression is not directly proportional to amount of structures, so that increasing of this amount might cause the reqular expression will never finish. Processing time of the proposed function is directly proportional to amount of structures.

SUBROUTINES

file_multiline_grep

   file_multiline_grep( $begin_pattern      #                     regular expression
                      , $finish_pattern     # optional parameter, regular expression
                      , $middle_pattern     #                     regular expression
                      , $numeration         # if false - not enumerate output lines
                      , $input_file         # optional parameter
                                            # if false - read from STDIN
                      , $output_separator); # optional parameter

EXAMPLE

   use File::MultilineGrep;

   file_multiline_grep ('person_id'
                      , 'end_person'
                      , 'Giant'
                      , 'enumerate_lines'
                      , 'most_famous_people'
                      , '------

reads all records from a file 'most_famous_people' (where line enumeration doesn't belong to the file):

  1 person_id  - 001
  2 profession - Prophet
  3 first name - Moses
  4 birthyear  - 1391 BCE
  5 end_person    
  6    ...
  7 person_id  - 002
  8 profession - Giant
  9 first name - Samson
 10 birthyear  - Unknown
 11 end_person   
 12    ...
 13 person_id  - 003
 14 profession - King
 15 first name - David
 16 birthyear  - 1040 BCE
 17 end_person   
 18    ...
 19 person_id  - 004
 20 profession - Giant
 21 first name - Goliath
 22 birthyear  - 135  BCE
 23 end_person   

that begin with 'person_id', finish with 'end_person' and contain a pattern 'Giant':

   7: person_id  - 002 
   8= profession - Giant
   9: first name - Samson
  10: birthyear  - Unknown
  11: end_person
 ------
  19: person_id  - 004 
  20= profession - Giant
  21: first name - Goliath
  22: birthyear  - 135  BCE 
  23: end_person
 ------

AUTHOR

Mart E. Rivilis, rivilism@cpan.org

BUGS

Please report any bugs or feature requests to bug-file-multilinegrep at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=File-MultilineGrep. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc File::MultilineGrep

You can also look for information at:

LICENSE AND COPYRIGHT

Copyright 2013 Mart E. Rivilis.

This program is free software; you can redistribute it and/or modify it under the terms of the the Artistic License (2.0).