home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2004 December / PCpro_2004_12.ISO / files / webserver / xampp / xampp-perl-addon-1.4.9-installer.exe / YAML.pod < prev    next >
Encoding:
Text File  |  2002-06-14  |  23.1 KB  |  793 lines

  1. =head1 NAME
  2.  
  3. YAML - YAML Ain't Markup Language (tm)
  4.  
  5. =head1 SYNOPSIS
  6.  
  7.     use YAML;
  8.  
  9.     my ($hashref, $arrayref, $string) = Load(<<'--END');
  10.     ---
  11.     name: ingy
  12.     age: old
  13.     weight: heavy
  14.     # I should comment that I also like pink, but don't tell anybody.
  15.     favorite colors:
  16.      - red
  17.      - white
  18.      - blue
  19.     ---
  20.     - clark
  21.     - oren
  22.     - ingy
  23.     --- ]
  24.     You probably think YAML stands for "Yet Another Markup Language". It
  25.     ain't! YAML is really a data serialization language. But if you want
  26.     to think of it as a markup, that's OK with me. A lot of people try
  27.     to use XML as a serialization format.
  28.  
  29.     "YAML" is catchy and fun to say. Try it. "YAML, YAML, YAML!!!"
  30.     --END
  31.  
  32.     print Store($string, $arrayref, $hashref);
  33.  
  34.     use Data::Dumper;
  35.     print Dumper($string, $arrayref, $hashref);
  36.  
  37. =head1 DESCRIPTION
  38.  
  39. The YAML.pm module implements a YAML Loader and Dumper based on the YAML
  40. 1.0 specification. L<http://www.yaml.org/spec/>
  41.  
  42. YAML is a generic data serialization language that is optimized for
  43. human readability. It can be used to express the data structures of most
  44. modern programming languages. (Including Perl!!!)
  45.  
  46. For information on the YAML syntax, please refer to the YAML
  47. specification at L<http://www.yaml.org/spec/>.
  48.  
  49. =head1 WHY YAML IS COOL
  50.  
  51. =over 4
  52.  
  53. =item YAML is readable for people.
  54.  
  55. It makes clear sense out of complex data structures. You should find
  56. that YAML is an exceptional data dumping tool. Structure is shown
  57. through indentation, YAML supports recursive data, and hash keys are
  58. sorted by default. In addition, YAML supports several styles of scalar
  59. formatting for different types of data.
  60.  
  61. =item YAML is editable.
  62.  
  63. YAML was designed from the ground up to be the ultimate syntax for
  64. configuration files. All almost all programs need configuration files,
  65. so why invent a new syntax for each one. And why subject users to the
  66. complexities of XML or native Perl code.
  67.  
  68. =item YAML is multilingual.
  69.  
  70. Yes, YAML supports Unicode. But I'm actually referring to programming
  71. languages. YAML was designed to meet the serialization needs of Perl,
  72. Python, Tcl, PHP, Java. It was also designed to be interoperable between
  73. those languages. That means any YAML serialization produced by Perl can
  74. be processed by Python, and be guaranteed to return the data structure
  75. intact. (Even if it contained Perl specific structures like GLOBs)
  76.  
  77. =item YAML is taint safe.
  78.  
  79. Using modules like Data::Dumper for serialization is fine as long as you
  80. can be sure that nobody can tamper with your data files or
  81. transmissions. That's because you need to use Perl's C<eval()> built-in
  82. to deserialize the data. Somebody could add a snippet of Perl to erase
  83. your files.
  84.  
  85. YAML's parser does not need to eval anything.
  86.  
  87. =item YAML is full featured.
  88.  
  89. YAML can accurately serialize all of the common Perl data structures and
  90. deserialize them again without losing data relationships. Although it is
  91. not 100% perfect (no serializer is or can be perfect), it fares as well
  92. as the popular current modules: Data::Dumper, Storable, XML::Dumper and
  93. Data::Denter.
  94.  
  95. YAML.pm also has the ability to handle code (subroutine) references and
  96. typeglobs. (Still experimental) These features are not found in Perl's
  97. other serialization modules.
  98.  
  99. =item YAML is extensible.
  100.  
  101. YAML has been designed to be flexible enough to solve it's own problems.
  102. The markup itself has 3 basic construct which resemble Perl's hash,
  103. array and scalar. By default, these map to their Perl equivalents. But
  104. each YAML node also supports a type (or "transfer method") which can
  105. cause that node to be interpreted in a completely different manner.
  106. That's how YAML can support oddball structures like Perl's typeglob.
  107.  
  108. =item YAML.pm plays well with others.
  109.  
  110. YAML has been designed to interact well with other Perl Modules like POE,
  111. Date::ICal and Time::Object. (date support coming soon)
  112.  
  113. =back
  114.  
  115. =head1 USAGE
  116.  
  117. =head2 Exported Functions
  118.  
  119. The following functions are exported by YAML.pm by default when you use
  120. YAML.pm like this:
  121.  
  122.     use YAML;
  123.  
  124. To prevent YAML.pm from exporting functions, say:
  125.  
  126.     use YAML ();
  127.  
  128. =over 4
  129.  
  130. =item Store(list of Perl data structures)
  131.  
  132. Turn Perl data into YAML. This function works very much like
  133. Data::Dumper::Dumper(). It takes a list of Perl data strucures and
  134. dumps them into a serialized form. It returns a string containing the
  135. YAML stream. The structures can references or plain scalars.
  136.  
  137. =item Load(string containing a YAML stream)
  138.  
  139. Turn YAML into Perl data. This is the opposite of Data::Dumper; kind
  140. of like the eval() function. It parses a string containing a valid
  141. YAML stream into a list of Perl data structures. In list context YAML
  142. will return a stucture for each YAML document in the stream.
  143.  
  144. =back
  145.  
  146. =head2 Exportable Functions
  147.  
  148. =over 4
  149.  
  150. =item StoreFile(filepath, list)
  151.  
  152. Writes the YAML stream to a file instead of just returning a string.
  153.  
  154. =item LoadFile(filepath)
  155.  
  156. Reads the YAML stream from a file instead of a string.
  157.  
  158. =item Dumper()
  159.  
  160. Alias to Store(). For Data::Dumper fans.
  161.  
  162. =item Eval()
  163.  
  164. Alias to Load(). For Data::Dumper fans.
  165.  
  166. =item Indent()
  167.  
  168. Alias to Store(). For Data::Denter fans.
  169.  
  170. =item Undent()
  171.  
  172. Alias to Load(). For Data::Denter fans.
  173.  
  174. =item Denter()
  175.  
  176. Alias to Store(). For Data::Denter fans.
  177.  
  178. =item freeze()
  179.  
  180. Alias to Store(). For Storable fans.
  181.  
  182. This will also allow YAML.pm to be plugged directly into POE.pm.
  183.  
  184. =item thaw()
  185.  
  186. Alias to Load(). For Storable fans.
  187.  
  188. This will also allow YAML.pm to be plugged directly into POE.pm.
  189.  
  190. =back
  191.  
  192. =head2 Exportable Function Groups
  193.  
  194. This is a list of the various groups of exported functions that you can import
  195. using the following syntax:
  196.  
  197.     use YAML ':groupname';
  198.  
  199. =over 4
  200.  
  201. =item all
  202.  
  203. Imports Store(), Load(), StoreFile() and LoadFile().
  204.  
  205. =item POE
  206.  
  207. Imports freeze() and thaw().
  208.  
  209. =item Dumper
  210.  
  211. Imports Dumper() and Eval().
  212.  
  213. =item Denter
  214.  
  215. Imports Denter(), Indent() and Undent().
  216.  
  217. =item Storable
  218.  
  219. Imports freeze() and thaw().
  220.  
  221. =back
  222.  
  223. =head2 Class Methods
  224.  
  225. YAML can also be used in an object oriented manner. At this point it
  226. offers no real advantage.
  227.  
  228. =over 4
  229.  
  230. =item new()
  231.  
  232. New returns a new YAML object. Options may be passed in as
  233. key/value pairs. For example:
  234.  
  235.     my $y = YAML->new(Separator => '--foo',
  236.                       SortKeys => 0,
  237.                      );
  238.     $y->store($foo, $bar);
  239.  
  240. =back
  241.  
  242. =head2 Object Methods
  243.  
  244. =over 4
  245.  
  246. =item store()
  247.  
  248. OO version of Store().
  249.  
  250. =item load()
  251.  
  252. OO version of Load().
  253.  
  254. =back
  255.  
  256. =head2 Options
  257.  
  258. YAML options are set using a group of global variables in the YAML
  259. namespace. This is similar to how Data::Dumper works.
  260.  
  261. For example, to change the separator string, do something like:
  262.  
  263.     $YAML::Separator = '--<$>';
  264.  
  265. The current options are:
  266.  
  267. =over 4
  268.  
  269. =item Indent
  270.  
  271. This is the number of characters to use for each indentation level when
  272. doing a Store(). The default is 1.
  273.  
  274. By the way, YAML can use any number of characters for indentation at
  275. any level. So if you are editing YAML by hand feel free to do it anyway that
  276. looks pleasing to you; just be consistent for a given level.
  277.  
  278. =item Separator
  279.  
  280. Default is '---'.
  281.  
  282. This is the MIME like string that separates YAML documents in a stream.
  283. It must start with two dashes, and then be followed by one or more
  284. non-whitespace characters. ( '---' is the canonical form. )
  285.  
  286. =item UseHeader
  287.  
  288. Default is 1. (true)
  289.  
  290. This tells YAML.pm whether use a separator string for a Store operation.
  291.  
  292. NOTE:
  293. It is currently illegal to not begin a YAML stream with a separator if
  294. there are more than one documents in the YAML stream.
  295.  
  296. =item UseVersion
  297.  
  298. Default is 1. (true)
  299.  
  300. Tells YAML.pm whether to include the YAML version on the
  301. separator/header.
  302.  
  303. The canonical form is:
  304.  
  305.     --- YAML:1.0
  306.  
  307. =item SortKeys
  308.  
  309. Default is 1. (true)
  310.  
  311. Tells YAML.pm whether or not to sort hash keys when storing a document.
  312.  
  313. =item UseCode
  314.  
  315. Setting the UseCode option is a shortcut to set both the StoreCode and
  316. LoadCode options at once. Setting UseCode to '1' tells YAML.pm to dump
  317. Perl code references as Perl (using B::Deparse) and to load them back
  318. into memory using eval(). The reason this has to be an option is that
  319. using eval() to parse untrusted code is, well, untrustworthy. Safe
  320. deserialization is one of the core goals of YAML.
  321.  
  322. =item StoreCode
  323.  
  324. Determines if and how YAML.pm should serialize Perl code references. By
  325. default YAML.pm will store code references as dummy placeholders (much
  326. like Data::Dumper). If StoreCode is set to '1' or 'deparse', code
  327. references will be dumped as actual Perl code.
  328.  
  329. StoreCode can also be set to a subroutine reference so that you can
  330. write your own serializing routine. YAML.pm passes you the code ref. You
  331. pass back the serialization (as a string) and a format indicator. The
  332. format indicator is a simple string like: 'deparse' or 'bytecode'.
  333.  
  334. =item LoadCode
  335.  
  336. LoadCode is the opposite of StoreCode. It tells YAML if and how to
  337. deserialize code references. When set to '1' or 'deparse' it will use
  338. C<eval()>. Since this is potentially risky, only use this option if you
  339. know where your YAML has been.
  340.  
  341. LoadCode can also be set to a subroutine reference so that you can write
  342. your own deserializing routine. YAML.pm passes the serialization (as a
  343. string) and a format indicator. You pass back the code reference.
  344.  
  345. =item UseBlock
  346.  
  347. YAML.pm uses heuristics to guess which scalar style is best for a
  348. given node. Sometimes you'll want all multiline scalars to use the
  349. 'block' style. If so, set this option to 1.
  350.  
  351. =item UseFold
  352.  
  353. If you want to force YAML to use the 'folded' style for all multiline scalars,
  354. then set $UseFold to 1.
  355.  
  356. =back
  357.  
  358. =head1 YAML TERMINOLOGY
  359.  
  360. YAML is a full featured data serialization language, and thus has its
  361. own terminology.
  362.  
  363. It is important to remember that although YAML is heavily influenced by
  364. Perl and Python, it is a language in it's own right, not merely just a
  365. representation of Perl structures.
  366.  
  367. YAML has three constructs that are conspicuously similar to Perl's hash,
  368. array, and scalar. They are called map, sequence, and scalar
  369. respectively. By default, they do what you would expect. But each
  370. instance may have an explicit or implicit type that makes it behave
  371. differently. In this manner, YAML can be extended to represent Perl's
  372. Glob or Python's tuple, or Ruby's Bigint.
  373.  
  374. =over 4
  375.  
  376. =item stream
  377.  
  378. A YAML stream is the full sequence of bytes that a YAML parser would
  379. read or a YAML emitter would write. A stream may contain one or more YAML
  380. documents separated by YAML headers.
  381.  
  382.     ---
  383.     a: map
  384.     foo: bar
  385.     ---
  386.     - a
  387.     - sequence
  388.  
  389. =item document
  390.  
  391. A YAML document is an independent data structure representation within a
  392. stream. It is a top level node.
  393.  
  394.     --- YAML:1.0
  395.     This: top level map
  396.     is:
  397.      - a
  398.      - YAML
  399.      - document
  400.  
  401. =item node
  402.  
  403. A YAML node is the representation of a particular data stucture. Nodes
  404. may contain other nodes. (In Perl terms, nodes are like scalars.
  405. Strings, arrayrefs and hashrefs. But this refers to the serialized
  406. format, not the in-memory structure.)
  407.  
  408. =item transfer method
  409.  
  410. This is similar to a type. It indicates how a particular YAML node
  411. serialization should be transferred into or out of memory. For instance
  412. a Foo::Bar object would use the transfer 'perl/map:Foo::Bar':
  413.  
  414.     - !perl/map:Foo::Bar
  415.      foo: 42
  416.      bar: stool
  417.  
  418. A transfer method can be used to 'cast' a YAML node to a different type
  419. of Perl Structure. For instance, the following represents a perl
  420. B<array> with 43 entries:
  421.  
  422.     sparse array: !seq
  423.      1: one
  424.      2: two
  425.      42: forty two
  426.  
  427. =item collection
  428.  
  429. A collection is a YAML data grouping. YAML has two types of collections:
  430. maps and sequences. (Similar to hashes and arrays)
  431.  
  432. =item map
  433.  
  434. A map is a YAML collection defined by key/value pairs. By default YAML
  435. maps are loaded into Perl hashes.
  436.  
  437.     a map:
  438.      foo: bar
  439.      two: times two is 4
  440.  
  441. =item sequence
  442.  
  443. A sequence is a YAML collection defined by an ordered list of elements. By
  444. default YAML sequences are loaded into Perl arrays.
  445.  
  446.     a sequence:
  447.      - one bourbon
  448.      - one scotch
  449.      - one beer
  450.  
  451. =item scalar
  452.  
  453. A scalar is a YAML node that is a single value. By default YAML scalars
  454. are loaded into Perl scalars.
  455.  
  456.     a scalar key: a scalar value
  457.  
  458. YAML has six styles for representing scalars. This is important because
  459. varying data will have varying formatting requirements to retain the
  460. optimum human readability.
  461.  
  462. =item simple scalar
  463.  
  464. This is a single line of unquoted text. All simple scalars are automatic
  465. candidates for "implicit transferring". This means that their B<type> is
  466. determined automatically by examination. Unless they match a set of
  467. predetermined YAML regex patterns, they will raise a parser exception.
  468. The typical uses for this are simple alpha strings, integers, real
  469. numbers, dates, times and currency.
  470.  
  471.     - a simple string
  472.     - -42
  473.     - 3.1415
  474.     - 12:34
  475.     - 123 this is an error
  476.  
  477. =item single quoted scalar
  478.  
  479. This is similar to Perl's use of single quotes. It means no escaping and
  480. no implicit transfer. It must be used on a single line.
  481.  
  482.     - 'When I say ''\n'' I mean "backslash en"'
  483.  
  484. =item double quoted scalar
  485.  
  486. This is similar to Perl's use of double quotes. Character escaping can
  487. be used. There is no implicit transfer and it must still be single line.
  488.  
  489.     - "This scalar\nhas two lines"
  490.  
  491. =item folded scalar
  492.  
  493. This is a multiline scalar which begins on the next line. It is
  494. indicated by a single closing brace. It is unescaped like the single
  495. quoted scalar. Line folding is also performed.
  496.  
  497.     - ]
  498.      This is a multiline scalar which begins on
  499.      the next line. It is indicated by a single
  500.      carat. It is unescaped like the single
  501.      quoted scalar. Line folding is also
  502.      performed.
  503.  
  504. =item block scalar
  505.  
  506. This final multiline form is akin to Perl's here-document except that
  507. (as in all YAML data) scope is indicated by indentation. Therefore, no
  508. ending marker is required. The data is verbatim. No line folding.
  509.  
  510.     - |
  511.         QTY  DESC          PRICE  TOTAL
  512.         ---  ----          -----  -----
  513.           1  Foo Fighters  $19.95 $19.95
  514.           2  Bar Belles    $29.95 $59.90
  515.  
  516. =item escaped scalar
  517.  
  518. Either the folded or block styles of multiline scalars can support
  519. backslash style escapes. This is accomplished by appending a backslash
  520. to the indicator.
  521.  
  522.     - ]\
  523.      This is a multiline scalar which begins
  524.      on the next line.\nIt is indicated by
  525.      an added backslash.\nIt is escaped like
  526.      the double quoted scalar and subject to
  527.      line folding.
  528.  
  529. =item parser
  530.  
  531. A YAML processor has for stages: parse, load, dump, emit.
  532.  
  533. A parser parses a YAML stream. YAML.pm's Load() function contains a
  534. parser.
  535.  
  536. =item loader
  537.  
  538. The other half of the Load() function is a loader. This takes the
  539. information from the parser and loads it into a Perl data structure.
  540.  
  541. =item dumper
  542.  
  543. The Store() function consists of a dumper and an emitter. The dumper
  544. walks through each Perl data structure and gives info to the emitter.
  545.  
  546. =item emitter
  547.  
  548. The emitter takes info from the dumper and turns it into a YAML stream.
  549.  
  550. NOTE:
  551. In YAML.pm the parser/loader and the dumper/emitter code are currently
  552. very closely tied together. When libyaml is written (in C) there will be
  553. a definite separation. libyaml will contain a parser and emitter, and
  554. YAML.pm (and YAML.py etc) will supply the loader and dumper.
  555.  
  556. =back
  557.  
  558. For more information please refer to the immensely helpful YAML
  559. specification available at L<http://www.yaml.org/spec/>.
  560.  
  561. =head1 ysh - The YAML Shell
  562.  
  563. The YAML distribution ships with a script called 'ysh', the YAML shell.
  564. ysh provides a simple, interactive way to play with YAML. If you type in
  565. Perl code, it displays the result in YAML. If you type in YAML it turns
  566. it into Perl code.
  567.  
  568. To run ysh, (assuming you installed it along with YAML.pm) simply type:
  569.  
  570.     ysh [options]
  571.  
  572. Please read L<ysh> for the full details. There are lots of options.
  573.  
  574. =head1 BUGS & DEFICIENCIES
  575.  
  576. If you find a bug in YAML, please try to recreate it in the YAML Shell
  577. with logging turned on ('ysh -L'). When you have successfully reproduced
  578. the bug, please mail the LOG file to the author (ingy@cpan.org).
  579.  
  580. WARNING: This is *ALPHA* code. It is brand spanking new. It probably has
  581. lots of bugs and speling mistakes.
  582.  
  583. BIGGER WARNING: This is *TRIAL1* of the YAML 1.0 specification. The YAML
  584. syntax may change before it is finalized. Based on past experience, it
  585. probably will change. The authors of this spec have worked for the past
  586. seven months putting together YAML 1.0, and we have flipped it on it's
  587. syntactical head almost every week. We're a fickle lot, we are. So use
  588. this at your own risk!!!
  589.  
  590. (OK, don't get too scared. We *are* pretty happy with the state of
  591. things right now. And we *have* agreed to freeze this TRIAL1 for the
  592. next couple of months to get user feedback. At the end of the trial
  593. period, the syntax may end up changing slightly, but the spirit should
  594. remain the same.)
  595.  
  596. =over 4
  597.  
  598. =item Circular Leaves
  599.  
  600. YAML is quite capable of serializing circular references. And for the
  601. most part it can deserialize them correctly too. One notable exception
  602. is a reference to a leaf node containing itself. This is hard to do from
  603. pure Perl in any elegant way. The "canonical" example is:
  604.  
  605.     $foo = \$foo;
  606.  
  607. This serializes fine, but I can't parse it correctly yet. Unfortunately,
  608. every wiseguy programmer in the world seems to try this first when you
  609. ask them to test your serialization module. Even though it is of almost
  610. no real world value. So please don't report this bug unless you have a
  611. pure Perl patch to fix it for me.
  612.  
  613. By the way, similar non-leaf structures Store and Load just fine:
  614.  
  615.     $foo->[0] = $foo;
  616.  
  617. You can test these examples using 'ysh -r'. This option makes sure that
  618. the example can be deserialized after it is serialized. We call that
  619. "roundtripping", thus the '-r'.
  620.  
  621. =item Unicode
  622.  
  623. Unicode is not yet supported. The YAML specification dictates that all
  624. strings be unicode, but this early implementation just uses ASCII.
  625.  
  626. =item Structured Keys
  627.  
  628. Python, Java and perhaps others support using any data type as the
  629. key to a hash. YAML also supports this. Perl5 only uses strings as
  630. hash keys.
  631.  
  632. YAML.pm can currently parse structured keys, but their meaning gets lost
  633. when they are loaded into a Perl hash. Consider this example using the
  634. YAML Shell:
  635.  
  636.     ysh > ---
  637.     yaml> ?
  638.     yaml>  foo: bar
  639.     yaml> : baz
  640.     yaml> ...
  641.     $VAR1 = {
  642.               'HASH(0x1f1d20)' => 'baz'
  643.             };
  644.     ysh >
  645.  
  646. YAML.pm will need to be fixed to preserve these keys somehow. Why?
  647. Because if YAML.pm gets a YAML document from YAML.py it must be able to
  648. return it with the Python data intact.
  649.  
  650. =item Tuples and Others
  651.  
  652. YAML.pm will also support other non-Perl data structures like Python's
  653. tuples. In this case, and many others, Perl will still be able to make
  654. partial use of the foreign critters, because YAML.pm will attempt to map
  655. them into something close. Since a Python tuple is close to a Perl
  656. array, that's what YAML.pm will map it into. It will then either tie or
  657. bless the array into the special class 'org.yaml.tuple', so it can keep
  658. track of what the structure originally was. In this way, a Perl program
  659. can still make intuitive use of the structure.
  660.  
  661. 'org.yaml.tuple' and other special types have not yet been implemented.
  662.  
  663. =item Globs, Subroutines, Regexes and Tied Data
  664.  
  665. As far as I know, other Perl serialization modules are not capable of
  666. serializing and deserializing typeglobs, subroutines (code refs),
  667. regexes and tied data structures. This release adds preliminary support
  668. for serializing code refs. (Using B::Deparse and eval()). It also adds
  669. Load support (to the existing Store support) for globs.
  670.  
  671. NOTE: For a (huge) dump of Perl's global guts, try:
  672.  
  673.     perl -MYAML -e '$YAML::UseCode=1; print Store \%main::'
  674.  
  675. To limit this to a single namespace try:
  676.  
  677.     perl -MCGI -MYAML -e '$YAML::UseCode=1; print Store \%CGI::'
  678.  
  679. =item Speed
  680.  
  681. This is a pure Perl implementation that has been optimized for
  682. programmer readability, not for computational speed. The hope is that
  683. others will be able to quickly convert this module into other languages
  684. like Python, Tcl, PHP, Ruby, JavaScript and Java.
  685.  
  686. Eventually there will be a core library, libyaml, written in C. Most
  687. implementations, including this one, should be migrated to use that
  688. core library.
  689.  
  690. Please join us on the YAML mailing list if you are interested in
  691. implementing something.
  692.  
  693. L<https://lists.sourceforge.net/lists/listinfo/yaml-core>
  694.  
  695. =item Streaming Access
  696.  
  697. This module Stores and Loads in one operation. There is no interface
  698. for parsing or emitting a YAML stream one node at a time. It's all
  699. or nothing.
  700.  
  701. A serial interface will probably be supported by an entirely different
  702. module or set of modules. Something like YAML::Serial, or YAML::Parser
  703. and YAML::Emitter.
  704.  
  705. =back
  706.  
  707. =head1 RESOURCES
  708.  
  709. L<http://www.yaml.org> is the official YAML website.
  710.  
  711. L<http://www.yaml.org/spec/> is the YAML 1.0 specification.
  712.  
  713. YAML has been registered as a Source Forge project.
  714. (L<http://www.sourceforge.net>) Currently we are only using the mailing
  715. list facilities there.
  716.  
  717. =head1 IMPLEMENTATIONS
  718.  
  719. This is the first implementation of YAML functionality based on the 1.0
  720. specification.
  721.  
  722. The following people have shown an interest in doing implementations.
  723. Please contact them if you are also interested in writing an
  724. implementation.
  725.  
  726.     ---
  727.     - name:    ingy
  728.       project: YAML.pm
  729.       email:   ingy@ttul.org
  730.  
  731.     - name:    Clark Evans
  732.       project: libyaml
  733.       email:   cce@clarkevans.com
  734.  
  735.     - name:    Oren Ben-Kiki
  736.       project: Java Loader/Dumper
  737.       email:   orenbk@richfx.com
  738.  
  739.     - name:    Jon Prettyman
  740.       project: libyaml
  741.       email:   jon@prettyman.org
  742.  
  743.     - name:    Paul Prescod
  744.       project: YAML Antagonist/Anarchist
  745.       email:   paul@prescod.net
  746.  
  747.     - name:    Patrick Leboutillier
  748.       project: Java Loader/Dumper
  749.       email:   patrick_leboutillier@hotmail.com
  750.  
  751.     - name:    Shane Caraveo
  752.       project: PHP Loader/Dumper
  753.       email:   shanec@activestate.com
  754.  
  755.     - name:    Neil Kandalgoankar
  756.       project: Python Loader/Dumper
  757.       email:   neil_j_k@yahoo.com
  758.  
  759.     - name:    Brian Quinlan
  760.       project: Python Loader/Dumper
  761.       email:   brian@sweetapp.com
  762.  
  763.     - name:    Jeff Hobbs
  764.       project: Tcl Loader/Dumper
  765.       email:   jeff@hobbs.org
  766.  
  767.     - name:    Claes Jacobsson
  768.       project: JavaScript Loader/Dumper
  769.       email:   claes@contiller.se
  770.  
  771.     - name:    Neil Watkiss
  772.       project: YAML mode for the vim editor
  773.       email:   nwatkiss@ttul.org
  774.  
  775. =head1 AUTHOR
  776.  
  777. Brian Ingerson <INGY@cpan.org> is resonsible for YAML.pm.
  778.  
  779. The YAML language is the result of a ton of collaboration between Oren
  780. Ben-Kiki, Clark Evans and Brian Ingerson. Several others have added help
  781. along the way.
  782.  
  783. =head1 COPYRIGHT
  784.  
  785. Copyright (c) 2001, 2002. Brian Ingerson. All rights reserved.
  786.  
  787. This program is free software; you can redistribute it and/or modify it
  788. under the same terms as Perl itself.
  789.  
  790. See L<http://www.perl.com/perl/misc/Artistic.html>
  791.  
  792. =cut
  793.