That looks wrong to me because it removes more than three lines.
Does this look correct?
#!/usr/bin/perl
use strict;
use warnings;
# Given an ini file, return a string containing section contents.
# (Note that ini file comment lines start with a ;)
sub get_section
{
my $fcontents = shift; # in: ini file contents string
my $section = shift; # in: section name to get
# Note that the regex below will find multiple sections;
# it's terminated by the start of a new section or end of file.
my $s = join( "", $fcontents =~ /^[ \t]*\[$section\](.*?)(?:\Z|^[ \
+t]*\[)/msg );
$s =~ s/^[ \t]+//mg; # remove leading whitespace from each line
$s =~ s/[ \t]+$//mg; # remove trailing whitespace from each line
$s =~ s/^\s+//; # remove leading whitespace
$s =~ s/\s+$//; # remove trailing whitespace
# Remove up to three trailing comment lines
$s =~ s/ ( \n (;.*)? ){1,3} \z //x; # hopefully less of an eyesore
return $s;
}
my $inifile_contents = <<'BUK_LIKES_SUNDIALS';
[MySection]
; This is a comment line for MySection
fld1 = 'value of field 1'
fld2 = 42
; comment 1 inside the section
; comment 2 inside the section
fld3 =89
; trailer
; trailer 2
; trailer 3
; trailer 4
; trailer 5
; This is the heading for AnotherSection
[AnotherSection]
; another comment
asfld=69
BUK_LIKES_SUNDIALS
my $section1 = get_section( $inifile_contents, 'MySection' );
print "This is the contents of MySection -------\n$section1\n";
my $section2 = get_section( $inifile_contents, 'AnotherSection' );
print "This is the contents of AnotherSection -------\n$section2\n";
which prints
This is the contents of MySection -------
; This is a comment line for MySection
fld1 = 'value of field 1'
fld2 = 42
; comment 1 inside the section
; comment 2 inside the section
fld3 =89
; trailer
; trailer 2
; trailer 3
; trailer 4
This is the contents of AnotherSection -------
; another comment
asfld=69
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|