Path::Classでnew_absみたいな
ファイルシステムだから、単純にはいかないのだけれども、URIのnew_absの様なものが欲しい時がある。
Path::Classなら、両方ファイルだとして、
my $abs = Path::Class::file( Path::Class::file($base)->dir, $path );
ってやればできる。
File::Specなら
my $abs = File::Spec->rel2abs( $path, $base );
むしろこっちの方が単純だったか。。
↓上を利用してYAMLで外部ファイルをinclude
use YAML;
use Path::Class;
sub LoadFile {
my $file = shift;
&_loadfile({}, $file );
}
sub _loadfile {
my $args = shift;
my $file = Path::Class::file( @_ );
my $hashref = YAML::LoadFile($file);
if ( $hashref->{include} ) {
die "'include' must be array or scallar"
if ( ref $hashref->{include} && ref $hashref->{include} eq "HASH");
$hashref->{include} = [ $hashref->{include} ]
unless ref $hashref->{include};
my %include_hash;
foreach my $include ( @{ delete $hashref->{include} } ) {
my $include_hash = &_loadfile( $args, $file->dir, $include );
%include_hash = ( %include_hash, %$include_hash );
}
$hashref = { %include_hash, %$hashref };
}
return $hashref;
}