perl 编程技巧问题?[求助]

perl 编程技巧问题?[求助]

perl 编程技巧问题?[求助]
小弟在编cgi的时候,用了多个check来多选,然后通过perl来处理。即通过

选择多项按钮,来读取相应的输入。程序片断如下:
if(not($check1 eq ""))
{
my$ken1=$form{'keme1'};
}
if(not($check2 eq ""))
{
my$ken2=$form{'keme2'};
}
if(not($check3 eq ""))
{
my$ken3=$form{'keme3'};
}
.....................
目的是,每一个if都可以执行一遍,从而正确的得到输入项;但是,我的这

个一旦前面的check被选择,后面的就不被执行了,功能和单选的一样,也就

是说,一旦前面的if被执行,后面的就跳过了。我查了资料好像perl没有swi

ch(){case1;case2;...}语句。望各位高手帮帮忙,还有什么别的方法。先谢

谢了!!![CCB]10[/CCB]
[color=red]Per...
[color=red]Perl 的确没有Case语句,不过有很多种方法可以模拟Case语句 
你可以参考<<Mastering Perl 5.0>>这本书。中文译本是<<Perl 5 从入门到精通>>
[/color]
[color=ff00ff]...
[color=ff00ff]你程序有问题,跟什么Case语句没有关系~[/color]
这跟什么case无...
这跟什么case无关,你做表单和你的设计是不符的。。。。。。。。。。。。。
另外,你的代码改成这样更好一些:
my $ken1=$form{'keme1'} if($check1 ne "");
或者
my $ken1=$form{'keme1'} unless($check1 eq "");
....................
不好意思,我其...
不好意思,我其实并不是要说switch case 语句。我只是想实现一个有多选功能的程序,我试了用多个if可以达到,但是好像和if里的执行语句有关。例如:
程序段1:
if(not($check1 eq ""))
{
my$ken1=$form{'keme1'};
print"<html><p>$ken1</p></html>";
}
if(not($check2 eq ""))
{
my$ken2=$form{'keme2'};
print"<html><p>$ken2</p></html>";
}
if(not($check3 eq ""))
{
my$ken3=$form{'keme3'};
print"<html><p>$ken3</p></html>";
}
他就可以达到多选的功能,即:1条件成立,然后执行了,但2也成立,也被执行了,3......有多少成立,就执行多少;而把上面的程序改为如下程序段2:
if(not($check1 eq ""))
{
my$ken1=$form{'keme1'};
$ rowes1=$dsh->do("insert table(ken) values($ken1)");
$ rowes1->finish();
&ok;
}
if(not($check2 eq ""))
{
my$ken2=$form{'keme2'};
$ rowes2=$dsh->do("insert table(ken) values($ken1)");
$ rowes2->finish();
&ok;
}
if(not($check3 eq ""))
{
my$ken3=$form{'keme3'};
$ rowes3=$dsh->do("insert table(ken) values($ken1)");
$ rowes3->finish();
&ok;
}
。。。。。
他就无法达到多选的功能了,即:1执行了,如果2也成立,但2却不被执行![CCB]10[/CCB]还望高手帮帮忙呀![CCB]6[/CCB]
手误,以上程序...
手误,以上程序段2:
if(not($check2 eq ""))
{
my$ken2=$form{'keme2'};
$ rowes2=$dsh->do("insert table(ken) values($ken2)");####$ken1改为$ken2
$ rowes2->finish();
&ok;
}
if(not($check3 eq ""))
{
my$ken3=$form{'keme3'};
$ rowes3=$dsh->do("insert table(ken) values($ken3)");#####$ken1改为$ken3
$ rowes3->finish();
&ok;
}
谅解一下!!!呵呵!
[color=red]你的ok子例程是怎么回事,里面是怎么写的呢? 给出来看一下就清楚了[/color]
运行完ok之后就...
运行完ok之后就直接结束了吧?
二位说的是,我...
二位说的是,我把&ok,去掉以后,程序还是老样子!这样吧,我把程序刨粗留精,都写下来吧!大家帮我好好看看!!
use dbi;
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
@pairs=split(/&/,$buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);

# Un-Webify plus signs and %-encoding
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;

$form{$name} = $value;
}
my$ke1=$form{'ke1'};
my$pro1=$form{'select1'};
##############################以上两个为判断条件;
my$a=$form{'che1'};
my$b=$form{'che2'};
my$c=$form{'che3'};
my$d=$form{'che4'};
my$e=$form{'che5'};
############################################################
my$database="ketest";
my$host="localhost";
my$ds="DBI:mysql:$database:$host";
my$user="root";
my$pass="123456";
my($dsh,$rows1,$rows2,$rows3,$rows4,$rows5,$rows6);
$dsh=DBI->connect($ds,$user,$pass);
$rows1=$dsh->do("select id from ke where (pro ='$pro1') and (ken='$ke1')");
if(($a eq "") and ($b eq "")and ($c eq "")and ($d eq "")and ($e eq ""))
{
&end;
########## check 要必选,即:至少选一个!
}
elsif($rows1 eq "0E0")
{
&errorend;
$rows1->finish();
$dsh->disconnect();
}
####原想在它下面加else,把下面的全部{}上,这样才符合逻辑;但试了一下,加不加效果都一样!!怪了!也就是说,elseif成立,就退出!
但,下面的也应该顺序执行呀!elseif不成立,下面的就执行,但结果和我前面说的一样,先陈立的,执行完以后,就退出,不管后面的,但

这都是顺序结构的呀!

if(not($a eq ""))
{
my$ken2=$form{'ke2'};
$rows2=$dsh->do("update ke set ken='$ke2' where (pro ='$pro1') and (ken='$ke1')");
$rows2->finish();

}

if(not($b eq ""))
{
my$property2=$form{'select2'};
$rows3=$dsh->do("update ke set ken='$ke3' where (pro ='$pro1') and (ken='$ke1')");
$rows3->finish();
}

if(not($c eq ""))
{
my$teacher1=$form{'teacher1'};
$rows4=$dsh->do("update ke set ken='$ke4' where (pro ='$pro1') and (ken='$ke1')");
$rows4->finish();
}

if(not($d eq ""))
{
my$teacher2=$form{'teacher2'};
$rows5=$dsh->do("update ke set ken='$ke5' where (pro ='$pro1') and (ken='$ke1')");
$rows5->finish();
}
if(not($e eq ""))
{
my$teacher3=$form{'teacher3'};
$rows6=$dsh->do("update ke set ken='$ke6' where (pro ='$pro1') and (ken='$ke1')");
$rows6->finish();
}
rows1->finish();
$dsh->disconnect();
exit;
两个子程序都是显示错误信息的,应该对程序没什么影响,这里不写了!因为是复制的,并作了一点变量上的改动,如果有手误各位谅解呀!
[color=red]fin...
[color=red]finish()函数是什么内容~[/color]