41225
PerlのCGIモジュールでHTMLフォームの表示を行おうとしております。  
下記の引用部分でどのようにparamを使ったらよいのでしょうか？  
質問の意味も通じるのか不安なのですが、ご教示いただけると助かります。よろしくお願い致します。

  * Windows 7 Professional SP1 64ビット
  * Apache 2.4.29(Win64)
  * Perl v5.24.3
  * Google Chrome バージョン: 63.0.3239.132（Official Build） （64 ビット）

# HTML側

```

    <html>
    　<head>
        <title>Form Sample</title>
    　</head>
    
      <body>
        <h1>Web Page</h1></body>
    
        <form action="/cgi/01input.cgi" method="POST" >
            Value 1:<input name="v1" type="text" value=""><br>
            Value 2:<input name="v2" type="text" value="">
            <input type="submit"  value="送信">
        </form>
      </body>
    </html>
    
```

# Perl側

```

    use strict;
    use warnings;
    use Data::Dumper;
    use CGI;
    
    my $cr = "\n" ;
    my %in ;
    my $alldata ;
    
    if ($ENV{'REQUEST_METHOD'} eq 'POST')
        { read(STDIN, $alldata, $ENV{'CONTENT_LENGTH'});}
       else { $alldata = $ENV{'QUERY_STRING'};}    
    
    foreach my $data (split(/&/, $alldata)) {
        my ($key, $value) = split(/=/, $data);
    
      $value =~ tr/+//;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1))/eg;
      $value =~ s/\t//g;
    
      $in{"$key"} = $value;
    }
    
    
    my $q = new CGI;
    
    print $q->header();
    print $q->start_html(-title=>'test');
    print $q->start_form(-method=>'POST',-action=>'02input.cgi');
    
```

>
```

>     foreach my $key(sort keys(%in)){
>        print "$key:<input type=text name='$key' value=$in{$key}><br>$cr";
>     }
>  
```

```

    print $q->end_form;
    print $q->end_html;
    
    exit;
    
```

***追加  
paramで受け取りたいのですが、下記の引用部分をparamでのCGIモジュールの内容に修正し、localhostで見ると、ブランクページとなってしまいます。  
htmlソースで見ると下記のとおりの状態となっています。

```

    <body>
    <form method="post" action="02input.cgi" enctype="multipart/form-data">
    </form>
    </body>
    
```
CC BY-SA 3.0
2018-01-26T02:31:28.523
41218
2018-01-26T08:29:14.747
2018-01-26T07:42:58.707
27151
27151
question
html perl
PerlのCGIモジュールでHTMLからのパラメーター渡しを行いたい
HTML側のformタグでCGIのパスが以下の様になっていますが、パスの頭に`/`が付いているのが余計な気がします。

```

    <form action="/cgi/01input.cgi" method="POST">
    
```

仮に以下の構成だとすると

```

    http://localhost/01form.html
    http://localhost/cgi/01input.cgi
    
```

HTMLから見た正しい相対パスは、`cgi/01input.cgi`となるはずです。

```

    <form action="cgi/01input.cgi" method="POST">
    
```

なお、webサーバの設定次第ですが一般的には`cgi/`ではなく`cgi-bin/`に保存するので、こちらもパスの記述ミスが無いか確認してみてください。

* * *

蛇足ですが、CGI側は単に受け取ったデータを表示するだけなら`$q->start_form`の行は不要なはずです。質問文に書かれている例はCGIが自分自身を呼び出してデータを表示する場合の記述方法です。
CC BY-SA 3.0
2018-01-26T08:29:14.747
41225
2018-01-26T08:29:14.747
3060
41218
answer