Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226562
  • 博文数量: 36
  • 博客积分: 1188
  • 博客等级: 军士长
  • 技术积分: 802
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 21:45
文章分类

全部博文(36)

文章存档

2020年(1)

2017年(2)

2015年(1)

2014年(1)

2013年(1)

2012年(3)

2011年(27)

分类: WINDOWS

2011-08-13 16:11:01

将之前用AnyEvent与Moose写的备份文件的小工具改成了使用POE。
#use Acme::PerlTidy;

use POE;
use File::Xcopy qw(xcopy find_files);

POE::Session->create(
    inline_states => {
        _start     => \&Start,
        _FindFiles => \&_FindFiles,
        _Backup    => \&_Backup,
        _Exit      => \&_Exit,
    },
);
POE::Kernel->run;

sub Start {
    my ( $kernel, $heap ) = @_[ KERNEL, HEAP ];
    $heap->{from_dir} = 'G:/结果';
    $heap->{to_dir}   = 'D:/结果';
    $heap->{regex}    = '.*';

    print 'select a number:', "\n";
    my $prompt = 'which will you chose:';
    my @array  = qw(FindFiles Backup Exit);
    return '' unless @array;
    print "  $_:$array[$_]\n" for ( 0 .. $#array );
    print $prompt;
    my $n = <>;
    if ( $n =~ /^\d+$/ and defined $array[$n] ) {
        print "You chose:$array[$n]\n";
        my $block = '_' . $array[$n];
        $kernel->yield($block);
    }
}

sub _Backup {
    my ( $kernel, $heap ) = @_[ KERNEL, HEAP ];

    #如不存在目标备份文件夹(copy_to_dir)则新建同名文件夹
    mkdir( $heap->{to_dir} ) if ( !-e $heap->{to_dir} );
    my $fx = File::Xcopy->new;
    my %p = ( s => 1 );
    $fx->xcp( $heap->{from_dir}, $heap->{to_dir}, $heap->{regex}, \%p );
    $kernel->yield('_start');
}

#列出文件清单
sub _FindFiles {
    my ( $kernel, $heap ) = @_[ KERNEL, HEAP ];
    my $fx = File::Xcopy->new;
    my $ar = $fx->find_files( $heap->{from_dir}, $heap->{regex} );
    open my $fh, ">目录.txt";
    for my $ar_file ( @{$ar} ) {
        print "\t$ar_file->{path}\n";
        print $fh "$ar_file->{path}\n";
    }
    close $fh;
    $kernel->yield('_start');
}

sub _Exit { exit 0 }


阅读(1750) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~