CGI::start_form(-action)

CGI::start_formは、ハッシュ形式で引数を指定できる。
今回は-actionで別の".cgi"ファイルを指定する。

https://pointoht.ti-da.net/e6730590.html

今回は、まずはform.cgiを用意して、

start_formで、キーは-action、値は'action.cgi'とする。
そして、action.cgiは、

こう書く。
こんな感じで、これまで1つの".cgi"ファイルにしていたものを、2つの".cgi"ファイルに分ける。

ここでsubmitすると
ここでsubmitすると

ここでsubmitすると、

こうなる
こうなる

こうなる。

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

名前付き引数

デフォルト引数として値が設定されているサブルーチンで、特定の値を上書きしたい場合、ハッシュ形式でキーと値を指定するのだが、これは事実上名前付き引数でもある。

Perl Tips:名前付き引数とデフォルト値

sub.plで、

今回は、-value1を'XXX'、-value3を'ZZZ'にする。
デフォルト値のハッシュと渡されたハッシュをリストで突き合わせて1つの新しいハッシュにすると、同じキーがあれば特性によって渡された方の値に上書きされる。

$ vi sub.pl
$ perl sub.pl
-value2 = BBB
-value3 = ZZZ
-value1 = XXX
$

上書きされた。

Sample/perl/sub/named_arguments/src/sub at master · bg1bgst333/Sample · GitHub

デフォルト引数

サブルーチンの引数をハッシュで受け取る方法を応用すると、デフォルト引数を作ることが出来る。

Perl Tips:名前付き引数とデフォルト値

sub.plで、

サブルーチンの中で、デフォルト値の決まったハッシュを作っておいて、実際に引数として渡されたハッシュと突き合わせる。
今回は何も渡さないので、全部デフォルト値になる。

$ vi sub.pl
$ perl sub.pl
-value2 = BBB
-value3 = CCC
-value1 = AAA
$

こうなる。

Sample/perl/sub/default_arguments/src/sub at master · bg1bgst333/Sample · GitHub

ハッシュ引数

引数にハッシュを指定することもできる。

サブルーチンの引数 - Perl - ルモーリン

sub.plで、

1つ目みたいにハッシュ変数で渡すこともできるし、2つ目みたいに直接ハッシュ形式で書いて渡すこともできる。
(今回は2つ目でハイフン('-')の付いたキーを使ってる。引用符(''や"")有りのキーもあるし、引用符もハイフンもないキーもできるあたり、ハッシュのキーはかなり柔軟。)
@_でもらった引数を%hashに入れることでハッシュとして扱える。

$ vi sub.pl
$ perl sub.pl
key2 = value2
key1 = value1
key3 = value3

-a = aaa
-c = ccc
-b = bbb
$

こうなる。

Sample/perl/sub/hash_arguments/src/sub at master · bg1bgst333/Sample · GitHub

keys

keysで指定のハッシュのキー配列を取得する。

Perlの組み込み関数 keys の翻訳 - perldoc.jp

keys.plで、

こうすると、

$ vi keys.pl
$ perl keys.pl
key2
key1
key3
$

こうなる。
まあforeachなので順番は不定

Sample/perl/keys/keys/src/keys at master · bg1bgst333/Sample · GitHub

CGI::end_form

CGI::end_formはformの終了タグを用意する。

https://pointoht.ti-da.net/e6730590.html

action.cgiで、

と書いて、perlコマンドで実行すると、

$ perl action.cgi
Content-Type: text/html; charset=ISO-8859-1

<!DOCTYPE html
        PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>CGI::end_form</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<form method="post" action="http://localhost" enctype="multipart/form-data">
<input name="key1" value="value1">
<input name="key2" value="value2">
<input type="submit" value="submit">
</form>
</body>
</html>$

となる。

ここからsubmitで
ここからsubmitで

ここからsubmitで、

こうなるので変わらない
こうなるので変わらない

こうなるので変わらない。

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