#!/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); }