壁紙チェンジャ
ついカッとなって書いた。書くものは何でもよかった。いまは反省している。
use strict; use warnings; use Data::Visitor::Callback; use Imager; use Win32::Wallpaper; use YAML::Syck; my $cfg = shift or die $!; $cfg = LoadFile $cfg; $cfg->{include} = LoadFile './cfg/include.yaml'; my $v = Data::Visitor::Callback->new( ignore_return_values => 1, value => sub { s/%%(.+?)%%/"\$cfg->{include}{process}$1"/ee; }, ); $v->visit($cfg); my $target = $cfg->{wallpaper}{file} || $cfg->{include}{wallpaper}{file}; my $mode = $cfg->{wallpaper}{mode} || $cfg->{include}{wallpaper}{mode}; my $img = Imager->new or die $!; $img->read(file => $cfg->{source}) or die $img->errstr; foreach $_ ( @{ $cfg->{process} } ) { my ($method) = keys %{$_}; my %args = %{ $_->{$method} }; my $ctxt = delete $args{context} || ''; $ctxt eq 'void' ? $img->$method(%args) : $img = $img->$method(%args); } $img->write(file => $target); wallpaper($target, $mode);