CGI::query_string

$ENV{'QUERY_STRING'}ではなく、CGI::query_stringでもクエリ文字列が取得できる。

CGI - 簡単なCGI(Common Gateway Interface)クラス - perldoc.jp

ただし、挙動が違うので注意。
まず、受け側のaction.cgiは、

と書く。
GETで送るform_get.htmlは、

と書く。
POSTで送るform_post.htmlは、

と書く。

GETで送信した場合、
GETで送信した場合、

GETで送信した場合、

URLバーや、$ENV{'QUERY_STRING'}が、パラメータをアンパサンド'&'で繋いでいるのに対し、$q->query_stringはセミコロン';'で繋いでいる。
URLバーや、$ENV{'QUERY_STRING'}が、パラメータをアンパサンド'&'で繋いでいるのに対し、$q->query_stringセミコロン';'で繋いでいる。

URLバーや、$ENV{'QUERY_STRING'}が、パラメータをアンパサンド'&'で繋いでいるのに対し、$q->query_stringセミコロン';'で繋いでいる。

POSTで送信した場合、
POSTで送信した場合、

POSTで送信した場合、

$ENV{'QUERY_STRING'}は空で、$q->query_stringはパラメータをセミコロン';'で繋いでいる。
$ENV{'QUERY_STRING'}は空で、$q->query_stringはパラメータをセミコロン';'で繋いでいる。

$ENV{'QUERY_STRING'}は空で、$q->query_stringはパラメータをセミコロン';'で繋いでいる。

Sample/perl/CGI/query_string/src/CGI at master · bg1bgst333/Sample · GitHub