1

私は cgi フォームを作成し、これにハッシュを挿入して出力を確認しました。ロジックは、ユーザーが自分の名前を入力すると、その名前に関連する DNA の配列を取得するというものです。ハッシュの匿名配列から値を取得しようとしています。

私はこのプログラムの 2 つの部分を実行し、最後の部分に固執しました。入力が有効な場合は、文字列を大文字に変換し、ハッシュを使用して適切な DNA シーケンスを生成し、次のように出力します。

1.一度にユーザーの名前の 1 文字を取得し、手順 1 で作成したハッシュを使用してその文字を検索し、対応する DNA コドンを取得します。

  1. これらのトリプレットで構成される「DNA」シーケンスを構築し、終了したら、それをユーザーに表示します。3.ほとんどの文字には、名前の文字と一致するトリプレットが複数あります。この場合、選択肢がいくつあるかを調べ、乱数ジェネレーターを使用して 1 つを選択する必要があります。したがって、ユーザーが自分の名前を複数回入力すると、異なる出力が得られます。

    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

あなたが探している欠けている部分はgetRandomDNA、具体的には配列からランダムなアイテムを取得する方法です。

を使用rand $xして 0 から までのランダムな float を取得できる$xため、 array 内のランダムなアイテムを取得するには、次のように@arrayします。

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

すべての DNA シーケンスのみを含む関数を既に渡しているので、それを組み合わせるのは簡単なはずです。

于 2013-03-13T00:14:51.377 に答える
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 に答える