以前的一下perl代码分享
今天去参加了开源中国的一个源创会,感觉好隆重的样子,近五百人,BAT的工程师都过来演讲了,可都是数据库相关的, 我一个的都没有听懂,但是茶歇的披萨我倒是吃了不少。
说到开源中国,我想起来了我以前在上面分享的代码,上去看了看,竟然有那么多的访问量了,让我蛮意外的,那些代码完全是我学习perl的历程的真实写照。
http://www.oschina.net/code/list_by_user?id=1990747
我抽出几个代码共享给你大家,并简单讲讲。
首先是三行perl代码即可批量下载页面里面所有的图片
[perl]
$html=`curl http://www.u148.net/article/69164.html`;
@img=$html=~m{<img.*?src="([^"]*)".*?>}g;
#print "$_\n" foreach @img;这一行代码是注释,出现问题是可以打开看看捕获的下载地址到底是什么
map {`wget $_`} @img;
[/perl]
这个代码非常有用,其实很多浏览器现在也有这个功能,就是批量下载网页所有图片嘛。这个代码也非常简单。主要利用了curl和wget在两个linux自带的命令工具,然后用了匹配找寻源代码里面的图片标签及地址。
然后是根据一个ID列表文件来从一个fasta文件里面挑取符合要求的序列。
其中一个文件是ID列表,一个ID占一行,另一个文件是fasta格式的序列,一行是>开头的标记,该标记下所有行都是该标记的内容,直到下一个>开头的标记
[perl]
#!/usr/bin/perl -w
if( @ARGV != 2 )
{
print "Usage: we need two files\n";
exit 0;
}
my $ID=shift @ARGV;
my $fasta=shift @ARGV;
open FH1,"<$ID" or die "can not open the file,$!";
while (<FH1>)
{
chomp;
$hash{$_}=1;
}
#读取第一个参数,ID列表,每一行的ID都扫描进去hash表
open FH2,"$fasta" or die "can not open the file,$!";
while(defined($line=<FH2>))
{
chomp $line;
if($line =~ />/)
{
$key = (split /\s/,$line)[0];
$key =~ s/>//g;
$flag = exists $hash{$key}?1:0;
}#这个flag是用来控制这个标记下面的序列是否输出
print $line."\n" if $flag == 0;
}
[/perl]
这个代码的利用率非常高, 我经常在生物信息的各种数据转换中需要用到这个脚本。
接下来是一个非常有趣的代码,在window平台下自动截屏这个代码严格意义上来讲以及进入黑客的范畴了,因为它可以自动截屏,在电脑主人不在的时候你给他运行这个代码,然后静等结果,想想都觉得很黑!
需要安装两个win32的模块,然后截图很大,是bmp格式,我下一步研究如何转换bmp到png格式
[perl]
use Win32::Clipboard;
use Win32::GuiTest qw/SendKeys/;
while(1)
{
my @time = localtime(time);
my $file = sprintf "20%02d_%d_%d_%d_%d_%d.bmp", $time[5]%100, $time[4]+1, $time[3], $time[2], $time[1], $time[0];
my ($try_count, $screen) = (30, undef);
SendKeys('{PRTSCR}');#调用键盘的print_screen这个键
$screen = Win32::Clipboard::GetBitmap();#print_screen这个键会截图,存储在内存中,然后用这个剪切板来保存文件
if ($screen) {
open BITMAP, "> $file" or die;
binmode BITMAP;
print BITMAP $screen; #在这里将截屏的内容写入文件
close BITMAP;
}
sleep(15);
}
[/perl]
如果大家对我的其它代码感兴趣,可以去我的开源中国主页去查询,但是以后我新的代码只会在我自己的网站里面公布了。
http://www.oschina.net/code/list_by_user?id=1990747