Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

how do i parse a yaml set with perl

by david2008 (Scribe)
on Feb 06, 2014 at 09:38 UTC ( #1073672=perlquestion: print w/replies, xml ) Need Help??
david2008 has asked for the wisdom of the Perl Monks concerning the following question:

Hi all, I get a yaml file like described here.
When i try to parse it with YAML::Load i get the following error.
YAML Error: Invalid element in map
   Line: 4
   Document: 1
Which library is capable of parsing this?

Replies are listed 'Best First'.
Re: how do i parse a yaml set with perl ( can't )
by Anonymous Monk on Feb 06, 2014 at 09:58 UTC

    Which library is capable of parsing this?


    YAML is weak :) Re: Loading multiple files with YAML::XS (named streams)

    #!/usr/bin/perl -- use strict; use warnings; use Module::Load qw' load '; use YAML::Any(); my $yaml = q{ # Explicitly typed set. baseball players: !!set ? Mark McGwire ? Sammy Sosa ? Ken Griffey # Flow style baseball teams: !!set { Boston Red Sox, Detroit Tigers, New York Yanke +es } }; MOD_YAML : for my $modYaml ( qw[ YAML::XS YAML::XS::LibYAML YAML::Syck YAML::Old YAML YAML::Tiny ] ){ #~ eval { load $modYaml; 1 } or do { warn $@; next MOD_YAML }; eval { load $modYaml; 1 } or next MOD_YAML; no strict 'refs'; local *Dump = \&{"$modYaml\::Dump"}; local *Load = \&{"$modYaml\::Load"}; local *{"$modYaml\::CompressSeries"} = 0; local *{"$modYaml\::Indent"} = 5; local *{"$modYaml\::UseFold"} = 5; # no visible effect local *{"$modYaml\::UseBlock"} = 1; # 5; # no visible effect, 1 or + 5 print "\n# Using $modYaml\n"; print eval { Dump( Load( $yaml ) ) } || $@; print "\n\n"; }
      Thanks for the quick reply.
      I understand.
      This file is created by a java program using the snakeyaml library. I will ask them to change the set to a hash where the values are 1.

        The order doesn't matter, but the elements are also simple values... why not make it an array?

        If you're making it a hash, then your values are used as the keys of the hash and you have to make up and store dummy values to complete the hash structure. That's confusing and inefficient.

      Could you elucidate on what you did after no strict 'refs' for educational purposes? I preach YAML quite a bit, and while I've heard of problems like what david2008 is having, I've never run up on them because I use the same lib to dump output as I do to process input.

        See YAML::Any, its just old-api way (inspired by Data::Dumper) of specifying formatting options ...

        some never worked, I doubt any of the options works anymore

        its a copy paste from 2009 when ysh disappeared from YAML, and I was seeing what I can see about YAML

        Actually its from 2011 when I took another look at YAML to see if I can roundtrip yaml without changing format; I even went to IRC to ask ingy about it and the answer was no

        Human writable/readable serialization format, great idea
        Uh oh, full spec is so full, its full of full
        Oh boy :) Java is the only language that fully supports the full spec
        Poor humans :) None or very weak editor support
        Damn computers :) No round tripping (what goes out looks nothing like what goes in)
        Awww :) No customizable beautifier ( no Perl::Tidy )

        So great idea, fantastic even, gets upgraded, support never that great, humans not that interested , humans choose JSON, JSON wins

        Maybe when YAML tools improve ten fold, brave folks will look at YAML again, but most will still stick with JSON :)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1073672]
Approved by Corion
[Lady_Aleena]: erix, right, it searches files for a pattern. pcregrep is supposed to do the same thing with the addition of being able to search multiline.
[erix]: ah, pcregrep is a stanalone program?
[Lady_Aleena]: erix, yes.
[Lady_Aleena]: pcre stands for 'Perl Compatible Regular Expressions'.
[erix]: ok, ok, I thought you meant the engine
[perldigious]: Tanktalus: Ha, understandable, that does make it harder when you don't want to move. I assume you are looking at remote work from home jobs too?
[Tanktalus]: yeah, I'm looking at a lot of remote work - I've been working from home since 2002, so I know how to do the work from remote, I just need a new employer ;)
[Lady_Aleena]: Discipulus, I wouldn't know how to get a script to do what the greps do in one line.
[perldigious]: Even working for a large software engineering contractor that's willing to do remote could be an option. The fortune 500 company at $job-- I worked for had quite a lot of that work to hire out to large contractors.
[perldigious]: The pay and benifits leave a lot to be desired though, or so I've heard...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (9)
As of 2017-05-23 19:24 GMT
Find Nodes?
    Voting Booth?