YAML::Tiny (3)
Leading comments
Automatically generated by Pod::Man 4.07 (Pod::Simple 3.32) Standard preamble: ========================================================================
NAME
YAML::Tiny - Read/Write YAML files with as little code as possibleVERSION
version 1.69PREAMBLE
TheThe original pure-Perl implementation
Like the other "::Tiny" modules, YAML::Tiny has no non-core dependencies, does not require a compiler to install, is back-compatible to Perl v5.8.1, and can be inlined into other modules if needed.
In exchange for this adding this extreme flexibility, it provides support for only a limited subset of
SYNOPSIS
Assuming file.yml like this:
--- rootproperty: blah section: one: two three: four Foo: Bar empty: ~
Read and write file.yml like this:
use YAML::Tiny; # Open the config my $yaml = YAML::Tiny->read( 'file.yml' ); # Get a reference to the first document my $config = $yaml->[0]; # Or read properties directly my $root = $yaml->[0]->{rootproperty}; my $one = $yaml->[0]->{section}->{one}; my $Foo = $yaml->[0]->{section}->{Foo}; # Change data directly $yaml->[0]->{newsection} = { this => 'that' }; # Add a section $yaml->[0]->{section}->{Foo} = 'Not Bar!'; # Change a value delete $yaml->[0]->{section}; # Delete a value # Save the document back to the file $yaml->write( 'file.yml' );
To create a new
# Create a new object with a single hashref document my $yaml = YAML::Tiny->new( { wibble => "wobble" } ); # Add an arrayref document push @$yaml, [ 'foo', 'bar', 'baz' ]; # Save both documents to a file $yaml->write( 'data.yml' );
Then data.yml will contain:
--- wibble: wobble --- - foo - bar - baz
DESCRIPTION
YAML::Tiny is a perl class for reading and writing YAML-style files, written with as little code as possible, reducing load time and memory overhead.Most of the time it is accepted that Perl applications use a lot of memory and modules. The ::Tiny family of modules is specifically intended to provide an ultralight and zero-dependency alternative to many more-thorough standard modules.
This module is primarily for reading human-written files (like simple config files) and generating very simple human-readable files. Note that I said human-readable and not geek-readable. The sort of files that your average manager or secretary should be able to look at and make sense of.
YAML::Tiny does not generate comments, it won't necessarily preserve the order of your hashes, and it will normalise if reading in and writing out again.
It only supports a very basic subset of the full
Usage is targeted at files like Perl's
Features will only be added if they are human readable, and can be written in a few lines of code. Please don't be offended if your request is refused. Someone has to draw the line, and for YAML::Tiny that someone is me.
If you need something with more power move up to
To restate, YAML::Tiny does not preserve your comments, whitespace, or the order of your
METHODS
new
The constructor "new" creates a "YAML::Tiny" object as a blessed array reference. Any arguments provided are taken as separate documents to be serialized.read $filename
The "read" constructor reads aReturns the object on success or throws an error on failure.
read_string $string;
The "read_string" constructor readsReturns the object on success or throws an error on failure.
write $filename
The "write" method generates the file content for the properties, and writes it to disk usingReturns true on success or throws an error on failure.
write_string
Generates the file content for the object and returns it as a character string. This may contain non-ASCII characters and should be encoded before writing it to a file.Returns true on success or throws an error on failure.
errstr (DEPRECATED)
Prior to version 1.57, some errors were fatal and others were available only
via the $YAML::Tiny::errstr variable, which could be accessed via the
"errstr()" method.
Starting with version 1.57, all errors are fatal and throw exceptions.
The $errstr variable is still set when exceptions are thrown, but $errstr and the "errstr()" method are deprecated and may be removed in a future release. The first use of "errstr()" will issue a deprecation warning.
FUNCTIONS
YAML::Tiny implements a number of functions to add compatibility with theDump
my $string = Dump(list-of-Perl-data-structures);
Turn Perl data into
It takes a list of Perl data structures and dumps them into a serialized form.
It returns a character string containing the
The structures can be references or plain scalars.
Dies on any error.
Load
my @data_structures = Load(string-containing-a-YAML-stream);
Turn
Just like Storable's thaw() function or the eval() function in relation to Data::Dumper.
It parses a character string containing a valid
my $last_data_structure = Load(string-containing-a-YAML-stream);
For consistency with
Dies on any error.
freeze() and thaw()
Aliases to Dump() and Load() for Storable fans. This will also allow YAML::Tiny to be plugged directly into modules likeDumpFile(filepath, list)
Writes theDies on any error.
LoadFile(filepath)
Reads theDies on any error.
YAML TINY SPECIFICATION
This section of the documentation provides a specification for ``It is based on and described comparatively to the
Terminology and chapter numbers are based on that specification.
1. Introduction and Goals
The purpose of theMany specification elements that add flexibility or extensibility are intentionally removed, as is support for complex data structures, class and object-orientation.
In general, the
As a result, all possible
As a result of these simplifications the
2. Introduction
The use of three dashes ``---'' to indicate the start of a new document is supported, and multiple documents per file/stream is allowed.
Both line and inline comments are supported.
Scalars are supported via the plain style, single quote and double quote, as well as literal-style and folded-style multi-line scalars.
The use of explicit tags is not supported.
The use of ``null'' type scalars is supported via the ~ character.
The use of ``bool'' type scalars is not supported.
However, serializer implementations should take care to explicitly escape strings that match a ``bool'' keyword in the following set to prevent other implementations that do support ``bool'' accidentally reading a string as a boolean
y|Y|yes|Yes|YES|n|N|no|No|NO |true|True|TRUE|false|False|FALSE |on|On|ON|off|Off|OFF
The use of anchors and aliases is not supported.
The use of directives is supported only for the %YAML directive.
3. Processing YAML Tiny Information
Processes
The
The
Any compliant parser is only required to parse a single document at a time. The ability to support streaming documents is optional and most likely non-typical.
Because anchors and aliases are not supported, the resulting representation graph is thus directed but (unlike the main
Circular references/pointers are not possible, and any
Presentation Stream
Loading Failure Points
4. Syntax
Character Set
The escaping and unescaping of the 8-bit
The escaping and unescaping of 16-bit and 32-bit
Indicator Characters
Support for the ``~'' null/undefined indicator is required.
Implementations may represent this as appropriate for the underlying language.
Support for the ``-'' block sequence indicator is required.
Support for the ``?'' mapping key indicator is not required.
Support for the ``:'' mapping value indicator is required.
Support for the ``,'' flow collection indicator is not required.
Support for the ``['' flow sequence indicator is not required, with one exception (detailed below).
Support for the ``]'' flow sequence indicator is not required, with one exception (detailed below).
Support for the ``{'' flow mapping indicator is not required, with one exception (detailed below).
Support for the ``}'' flow mapping indicator is not required, with one exception (detailed below).
Support for the ``#'' comment indicator is required.
Support for the ``&'' anchor indicator is not required.
Support for the ``*'' alias indicator is not required.
Support for the ``!'' tag indicator is not required.
Support for the ``|'' literal block indicator is required.
Support for the ``>'' folded block indicator is required.
Support for the ``''' single quote indicator is required.
Support for the """ double quote indicator is required.
Support for the ``%'' directive indicator is required, but only for the special case of a %YAML version directive before the ``---'' document header, or on the same line as the document header.
For example:
%YAML 1.1 --- - A sequence with a single element
Special Exception:
To provide the ability to support empty sequences and mappings, support for the constructs [] (empty sequence) and {} (empty mapping) are required.
For example,
%YAML 1.1 # A document consisting of only an empty mapping --- {} # A document consisting of only an empty sequence --- [] # A document consisting of an empty mapping within a sequence - foo - {} - bar
Syntax Primitives
Other than the empty sequence and mapping cases described above,
All five scalar contexts are supported.
Indentation spaces work as per the
Comments work as per the
Separation spaces work as per the
The only directive supported by the
The parser must recognise both the
That is, all of the following should be supported.
--- #YAML:1.0 - foo %YAML:1.0 --- - foo % YAML 1.1 --- - foo
Support for the %TAG directive is not required.
Support for additional directives is not required.
Support for the document boundary marker ``---'' is required.
Support for the document boundary market ``...'' is not required.
If necessary, a document boundary should simply by indicated with a ``---'' marker, with not preceding ``...'' marker.
Support for empty streams (containing no documents) is required.
Support for implicit document starts is required.
That is, the following must be equivalent.
# Full form %YAML 1.1 --- foo: bar # Implicit form foo: bar
Nodes
Support for nodes optional anchor and tag properties is not required.
Support for node anchors is not required.
Support for node tags is not required.
Support for alias nodes is not required.
Support for flow nodes is not required.
Support for block nodes is required.
Scalar Styles
Support for all five scalar styles is required as per the
Support for multi-line scalar documents starting on the header is not required.
Support for the chomping indicators on multi-line scalar styles is required.
Collection Styles
Support for block-style sequences is required.
Support for flow-style sequences is not required.
Support for block-style mappings is required.
Support for flow-style mappings is not required.
Both sequences and mappings should be able to be arbitrarily nested.
Support for plain-style mapping keys is required.
Support for quoted keys in mappings is not required.
Support for ``?''-indicated explicit keys is not required.
Here endeth the specification.
Additional Perl-Specific Notes
For some Perl applications, it's important to know if you really have a number and not a string.That is, in some contexts is important that 3 the number is distinctive from ``3'' the string.
Because even Perl itself is not trivially able to understand the difference (certainly without XS-based modules) Perl implementations of the
SUPPORT
Bugs should be reported via the<rt.cpan.org/NoAuth/ReportBug.html?Queue=YAML-Tiny>
AUTHOR
Adam Kennedy <adamk@cpan.org>SEE ALSO
- *
-
YAML
- *
- YAML::Syck
- *
- Config::Tiny
- *
- CSS::Tiny
- *
- <use.perl.org/use.perl.org/_Alias/journal/29427.html>
- *
- <ali.as>
COPYRIGHT
Copyright 2006 - 2013 Adam Kennedy.This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the