随笔分类 - 【03】Perl
摘要:使用 gettext 进行程序的本地化在 perl 中也可以用 GNU gettext 工具进行本地化。先看这个例子:1use Locale::gettext;2use POSIX; # Needed for setlocale()3setlocale(LC_MESSAGES, "");4bindtextdomain("helloworld", "locale");5textdomain("helloworld");6print gettext("Hello World!\n"), "
阅读全文
摘要:open 有一个特殊的地方,就是如果你给它一个未定义(这是为什么用hash的原因)的变量做间接文件句柄,那么 Perl 会自动为你定义那个变量,也就是自动把它激活,使它包含一个合适的文件句柄引用。#!/usr/bin/perl -wuse strict;use warnings;use FileHandle;my %fh;my @array = (1..10);for(1..5){ open $fh{$_},">$_.txt" or die;}for(1..5){#print $fh{$_} "$_\n"; 此处错误 $fh{$_}->pri
阅读全文
摘要:#!/usr/bin/perluse Net::FTP;$ftp = Net::FTP->new("ftp.cpan.org", Timeout => 30) or die "Could not connect.\n";$username = "anonymous";$password = ""; $ftp->login($username, $password)or die "Could not log in.\n";$ftp->cwd('/pub/CPAN
阅读全文
摘要:方法一:#!/usr/bin/perl -wuse Net::SMTP;use MIME::Lite;use MIME::Base64;use Authen::SASL;my $from = 'xxx@xxx.com';my $passwd = '*********;my $to = 'xxx@xxx.com';my $messages = "Hello Rainbow!";my $msg = MIME::Lite->new( From => $from, To => $to,# Cc => 'xxx@
阅读全文
摘要:用perl写文本处理程序,或者写服务器端脚本的时候,常常会遇到“Wide character in print” 的警告或者错误。这是因为在程序中处理中文等宽字符时,perl不能识别要处理的内容。首先要知道perl只能处理两种编码:ascii码和utf-8。ascii码是很少的,像中文、日文、韩文等字符要想能被perl处理,只能用 utf-8编码方式。perl就会把那个字符串当做utf-8编码的字符来处理;如果是0,perl就不能认知字符串中除了 ascii码之外的字符,这个时候,就会报出“Wide character in print”的警告或者错误。举个例子,你要在程序中处理‘当历史成为历
阅读全文
摘要:本应用程序设计的几个基本理念是:l 工具箱再利用: 尽可能利用已有的工具;l 简化运行步骤; 不引入过多的业务逻辑,满足的需求越简单越好。所以,我们定义了本应用程序依赖于以下几个工具的运行:l ActivePerl-5.8.4.810-MSWin32-x86l Upload.pll Upload.config我们将主要的执行逻辑都放在Perl源文件Upload.pl中了,配置文件为Upload.config。 这个perl文件将执行的任务是, 按照指定的文件夹目录,自动将该文件夹下的所有文件上传到指定ftp站点的指定目录下。 这个Perl脚本实际是从Uwe Keim的《Perl Script
阅读全文
摘要:考虑如下示例:@dates = qw(2001/1/1 2001/07/04 1999/12/25);你想按日期升序对它们进行排序,哪种方法最有效呢?最直观的Schwartzian转换可以这样写:@sorted = map { $_->[0] }sort { $a->[1] <=> $b->[1] or $a->[2] <=> $b->[2] or $a->[3] <=> $b->[3]}map { [ $_, split m</>, $_, 3 ] } @dates;然而,更高效的Guttman-Ros
阅读全文
摘要:优化方法首先,Perl是一门解释性语言,而不是类似于C/C++等编译语言。某些相似操作之间性能的差距可能非常巨大。现在让我们考虑清单 1 和清单 2 中的代码。这两段代码都是将两个字符串连接为一个字符串,一个是通过普通的连接方法实现,而另外一个是通过生成一个数组并使用 join 方法进行连接。 清单 1. 连接字符串,版本 1 my $string = 'abcdefghijklmnopqrstuvwxyz';my $concat = '';foreach my $count (1..999999){ $concat .= $string;} 清单 2. 连接字
阅读全文
摘要:随着对 用PERL实现一个简单的NIDS随着对网络安全需求的深入开发,基于网络的入侵检测技术已经成为一个重要且有意思的研究方向。想学习NIDS技术除了去读一些现成的资料和一些开源系统的源码,最好的办法莫过于自己去写一个NIDS程序,只有那样才能真正体会到一些NIDS的实现需求和设计妙处。 本质上说NIDS只是一种网络流量的分析工具,通过对网络流量的分析识别出一些已知或未知的攻击行为,一个最简单的NIDS完成的主要工作也就是抓包->协议解码->匹配,众所周知PERL是极其强大的脚本语言,尤其是它的字符串处理能力可以方便地实现对于网络流量中恶意特征进行匹配。当然PERL毕竟只是脚本语言
阅读全文
摘要:perl有最好的文本数据处理能力.这是大家都知道的.在perl本身有一个别的软件没有的小功能,就是Perl格式.它相当于简单的命令行报表和图表输出.这个需要先声明格式.创建格式的文件句柄.然后由@,^,<,>,|这样的字符构成所谓的”报表”来输出图表.这样可以指定出行的外观.后面接数据项,最后用write来显示格式化的内容.样例:输出纪录格式输出象下边一样定义:format NAME =FORMLIST.第一部分,声明.如上.如果省略 NAME,上面的代码将定义格式输出 STDOUT。第二部分,格式行FORMLIST 由一些有序的行组成,每一行都是下面三种类型中的一种:1. 注释,
阅读全文
摘要:Perl 有很多命令行参数。通过它可以让你的程序更简练,并且可以写出很多只有一行命令的perl。安全网参数有三个参数我认为可以起到“安全网”的作用,因为它们可以让你避免犯错,特别是当你在使用 Perl 尝试一些特别聪明(或者愚蠢)的想法时, 错误难免会发生。有经验的 Perl 程序员常常使用这三个参数来提前找到错误所在。 -C 是第一个。这个参数编译 Perl 程序但并不真正运行它。由此检查所有语法错误。每次修改 perl 程序之后我都会立刻使用它来找到任何语法错误: $ perl -c program.pl这保证了程序依然可以编译。很显然,当你输入一小段代码之后立即进行检查,比起一下子输入几
阅读全文
摘要:有两种方法: 1, 使用 Bio::DB::GenBank (使用Web Interface获取序列数据,当需要获取大量数据的时候不建议使用,否则 ip 有可能被 ban) 2, 下载整个 NCBI 数据库到本地,使用 Bio::DB::Flat 对它建立 index。由于这样以后每次的操作都可以在本地进行,所以对大规模的操作来说,这是比较好的方法。简单的获取序列数据的示例:use Bio::Perl; my $seq = get_sequence('genbank',$acc); #$acc 是 该序列的 accesion number print “I got a sequ
阅读全文
摘要:我有大量的Fasta格式的多序列,假如要做以下处理:问题1 去掉特定长度的短序列若要去除其中小于五十碱基的序列,请问如何操作;问题2 取motif上下游一定长度的序列(含motif)假如我要取每个序列中motif为“AAAA”及其上下游10个碱基的序列片段,并输出位置信息,请问如何编程处理第一个问题,除去 < 50 bp 的序列,可以直接用 bioperluse Bio::SeqIO;my $o_seqi = Bio::SeqIO->new(-file => $infile,-format => 'fasta',);my $o_seqo = Bio::S
阅读全文
摘要:一、正则表达式特殊变量:1、$n :包含上次模式匹配的第n个子串2、$& :前一次成功模式匹配的字符串3、$` :前次匹配成功的子串之前的内容4、$’ :前次匹配成功的子串之后的内容5、$+ :前一次使用括号的模式匹配的字符串.二、文件句柄特殊变量:1、$| :如果设置为零,在每次调用函数write或print后,自动调用函数fflush,将所写内容写回文件2、$% :当前输出页号3、$= :当前每页长度4、$- :当前页剩余的行数5、$~ :当前报表输出格式的名称.默认值是文件句柄名.6、$^ :当前报表输出表头格式的名称.默认值是带后缀”_TOP”的文件句柄名.三、全局特殊变量:1
阅读全文
摘要:在Linux或者Unix上操作(生成)Excel,CPAN上提供了Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel这两个模块。下面我们就来看看 Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel的使用方法: 首先,我们要在服务器上安装相应的模块安装 Excel 模块的 PPM 命令 ppm> install OLE::Storage_Lite ppm> install Spreadsheet::ParseExcelppm> install Spreadsheet::WriteEx
阅读全文
摘要:正则表达式中的一些常用模式/pattern/ 结果 . 匹配除换行符以外的所有字符x? 匹配 0 次或一次 x 字符串x* 匹配 0 次或多次 x 字符串,但匹配可能的最少次数x+ 匹配 1 次或多次 x 字符串,但匹配可能的最少次数.* 匹配 0 次或一次的任何字符.+ 匹配 1 次或多次的任何字符{m} 匹配刚好是 m 个 的指定字符串{m,n} 匹配在 m个 以上 n个 以下 的指定字符串{m,} 匹配 m个 以上 的指定字符串[] 匹配符合 [] 内的字符[^] 匹配不符合 [] 内的字符[0-9] 匹配所有数字字符[a-z] 匹配所有小写字母字符[^0-9] 匹配所有非数字字符[^a
阅读全文
摘要:perl 处理两个和两个以上list 模块 List-Compare在Perl处理list中,很方便的module, List-Compare 有三种case: Regular Case, Accelerated Case, Multiple Case Regular Case: example: my @Llist = qw(abel abel baker camera delta edward fargo gofler); my @Rlist = qw(baker camera delta delta fargo hilton); my $lc = List::Compare->ne
阅读全文
摘要:文件检测操作如果程序会建立新的文件,在程序创建新文件之前,我们应先确定是否存在同名的文件,以免重要数据被覆盖掉。对于这种问题,我们可以使用– 选项,检测是否存在相同名字的文件:die "Oops! A file called '$filename' already exists.\n" if -e $filename;如果文件在过去28 天内都未被修改,输出警告:warn "Config file is looking pretty old!\n" if -M CONFIG > 28;下例首先检查文件列表,找到那些大于 100KB
阅读全文
摘要:在perl中反勾号(``),system和exec都用来执行命令,这篇文章将给我们介绍它们各自的使用方法,联系,以及区别。一、使用方法1. 反勾号(``)首先,我们有命令输入操作符,也叫反勾号操作符,因为它看起来象这样: $info = `finger $user`;一个用反勾号(技术上叫重音号)引起的字串首先进行变量替换,就象一个双引号引起的字串一样。得到的结果然后被系统当作一个命令行,而且那个命令的输出成为伪文本的值。(这是一个类似 Unix shell 的模块。)在标量环境里,返回一个包含所有输出的字串。在列表环境里,返回一列值,每行输出一个值。(你可以通过设置 $/ 来使用不同的行结束
阅读全文
摘要:1. 用grep函数。函数名 grep 调用语法 @foundlist = grep (pattern, @searchlist); 解说 与同名的UNIX查找工具类似,grep函数在列表中抽取与指定模式匹配的元素,参数pattern为欲查找的模式,返回值是匹配元素的列表。 例子 @list = ("This", "is", "a", "test");@foundlist = grep(/^[tT]/, @list); 结果 @foundlist = ("This", "test&qu
阅读全文

浙公网安备 33010602011771号