我制作了一个cgi表单,并在此插入一个哈希来查看输出。逻辑是当用户输入他的名字时,他将获得与他的名字相关的DNA序列。我试图从散列的匿名数组中获取值。
我完成了这个程序的两个部分,并坚持使用最后一个程序。 如果输入有效,则将字符串转换为大写,然后使用散列生成相应的DNA序列并输出为:
1.一次取一个用户名字母,并使用步骤1中创建的哈希查找该字母并获得相应的DNA密码。
构建由这些三联体组成的'DNA'序列,完成后,将其显示给用户。 3.对于大多数字母,将有一个以上的三元组将匹配其姓名的字母。在这种情况下,我必须找出有多少选择,并使用随机数生成器来选择一个。因此,如果用户多次输入他们的名字,他们将获得不同的输出。
print“Content-type:text / html \ n \ n”;
if (!param){
#if no data, display blank form
print headingstuff("");
print programInfo();
print form();
print endingstuff();
}else{
print headingstuff("");
print programInfo();
#validate user name
my $name = param("name");
my $nameLength = length($name);
if($nameLength == 0){
print form(param("name"));
print "<br>Please enter a vaild name!! <br>";
}else{
my %hash = (
"A"=>["Alanine","Ala",["GCT"," GCC"," GCA"," GCG"]],
"R"=>["Arginine","Arg",["CGT"," CGC"," CGA"," CGG"," AGA"," AGG"]],
"N"=>["Asparagine","Asn",["AAT"," AAC"]],
"D"=>["Aspartic acid","Asp",["GAT"," GAC"]],
"C"=>["Cysteine","Cys",["TGT"," TGC"]],
"E"=>["Glutamic acid","Glu",["GAA"," GAG"]],
"Q"=>["Glutamine","Gln",["CAA"," CAG"]],
"G"=>["Glycine","Gly",["GGT"," GGC"," GGA"," GGG"]],
"H"=>["Histidine","His",["CAT"," CAC"]],
"I"=>["Isoleucine","Ile",["ATT"," ATC"," ATA"]],
"L"=>["Leucine","Leu",["TTA"," TTG"," CTT"," CTC"," CTA"," CTG"]],
"K"=>["Lysine","Lys",["AAA"," AAG"]],
);
print "<br>Codons for user name: <br>";
my @nameAsArray = split('', $name);
foreach my $letter(@nameAsArray){
my $uLetter = uc($letter);
my @val = @{$hash{$uLetter}};
my $letterDna = getRandomDNA(\@{$val[2]});
print "<br>";
}
sub linkToOriginalPage{
return <<L;
<br><br>
<a href="xyz.cgi">Click here to return to original page.</a>
<br><br>
L
}
sub headingstuff {
my $mytitle = $_[0];
return <<H;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html>
<head>
<title>$mytitle</title>
</head>
<body>
<h1> :) </h1>
H
}
######################################################
sub endingstuff{
return <<E;
</body>
</html>
E
}
####################################################
sub form{
return <<F;
<form method="post" action="xyz" enctype="multipart/form-data">
<table>
<tr>
<td>Enter your name:</td>
<td> <input type="text" name="name" value="$_[0]"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit"/></td>
</tr>
</table>
</form>
F
}
答案 0 :(得分:0)
我不确定我是否理解正确,你想要的是显示%hash
? :
print "Content-type: text/html\n\n";
if (!param){
#if no data, display blank form
print headingstuff("");
print programInfo();
print form();
print endingstuff();
}else{
print headingstuff("");
print programInfo();
#validate user name
my $name = param("name");
my $nameLength = length($name);
if($nameLength == 0){
print form(param("name"));
print "<br>Please enter a vaild name!! <br>";
}else{
my array_name = "", $name;
my %hash = (
"A"=>["Alanine","Ala",["GCT"," GCC"," GCA"," GCG"]],
"R"=>["Arginine","Arg",["CGT"," CGC"," CGA"," CGG"," AGA"," AGG"]],
"N"=>["Asparagine","Asn",["AAT"," AAC"]],
"D"=>["Aspartic acid","Asp",["GAT"," GAC"]],
"C"=>["Cysteine","Cys",["TGT"," TGC"]],
"E"=>["Glutamic acid","Glu",["GAA"," GAG"]],
"Q"=>["Glutamine","Gln",["CAA"," CAG"]],
"G"=>["Glycine","Gly",["GGT"," GGC"," GGA"," GGG"]],
"H"=>["Histidine","His",["CAT"," CAC"]],
"I"=>["Isoleucine","Ile",["ATT"," ATC"," ATA"]],
"L"=>["Leucine","Leu",["TTA"," TTG"," CTT"," CTC"," CTA"," CTG"]],
"K"=>["Lysine","Lys",["AAA"," AAG"]],
);
print "<br>Codons for user name: <br>";
# hash display
foreach my $key ( keys %hash ){
print "$key : <br>";
foreach my $elem ( @{ $hash{$key} } ) {
print "$elem " if ref $elem ne 'ARRAY';
next if ref $elem ne 'ARRAY';
print "<br/> @{ $hash{$key} } ";
}
}
print "<br>";
}
sub linkToOriginalPage{
return <<L;
<br><br>
<a href="xyz.cgi">Click here to return to original page.</a>
<br><br>
L
}
sub headingstuff {
my $mytitle = $_[0];
return <<H;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html>
<head>
<title>$mytitle</title>
</head>
<body>
<h1> :) </h1>
H
}
######################################################
sub endingstuff{
return <<E;
</body>
</html>
E
}
####################################################
sub form{
return <<F;
<form method="post" action="xyz" enctype="multipart/form-data">
<table>
<tr>
<td>Enter your name:</td>
<td> <input type="text" name="name" value="$_[0]"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit"/></td>
</tr>
</table>
</form>
F
}
答案 1 :(得分:0)
看起来你所寻找的缺失部分是getRandomDNA
,特别是如何从数组中获取随机项。
您可以使用rand $x
获取从0到$x
的随机浮点数,因此要在数组@array
中获取随机项,请执行:
$item = $array[int rand @array];
由于您已经传递了包含所有DNA序列的功能而没有其他功能,因此将它们组合在一起应该很简单。