=pod

=for comment
DO NOT EDIT. This Pod was generated by Swim v0.1.46.
See http://github.com/ingydotnet/swim-pm#readme

=encoding utf8

=head1 NAME

YAML::Node - A generic data node that encapsulates YAML information

=head1 SYNOPSIS

    use YAML;
    use YAML::Node;

    my $ynode = YAML::Node->new({}, 'ingerson.com/fruit');
    %$ynode = qw(orange orange apple red grape green);
    print Dump $ynode;

yields:

    --- !ingerson.com/fruit
    orange: orange
    apple: red
    grape: green

=head1 DESCRIPTION

A generic node in YAML is similar to a plain hash, array, or scalar node in
Perl except that it must also keep track of its type. The type is a URI called
the YAML type tag.

YAML::Node is a class for generating and manipulating these containers. A YAML
node (or ynode) is a tied hash, array or scalar. In most ways it behaves just
like the plain thing. But you can assign and retrieve and YAML type tag URI to
it. For the hash flavor, you can also assign the order that the keys will be
retrieved in. By default a ynode will offer its keys in the same order that
they were assigned.

YAML::Node has a class method call new() that will return a ynode. You pass
it a regular node and an optional type tag. After that you can use it like
a normal Perl node, but when you YAML::Dump it, the magical properties will
be honored.

This is how you can control the sort order of hash keys during a YAML
serialization. By default, YAML sorts keys alphabetically. But notice in the
above example that the keys were Dumped in the same order they were assigned.

YAML::Node exports a function called ynode(). This function returns the tied
object so that you can call special methods on it like ->keys().

keys() works like this:

    use YAML;
    use YAML::Node;

    %$node = qw(orange orange apple red grape green);
    $ynode = YAML::Node->new($node);
    ynode($ynode)->keys(['grape', 'apple']);
    print Dump $ynode;

produces:

    ---
    grape: green
    apple: red

It tells the ynode which keys and what order to use.

ynodes will play a very important role in how programs use YAML. They are
the foundation of how a Perl class can marshall the Loading and Dumping of
its objects.

The upcoming versions of YAML.pm will have much more information on this.

=head1 AUTHOR

Ingy döt Net <ingy@cpan.org>

=head1 COPYRIGHT

Copyright 2001-2014. Ingy döt Net

This program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.

See L<http://www.perl.com/perl/misc/Artistic.html>

=cut
