1

我制作了一个 cgi 表单,并在其中插入了一个哈希以查看输出。逻辑是当用户输入他的名字时,他将获得与他的名字相关的 DNA 序列。我正在尝试从哈希的匿名数组中获取值。

我已经完成了这个程序的两个部分,并坚持最后一个。如果输入有效,则将字符串转为大写,然后使用哈希生成适当的 DNA 序列并输出为:

1.一次取一个用户姓名的字母,并使用步骤1中创建的哈希查找该字母并获得相应的DNA密码子。

  1. 构建由这些三元组组成的“DNA”序列,完成后,将其显示给用户。3.对于大多数字母,会有不止一个三元组匹配他们名字的一个字母。在这种情况下,我必须找出有多少选择并使用随机数生成器来选择一个。因此,如果用户多次输入他们的名字,他们将得到不同的输出。

    print "内容类型: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
            }
    
4

2 回答 2

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
        }
于 2013-03-10T16:34:09.817 回答
0

看起来您寻找的缺失部分是getRandomDNA,特别是如何从数组中获取随机项。

您可以使用rand $x从 0 到 获取随机浮点数$x,因此要获取数组中的随机项@array,请执行以下操作:

$item = $array[int rand @array];

由于您已经传递了包含所有 DNA 序列且没有其他内容的函数,因此将它们组合在一起应该很简单。

于 2013-03-13T00:14:51.377 回答