=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::Any - Pick a YAML implementation and use it.

=head1 STATUS

WARNING: This module will soon be deprecated. The plan is that YAML.pm itself
will act like an I<Any> module.

=head1 SYNOPSIS

    use YAML::Any;
    $YAML::Indent = 3;
    my $yaml = Dump(@objects);

=head1 DESCRIPTION

There are several YAML implementations that support the Dump/Load API. This
module selects the best one available and uses it.

=head1 ORDER

Currently, YAML::Any will choose the first one of these YAML implementations
that is installed on your system:

=over

=item * YAML::XS

=item * YAML::Syck

=item * YAML::Old

=item * YAML

=item * YAML::Tiny

=back

=head1 OPTIONS

If you specify an option like:

    $YAML::Indent = 4;

And YAML::Any is using YAML::XS, it will use the proper variable:
$YAML::XS::Indent.

=head1 SUBROUTINES

Like all the YAML modules that YAML::Any uses, the following subroutines are
exported by default:

=over

=item * Dump

=item * Load

=back

and the following subroutines are exportable by request:

=over

=item * DumpFile

=item * LoadFile

=back

=head1 METHODS

YAML::Any provides the following class methods.

=over

=item C<< YAML::Any->order >>

This method returns a list of the current possible implementations that
YAML::Any will search for.

=item C<< YAML::Any->implementation >>

This method returns the implementation the YAML::Any will use. This result is
obtained by finding the first member of YAML::Any->order that is either
already loaded in C<%INC> or that can be loaded using C<require>. If no
implementation is found, an error will be thrown.

=back

=head1 EXAMPLES

=head2 DumpFile and LoadFile

Here is an example for C<DumpFile>:

    #!/usr/bin/perl

    use strict;
    use warnings;

    use YAML::Any qw(DumpFile);

    my $ds =
    {
        array => [5,6,100],
        string => "Hello",
    };

    DumpFile("hello.yml", $ds);

When run, this creates a file called C<hello.yml> in the current working
directory, with the following contents.

    ---
    array:
    - 5
    - 6
    - 100
    string: Hello

In turn, the following C<LoadFile> example, loads the contents from there and
accesses them:

    #!/usr/bin/perl

    use strict;
    use warnings;

    use YAML::Any qw(LoadFile);

    my ($ds) = LoadFile("hello.yml");

    print "String == '", $ds->{string}, "'\n";

Assuming C<hello.yml> exists, and is as created by the C<DumpFile> example,
it prints:

    $ perl load.pl
    String == 'Hello'
    $

=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
