Thread [YAML::PP] Include von YAML welches nicht aus Datei kommt
(6 answers)
Opened by barney at 2023-11-03 18:19
Hier habe ich mal was zusammengebaut.
Dass das snippet mit der id 42 gleichzeitig section 42 und 43 beinhaltet, hat mich etwas verwirrt, aber wie das vom Prinzip her funktoniert, wird hoffentlich klar. Man ordnet den tags !load-snippets und section jeweils code zu, der dann ausgeführt wird und zum einen etwas zurückliefern kann oder auch Daten im Script verändern kann. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 #!/usr/bin/env perl use strict; use warnings; use 5.010; package snippets { my $ypp = YAML::PP->new; my $database = { 42 => <<~'EOM', section_42: key1: val1 key2: val2 section_43: key1: val11 key2: val22 EOM 52 => { }, }; sub load_snippet { my ($id) = @_; my $yaml = $database->{ $id }; } }; package main { use YAML::PP; my $ypp = YAML::PP->new; my $schema = $ypp->schema; my %sections; $schema->add_resolver( tag => "!load-snippets", match => [ all => => sub { my ($constructor, $event) = @_; # load YAML from "database" my $yaml = snippets::load_snippet($event->{value}); my $ypp = YAML::PP->new; my $data = $ypp->load_string($yaml); %sections = (%sections, %$data); return 'placeholder'; }], implicit => 0, ); $schema->add_resolver( tag => "!section", match => [ all => sub { my ($constructor, $event) = @_; my $value = $event->{value}; return $sections{ $value }; }], implicit => 0, ); my ($filename) = @ARGV; my $data = $ypp->load_file($filename); say $ypp->dump_string($data); } Code: (dl
)
1 # snippets.yaml Ausgabe: Code: (dl
)
1 % perl snippets.pl snippets.yaml Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wie frage ich & perlintro brian's Leitfaden für jedes Perl-Problem |