use Carp; use constant haveyaml => ( eval 'require YAML;' ? 1 : 0 ); my $META_HIDDEN=1; sub META_HIDDEN : lvalue { $META_HIDDEN } my $META_EXT = 'meta'; sub META_EXT : lvalue { $META_EXT } sub set_meta { my $abs_path = shift; if (ref $abs_path eq __PACKAGE__){ $abs_path = $abs_path->abs_path; } my $meta = shift; ref $meta eq 'HASH' or croak('second argument to set_meta() must be a hash ref'); haveyaml or carp 'set_meta() cant be used, ' .'YAML is not installed.' and return; $abs_path=~s/^(.+\/)([^\/]+$)/$1.$2/ if META_HIDDEN; unless( keys %$meta){ unlink $abs_path .'.'.META_EXT; return 1; } YAML::DumpFile($abs_path .'.'.META_EXT,$meta); return 1; }