Skip to content

Instantly share code, notes, and snippets.

@akanehara
Last active October 25, 2016 02:27
Show Gist options
  • Save akanehara/8f16733217a289d1e8cddc79dd7a0621 to your computer and use it in GitHub Desktop.
Save akanehara/8f16733217a289d1e8cddc79dd7a0621 to your computer and use it in GitHub Desktop.
YAMLのノードをトラバース
#!/usr/bin/perl
use strict;
use warnings;
use YAML;
use File::Basename 'basename', 'dirname';
sub usage {
my $script = basename $0;
print "Traverse YAML structure\n";
print "Usage: $script yaml-file\n";
}
my $fname = $ARGV[0];
unless ($fname) {
usage;
exit 1;
}
traverse(YAML::LoadFile($fname), "", *STDOUT);
sub traverse {
my ($node, $path, $writer) = @_;
if ('ARRAY' eq ref $node) {
my $i = 0;
for (@{$node}) {
traverse($_, "$path\[$i\]", $writer);
$i++;
}
return
}
if ('HASH' eq ref $node) {
for (keys %{$node}) {
traverse($node->{$_}, "$path.$_", $writer);
}
return
}
print $writer "$path\t$node\n";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment