写了个下载lumaqq的脚本

写了个下载lumaqq的脚本

复制内容到剪贴板
代码:
[0 N0.2004 huan ~/svn_perl/running ]$ cat lumaqq_download.pl
#! /usr/bin/perl -w

#++++++++++++++++++++++++++++++++++++++++++++++
#
#下载lumaqq的脚本
#可以选择下载补丁或是2005/2006版
#用法: lumaqq_down.pl {patch|2005|2006}
#li-jiahuan AT sohu.com
#
#++++++++++++++++++++++++++++++++++++++++++++++

#use Archive::TarGzip qw( untar );
use HTML::LinkExtractor;
use LWP::Simple qw( get );
use URI qw( new_abs );
use strict;

#消取输出缓冲
$| = 1;

#下载版本
my $version = '';

#运行参数
my $arg = shift;
die "Usage: $0 {patch|2005|2006} \n" unless $arg;

#根据运行参数选择下载版本
if ($arg =~ /^(patch)|(2005)$/){
        $version = "2005";
}
elsif ($arg eq "2006"){
        $version = "2006";
}
else{
        die "Usage: $0 {patch|2005|2006} \n";
}

# 海永下载主页面
my $base = 'http://www.flyzhy.org';
my $page = $base . "/web/lumaqq/lumaqq${version}.html";

print "Trying to get download list ...";
my $html = get($page);
if ($html){
        print "Done\n";
}
else{
        die "Fail: $!";
}

my $LX = new HTML::LinkExtractor();
$LX->parse(\$html);

#下载列表
my %link_available = ();
my $index = 0;
my $link = '';

for my $Link( @{ $LX->links } ) {
        if( $Link->{href}=~ m|$arg| and $Link->{href} !~ /h(t)?ml/i ) {
                $link = URI->new_abs( $Link->{href}, $base );
                $link_available{++$index} = $link;
                print "$index:\t" .$link ."\n";
        }
}

die "No packages available to download" unless %link_available;

print "\nMake a choice to download[1]: ";
chomp ( my $choice = <STDIN> );
$choice = 1 unless $choice;
die "Not valid index: $!" unless $link_available{$choice};

my $link_to_download = $link_available{$choice};
(my $file_downloaded = $link_to_download) =~ s|.*/||;

die "\nFail: $!" if system ("wget -c $link_to_download");
print "\nDone.\n";

#print "\nTrying to extract $file_downloaded ...";
#my $tar =  untar([@file]);


[0 N0.2005 huan ~/svn_perl/running ]$
复制内容到剪贴板
代码:
[130 N0.2007 huan ~/svn_perl/running ]$ ./lumaqq_download.pl 2006
Trying to get download list ...Done
1:      http://www.flyzhy.org/web/download/2006/linux_hotkey.zip
2:      http://www.flyzhy.org/web/download/2006/lumaqq_2006M2-linux_gtk2_x86_no_jre.tar.gz
3:      http://www.flyzhy.org/web/download/2006/lumaqq_2006M2-linux_gtk2_x86_64_no_jre.tar.gz
4:      http://www.flyzhy.org/web/download/2006/lumaqq_2006M2-linux_gtk2_ppc_no_jre.tar.gz

Make a choice to download[1]:

[130 N0.2008 huan ~/svn_perl/running ]$ ./lumaqq_download.pl patch
Trying to get download list ...Done
Parsing of undecoded UTF-8 will give garbage when decoding entities at /usr/local/lib/perl/5.8.8/HTML/PullParser.pm line 83.
1:      http://www.flyzhy.org/web/download/patch/lumaqq_2005_patch_2006.01.22.15.00.zip
2:      http://www.flyzhy.org/web/download/patch/lumaqq_2005_patch_2006.01.17.00.00.zip
3:      http://www.flyzhy.org/web/download/patch/lumaqq_2005_patch_2006.01.11.23.00.zip
4:      http://www.flyzhy.org/web/download/patch/lumaqq_2005_patch_2006.01.01.16.00.zip
5:      http://www.flyzhy.org/web/download/patch/lumaqq_2005_patch_2005.12.25.01.00.zip
6:      http://www.flyzhy.org/web/download/patch/lumaqq_2005_patch_2005.12.25.01.00.zip

Make a choice to download[1]:
      
欢欢的 perl 水平越发见长了 俺都好久不用,快忘没了       
惭愧
只限于小打小闹
写不出好的

我很奇怪
在perl里我会自觉地用散列、数组存储数据
在bash里我想都不想
就 > file里去了
嘻      
bash 不支持 hash, 他的 array 支持的 operation 也十分有限, 远不如 perl 的好用      
bash可用的工具很多
Perl可用的模块很多

写bash时
得判断是否已经安装了所需要工具(程序)
写Perl时
得让别人自己安装CPAN
也是个烦事啊
如果一个不熟悉Perl的使用者拿到你的程序
就会发现运行不了
唉