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


StanzaFile - read, parse, and write files containing "stanzas".


    # Parse a .ini format file into stanzas.

    use StanzaFile ;
    my $a = new StanzaFile(file_name=>"/etc/wvdial.conf") ;

    # Add a new stanza to a StanzaFile.
    $a->add(new Stanza('Stanza Name')) ;

    # Check for a stanza's existance.
    if ($a->exists('New Stanza'))
    } ;

    # Parse a .ini format file into stanzas.

    use StanzaFile ;
    my $a = new StanzaFile ;
    $a->read(file_name=>"/etc/wvdial.conf") ;

    # Produce a string version of the StanzaFile
    # (Comments and other formatting are lost)

    my $theString = $a->asString() ;

    # Write the StanzaFile.
    $a->write("/etc/newFile.conf") ;

    # Add a new stanza to the file, replacing the stanza if it
    # already exists in the file.
    $theNewStanza = new Stanza('New Stanza') ;
    $a->replace($theNewStanza) ;

    # Access the "header" stanza.
    my $theHeaderStanza = $a->header() ;

    # Order in which the stanzas were added to the stanza file.
    my @theAdditionOrder = $a->order() ;

    # Get a stanza object from the stanza file.
    my $theStanzaObject = $a->stanza('The Stanza') ;


A number of Linux configuration files are stored in a Windows format know as "stanzas" or WINDOWS.INI format. These files are of the form



and so on. This class is designed to provide parsing and processing capabilities for the WINDOWS.INI format and provide a general enough framework so that other formats of stanzas can be easily supported (see StanzaFile::Grub for an example).

With the StanzaFile and it's companion class Stanza it is reasonably easy to read, parse, process, and write virtually any type of stanza formatted information.


The following is a somewhat contrived example, but it shows the merging of two StanzaFiles.

    my $a = new StanzaFile("/etc/wvfile.conf") ;
    my $b = new StanzaFile("newWvfile.conf") ;

    foreach ($b->order())
        if ($a->exists($_))
            $a->stanza($_)->merge($b->stanza($_)) ;
            $a->add($b->stanza($_)) ;
        } ;
    } ;

    $a->write(file_name=>"/etc/mergedWvdial.conf") ;


None known.



Dick Munroe (

I'm looking for work (contract or permanent). I do a lot more than just hack Perl. Take a look at my:

Resume: Skills: CV:

for the gory details. If you see a match, drop me a note and we'll see what we can work out.