存档: ‘Perl’ 分类

Perl与MySQL链接

没有评论 2010年2月18日

接上文《Access转MySQL方法》。已经在MySQL里建了一个数据库,这个数据库可以在“C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data”目录下查到。现在要用Perl对这个数据库进行链接。

先用ActivePerl下载安装模块DBD-mysql,之后编辑链接代码如下:
 

#!/usr/bin/perl
use DBI;
my $dbname = "dbname"; #改成自己的数据库名字
my $location = "localhost";
my $port = "3306"; #这是mysql的缺省
my $database = "DBI:mysql:$dbname:$location:$port";
my $db_user = "root";
my $db_pass = "******"; #将******替换为对应的mysql数据库登录密码
my $dbh = DBI->connect($database,$db_user,$db_pass);
my $sql = "SELECT * FROM miRNA2gene where id = 1217";
my $sth = $dbh->prepare($sql);
$sth->execute() or die "无法执行SQL语句:$dbh->errstr";
my @row;
@row = $sth->fetchrow_array();
print join(",",@row) . "\n";
$sth->finish();
$dbh->disconnect();


该程序功能为查询数据库中编号为“1217”的TargetGene信息(所属miRNA为hsa-mir-9,gene_id为6646,gene_name为soat1,在Targetscan数据库中在hsa-mir-9中的分数为-0.2)。运行结果如图所示,红线划出部分为提取出来的信息(点击看大图):

dbi result Perl与MySQL链接

Windows+apache+CGI(Perl)

没有评论 2010年2月16日

之前一直用IIS,昨天下载了apache,今天对其进行了配置,以能进行Perl的CGI编程。操作系统:windows XP sp3.

步骤:

1.打开httpd.conf找到“#ScriptInterpreterSource registry”,去掉前面的“#”;

2.找到“Options Indexes FollowSymLinks”,在后面加上“ExecCGI”,即修改为:Options Indexes FollowSymLinks ExecCGI;

3.找到“AddHandler cgi-script .cgi”,加上“.pl”即可;

4.重启apache,OK

之后写一个Perl程序测试一下:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello,World.";

保存为test.pl,存在cgi-bin文件夹下。直接在浏览器地址栏输入:http://localhost/cgi-bin/test.pl,显示“Hello,World” 即为成功。

题外话:通常自己遇到一些电脑问题后会到网上搜索寻求答案,会找到很多日志、很多帖子。但我真的怀疑这些帖子到底有没有得到作者的亲自试验,还是来自毫不负责的随意臆想,亦或是来源于人云亦云的抄袭。就拿我今天配置安装PHP5来说吧,网上搜索到很多帖子,试了很多,都不成功。有的日志里写“如图所示”,但根本没有图,可想就是不定从哪里顺手抄袭而来的。好在最后找到了一篇非常好的日志,配置成功了PHP5:http://hi.baidu.com/ihhr/blog/item/4b058624d7da336a35a80f96.html。这篇日志是得到过我的亲自试验的,大家可以放心参考。希望网上以后能多一些这样实事求是的文章。

Perl函数递归的简单例子

没有评论 2009年12月11日

一个简单的Perl语言函数递归的例子:阶乘计算。@_是Perl语言函数传递参数时的参数列表,$_[0]即为第一个参数。

sub fun{
    if ($_[0] == 0||$_[0] == 1){
        return 1;
    }
    else{
        return $_[0]*&fun($_[0]-1);
    }
}

Perl:判断一个数组是否为另一个数组的子集

没有评论 2009年12月9日

[方法1]:对于数组中无重复元素,用join,将原问题转换成查找子串的问题

my @aa = qw(1 2 3 4 5);
my @bb = qw(1 3);
my $str = join "-",@aa;
for(@bb){
        print "no:$_" if "-$str-" !~ /-$_-/;             #智能模式匹配
}

>>原帖地址

[方法2]:对于数组中有重复元素,用%hash

use strict;
my @aa = (1,2,3,4);
my @bb = (1,2,2,2,3,4,4,5,6,7 ) ;
my %aa_hash=();
my %bb_hash=();
for(@aa){
        $aa_hash{$_}=' ';
}
for(@bb){
        $bb_hash{$_}=' ';
}
foreach(keys %bb_hash ) {
        if(exists $aa_hash{$_}){
                delete $aa_hash{$_};
                delete $bb_hash{$_};
        }
}
if((scalar keys %aa_hash) ==0 and (scalar keys %bb_hash)>0 ){
        print '@aa is @bb\'s child',"\n";
}

>>原帖地址

沪ICP备09091602号