---
name: "Config::Model::Backend::PlainFile"
section: "3pm"
platform: "linux"
package: "libconfig-model-perl"
version: "2.155-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Config::Model::Backend::PlainFile"
---

# Config::Model::Backend::PlainFile(3pm)

Read and write config as plain file

## NAME

Config::Model::Backend::PlainFile - Read and write config as plain file

## VERSION

version 2.155

## SYNOPSIS

```
 use Config::Model;
 my $model = Config::Model->new;
 my $inst = $model->create_config_class(
    name => "WithPlainFile",
    element => [
        [qw/source new/] => { qw/type leaf value_type uniline/ },
    ],
    rw_config  => {
      backend => 'plain_file',
      config_dir => '/tmp',
    },
 );

 my $inst = $model->instance(root_class_name => 'WithPlainFile' );
 my $root = $inst->config_root ;
 $root->load('source=foo new=yes' );
 $inst->write_back ;
```

Now `"/tmp"` directory contains 2 files: `"source"` and `"new"` with `"foo"` and `"yes"` inside.

## DESCRIPTION

This module is used directly by Config::Model to read or write the content of a configuration tree written in several files. Each element of the node is written in a plain file.

## Element type and file mapping

Element values are written in one or several files depending on their type.

- leaf

  The leaf value is written in one file. This file can have several lines if the leaf type is `"string"`

- list

  The list content is written in one file. Each line of the file is a value of the list.

- hash

  Not supported

## File mapping

By default, the configuration file is named after the element name (like in synopsis above).

The `"file"` parameter can also be used to specify a file name that take into account the path in the tree using `&index()` and `&element()` functions from Config::Model::Role::ComputeFunction.

For instance, with the following model:

```
    class_name => "Foo",
    element => [
        string_a => { type => 'leaf', value_type => 'string'}
        string_b => { type => 'leaf', value_type => 'string'}
    ],
    rw_config => {
        backend => 'PlainFile',
        config_dir => 'foo',
        file => '&element(-).&element',
        file_mode => 0644,  # optional
    }
```

If the configuration is loaded with `"example string_a=something` `string_b=else"`, this backend writes "`"something"`" in file `"example.string_a"` and `"else"` in file `"example.string_b"`.

`"file_mode"` parameter can be used to set the mode of the written file. `"file_mode"` value can be in any form supported by "chmod" in Path::Tiny.

## Methods

### read\_leaf

Parameters: `"(obj, elt, check, file, args)"`

Called by read method to read the file of a leaf element. `"args"` contains the arguments passed to read method.

### read\_hash (obj,elt,check,file,args);

Like read\_leaf for hash elements.

### read\_list

Parameters: `"(obj, elt, check, file, args)"`

Like read\_leaf for list elements.

### write

`"write"` writes a file for each element of the calling class. Works only for leaf and list elements. Other element type are skipped. Always return 1 (unless it died before).

## AUTHOR

Dominique Dumont, (ddumont at cpan dot org)

## SEE ALSO

Config::Model,  Config::Model::BackendMgr,  Config::Model::Backend::Any,

## AUTHOR

Dominique Dumont

## COPYRIGHT AND LICENSE

This software is Copyright (c) 2005-2022 by Dominique Dumont.

This is free software, licensed under:

```
  The GNU Lesser General Public License, Version 2.1, February 1999
```
