Mercurial > pub > Impl
view lib/IMPL/Resources/Format.pm @ 418:3f38dabaf5cc ref20150831
sync
author | cin |
---|---|
date | Mon, 28 Dec 2015 15:11:35 +0300 |
parents | c6e90e02dd17 |
children |
line wrap: on
line source
package IMPL::Resources::Format; use strict; use warnings; require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw(&FormatMessage); sub FormatMessage { my ($string,$args,$resolver) = @_; $args ||= {}; $resolver ||= \&_defaultResolver; $string ||= ''; $string =~ s/%(\w+(?:\.\w+)*)%/_getvalue($args,$1,"\[$1\]",$resolver)/ge; return $string; } sub _getvalue { my ($obj,$path,$default,$resolver) = @_; foreach my $chunk (split /\./,$path) { return $default unless $obj; if (ref $obj eq 'HASH') { $obj = $obj->{$chunk}; } else { $obj = $resolver->($obj,$chunk); } } return $obj||'<undef>'; } sub _defaultResolver { my ($obj,$prop) = @_; return eval { $obj->$prop() }; } 1;