リフレッシュして、perl と python を楽しもう。

私は、たまーに、頭をクリーニングするのに、音楽をききます。始まりは、μ's(ミューズ)で、スクールアイドルシリーズの礎を築いた、現在まで続くアイドルグループの創設者であります。
よく聞くスタート・ミュージックが輝夜の城で踊りたい(μ's)で始まります。
https://music.youtube.com/watch?v=VTKMRBPCut0&list=RDAMVMVTKMRBPCut0
(YouTube music)
![myuzu1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625232/59ee8a03-5b40-e9dd-ec9d-fd5dbeb80201.png)
このシリーズ初代には、
https://music.youtube.com/watch?v=yCz_vEmTHFQ&list=RDAMVMVTKMRBPCut0
![myuzu2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625232/e8761308-aa5c-0b95-921d-237b71d33b01.png)
ことり　ちゃんが可愛いと思っています。
現在、地元では「蓮の空」(はすのそら)と言う、ユニットが頑張っています。あなたの近くは?
https://music.youtube.com/watch?v=S0ioLEIPxZk&list=RDAOlh1QZ1CE9hl6f_ZrCh8efA
![has1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625232/ca77010d-68e9-44ec-1ebe-ed1266c19435.png)![has2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625232/3f2f4e35-5c1a-5557-6c36-c0ad14ed813f.png)
よろしかったら、応援してあげてください。

animationで外せないのが、私的に「スパイ・ファミリー」アーニャが可愛く、これは推しです。
パピリ孔明の歌で踊っているのを紹介。
https://music.youtube.com/watch?v=e_mJqwHd06I
![anya1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625232/09ef43b0-7455-278d-416e-2f187075099a.png)
わたしは、YouTube music　でお気に入りを流しながら、リフレッシュしますが、皆様の気分転換などを教えていただくと嬉しくおもいます。

これ知っています?
![rinna_soto.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625232/46c5343d-339e-eb06-562f-cab4f3fb189f.png)
この子が分かれば、それなりの、通ですよ。(りんなAI)ですよ。

さて、リフレッシュ出来たら、ちょっとだけ頭を使ってみましょう。

<b><font color="#0000ff">perl</font>と<font color="007f00">python</font></b>比較をしながら紹介します。<b>最後にふたつを上げます。</b>
```perl5
#!C:/xampp/Perl/bin/perl

# This is a perl header.
################## Another way to specify. ##################
#!C:/xampp/Perl/bin/perl5.32.1
#############################################################

#      information.       
# File      my_perl.cgi
# address1  http://localhost/perl_test/my_perl.cgi
# address2  http://127.0.0.1/perl_test/my_perl.cgi
# environment  xampp:xampp/htdocs/perl_test/
# in xampp:xamp/perl/bin/perl5.32.1 

## script Start
$this_script = 'http://localhost/perl_test/my_perl.cgi';

```
```python
#!C:/Python/python -X utf8
# coding=utf-8

# This is a python header. 
################## python(anconda header) ###################
#!C:/anaconda/python -X utf8
# coding=utf-8
#############################################################

#      information.       
# File      my_python.cgi
# address1  http://localhost/python_test/my_python.cgi
# address2  http://127.0.0.1/python_test/my_python.cgi
# environment  xampp:xampp/htdocs/python_test/
# outside:Python/python 3.12.1

## script Start
this_script = 'http://localhost/python_test/my_python.cgi'

```
概ねの概略と1,2行目に注意してください。

```perl5
$point_err = 'bol1_1';
$point_return = 'bol2_0';
$settig_msgA = 'NO Settig.';
$settig_msgB = 'NO Settig.';
$error_detail = 'No Error.';
sub my_error(error_detail){
	#callされた時点での変数内容に従う。
	if($point_err eq 'bol1_1'){
        print "Content-type:text/html\n\n";
        print "<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\"><title>Error</title></head><body>";
	}
	print "<h1>エラー発生(An error has occurred.)</h1><h2>detail $_[0]</h2><div style=\"background-color: #000066;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">$settig_msgA</div><div style=\"background-color: #006600;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">$settig_msgB</div><br>";
	
	if($point_return eq  'bol2_1'){
		return;
	}
	print"</body></html>\n";
	exit;
}

# &my_error('test error.');

```
```python
point_err = bool(1)
point_return = bool(0)
settig_msgA = 'NO Settig.'
settig_msgB = 'NO Settig.'
error_detail = 'No Error.'
def my_error(error_detail):
    if point_err:
        print ("Content-type:text/html\n\n")
        print ('<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\"><title>Error</title></head><body>')
    print ('<h1>エラー発生(An error has occurred.)</h1><h2>detail :'+error_detail+'</h2><div style=\"background-color: #000066;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">'+settig_msgA+'</div><div style=\"background-color: #006600;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">'+settig_msgB+'</div><br>')
    if point_return:
        return
    print ('</body></html>\n')
    exit()
    
# my_error('オープン前エラー Occurrence before opening <b>test.</b>')

```
htmlの外側で発生した時と、html内部で仮発生させて戻る時の仕様になっています。

```perl5
print "Content-type:text/html\n\n";
print '<!DOCTYPE html><html lang="ja"><head><meta charset="UTF-8"><title>my perl</title></head><BODY BGCOLOR="#ffffff">'."\n";

$point_err = 'bol1_0';#    ここからはErrorでヘッダーが要らない。
$point_return = 'bol2_1';# ここからはError表示後戻ってくる。

print <<MY_EOF ;
<h1>test system</h1>
<p>日本語を話せる、システムです。「This is a system that allows you to speak Japanese.」<br>
カンニングペーパー「コピペオンライン英和翻訳 『Multilingal Online Translation』」はMicrosoftストアーで。<br>
The cheat sheet "Copy and Paste Online English-Japanese Translation 『Multilingal Online Translation』" is available at the Microsoft Store.<br>
ブラウザ、拡張機能もお忘れなく。わからない時は、質問AIですよ。「Don't forget your browser and extensions. When you don't understand, there is a question AI.」</p><br>
MY_EOF

```
```python
print ('Content-type:text/html'+'\n'+'\n')
print ('<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\"><title>my pyton</title></head><BODY BGCOLOR=\"#ffffff\">\n')
point_err = bool(0)
# ここからはErrorでヘッダーが要らない。
point_return = bool(1)
# ここからはError表示後戻ってくる。
print ('<h1>test system</h1>'+'\n')
print ('<p>日本語を話せる、システムです。「This is a system that allows you to speak Japanese.」<br>\n')
print ('カンニングペーパー「コピペオンライン英和翻訳 『Multilingal Online Translation』」はMicrosoftストアーで。<br>\n')
print ('The cheat sheet \"Copy and Paste Online English-Japanese Translation 『Multilingal Online Translation』\" is available at the Microsoft Store.<br>\n')
print ('ブラウザ、拡張機能もお忘れなく。わからない時は、質問AIですよ。「Don\'t forget your browser and extensions. When you don\'t understand, there is a question AI.」</p><br>\n')

```
htmlの書き出しと、Error処理の切り替えです。

```perl
######　時間取得
sub time_get {
	$date_sec = time;
	($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($date_sec);
	@week = ('日','月','火','水','木','金','土');
	$m_week = $week[$wday]; #koko2013/02/21
# 日時のフォーマット
	$full_date = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d",$year+1900,$mon+1,$mday,$week[$wday],$hour,$min,$sec);
	$date = sprintf("%04d/%02d/%02d",$year+1900,$mon+1,$mday);
	$date1 = sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec);
	$date2 = sprintf("%04d年%02d月%02d日",$year+1900,$mon+1,$mday);
	$date3 = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
	$return_hour=$hour;
}

```
```python
######　時間取得
import datetime
now = datetime.datetime.now()
formatted_date = now.strftime("%Y/%m/%d %H:%M:%S")
it_day = now.strftime("%Y年%m月%d日")
it_time = now.strftime("%H時%M分%S秒")

```
pytoonは数字になって出て来ない?

```perl
# 受信
if ($ENV{'REQUEST_METHOD'} eq "POST") {
	$post_flag = 1;
	if ($ENV{'CONTENT_LENGTH'} > 51200) { &my_error("投稿量が大きすぎます"); }
	read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
} else {
	$post_flag = 0;
	$query = $ENV{'QUERY_STRING'};
	if(length($query) > 15){&my_error("GETは受け付けていません。");}
}

$tmp_q_m = '<b>get or post.</b>:'.length($query).'<br>query:'.$query;
$settig_msgA = $tmp_q_m;
&my_error('testエラー Test query.<b>test.</b>');

```
```python
# 受信
import re
import sys
import os

req_met = os.environ.get('REQUEST_METHOD')
if req_met == 'POST':
    for query in sys.stdin:
        os.environ.get('CONTENT_LENGTH')
        pass
else :
    query = os.environ.get('QUERY_STRING')
    if len(query) > 0 and req_met != 'POST':
        tmp_q_m = '<b>not post.</b>:'+str(len(query))+'<br>query:'+query
        settig_msgB = tmp_q_m
        # 受信したアドレスバーに付いている情報をBに入れておく。2行は最終的に要らない。
if len(query) > 10 :
    language = len(query)

tmp_q_m = '<b>get or post.</b>:'+str(len(query))+'<br>query:'+query
settig_msgA = tmp_q_m
my_error('testエラー Test query.<b>test.</b>')

```
post,get

```perl
#
#　この項目は無し。
```
```python
my_hash = {}
#my_hkey_list0 = list(my_hash.keys())
my_hash['name'] = ''
my_hash['subm'] = ''
my_hash['comment'] = ''
my_hash['url'] = ''
my_hash['l_tim'] = formatted_date
my_hash['to_day'] = it_day
# 一応、使うhash(連想配列)のkeyとValue(値)を初期化して置く。
come = ''

```
変数の初期化宣言。

```perl
foreach ( split(/&/, $query) ) {
	($key, $val) = split(/=/);
	
	$key =~ tr/+/ /;
	$key =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
	$key =~ s/&/&amp;/g;
	$key =~ s/</&lt;/g;
	$key =~ s/>/&gt;/g;
	$key =~ s/\r\n/<br>/g;
	$key =~ s/\r|\n/<br>/g; #key end	
	$val =~ tr/+/ /;
	$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
	$val =~ s/\r\n/<br>/g;
	$val =~ s/\r|\n/<br>/g;
	
	if($key eq 'comment'){
		$come = $val;
		$come =~ s/<br>/\n/g;
	}
	#
	#
	$my_hash{$key} = $val;
}

```
```python
key_myh = list(my_hash.keys())

import urllib.parse
key0=''
value0=''
buf_arrey = query.split("&")
from urllib.parse import parse_qs

if "" != buf_arrey:

    for my_buf in buf_arrey:
        
        mytem_buf = my_buf
        mytem_buf += '='
        key_val_arry = mytem_buf.split("=")
        key0 = key_val_arry[0]
        value0 =key_val_arry[1]
        
        key0 = re.sub(r'\+', ' ', key0)
        key0 = re.sub(r'%([0-9a-fA-F][0-9a-fA-F])', lambda x: chr(int(x.group(1), 16)), key0)
     #  key0 =  urllib.parse.unquote(key0)        
        key0 = re.sub(r'&', '&amp;', key0)
        key0 = re.sub(r'<', '&lt;', key0)
        key0 = re.sub(r'>', '&gt;', key0)
        key0 = re.sub(r'\r\n', '<br>', key0)
        key0 = re.sub(r'\r|\n', '<br>', key0)
        my_key = key0
        value0 = re.sub(r'\+', ' ', value0)
        # 私が馬鹿なのでここは出来ません。
     #  value0 = re.sub(r'%([0-9a-fA-F][0-9a-fA-F])', lambda x: chr(int(x.group().encode('utf-8').decode('ascii', 'ignore'), 16)), value0)
        value0 = re.sub(r'%([0-9a-fA-F][0-9a-fA-F])', lambda x: chr(int(x.group(1), 16)), value0)
        # I don't have the power to change it.       
        # value0 = re.sub(r'\x', '%', value0)
        value0 = urllib.parse.unquote(value0)        
        value0 = re.sub(r'&', '&amp;', value0)
        value0 = re.sub(r'<', '&lt;', value0)
        value0 = re.sub(r'>', '&gt;', value0)
        value0 = re.sub(r'\r\n', '<br>', value0)
        value0 = re.sub(r'\r|\n', '<br>', value0)
        my_val = value0
        if my_key == 'comment':
            value0 = re.sub(r'<br>', '\n', value0)
            come = value0

        key_c=0
        for key_myh_s in key_myh:
            if key0 == key_myh_s:
                key_c=1

        if key_c==0:
            if "" != my_val:
                my_val =  value0

        #I can't get around to it, so I'll try putting it out.
        my_hash[my_key] = my_val
        # print (f'key={my_key} value={my_val}<br>\n')
#　end　field。

```
keyとValueに日本語を使える様にして、一部出来ないの。

```perl
&my_key_value();

sub my_key_value(){
	foreach $key (keys %in) {
		print "key=$key value=$in{$key}<br>\n";
	}
}
# &my_key_value();

```
```python
def my_key_value():
    key_list0 = list(my_hash.keys())
    print(key_list0)
    print ('<br>\n')
    for i, val0 in enumerate(key_list0):
        if i == len(key_list0) - 1:
            print('last: '+val0+' :'+my_hash[val0]+'<br>\n')
        else:
            print('middle '+val0+' :'+my_hash[val0]+'<br>\n')

my_key_value()

```
hash「連想配列」の書き出し。

```perl5
&time_get();

print <<MY_EOF ;
<br>
現在の日付と時刻: $date_sec<br>
$full_date Japanise style. きょうは、$date2 で時計は $date3<br>
これをComment欄に貼り付けでご利用してください。"%E6%97%A5%E6%9C%AC%E8%AA%9E%E9%9D%9E%E5%AF%BE%E5%BF%9C"<br>
<!-- <form action="$this_script" method="GET"> -->
<form action="$this_script" method="POST">
<table border=0 cellspacing=1>
<tr><td><b>name</b></td><td><input type=text name=name size=28 value="$my_hash{'name'}" maxlength="12" class=f></td></tr>
<tr><td><b>submit</b></td><td><input type=text name=subm size=100 value="$my_hash{'subm'}" maxlength="100"class=f></td></tr>
<tr><td colspan=2><b>comment</b><br><textarea cols=70 rows=7 name=comment wrap="soft" class=f>$come</textarea></td></tr>
<tr><td><b>url</b></td><td><input type=text size=52 name=url value="$my_hash{'url'}" maxlength="60" class=f></td></tr>'
<tr><td><input type=submit value="submit"></td><td><input type=reset value="reset"></td></tr>
</form></table><br>
<b><font color="#ff00ff">receives</font></b><br>
name=$my_hash{'name'}<br>comment<br>$my_hash{'comment'}<br>It OK?<br>
<br><a href="$this_script">reload</a><br>
MY_EOF

# &my_error('test message.all end!!');
print "<br><br><br></body></html>\n";

exit;
```
```python
print('<br>\n')
print("現在の日付と時刻: ", now)
print('<br>'+formatted_date+' Japanise style. きょうは、'+it_day+'で時計は'+it_time+'<br>\n')
print ('これをComment欄に貼り付けでご利用してください。\"%E6%97%A5%E6%9C%AC%E8%AA%9E%E9%9D%9E%E5%AF%BE%E5%BF%9C\"<br>\n')
#print ('<form action=\"'+this_script+'\" method=\"GET\">\n')
print ('<form action=\"'+this_script+'\" method=\"POST\">\n')
print ('<table border=0 cellspacing=1>\n')
print ('<tr><td><b>name</b></td><td><input type=text name=name size=28 value=\"'+my_hash['name']+'\" maxlength=\"12\" class=f></td></tr>\n')
print ('<tr><td><b>submit</b></td><td><input type=text name=subm size=100 value=\"'+my_hash['subm']+'\" maxlength=\"100\"class=f></td></tr>'+'\n')
print ('<tr><td colspan=2><b>comment</b><br><textarea cols=70 rows=7 name=comment wrap=\"soft\" class=f>'+come+'</textarea></td></tr>'+'\n')
print ('<tr><td><b>url</b></td><td><input type=text size=52 name=url value=\"'+my_hash['url']+'\" maxlength=\"60\" class=f></td></tr>'+'\n')
print ('<tr><td><input type=submit value=\"submit\"></td><td><input type=reset value=\"reset\"></td></tr>\n')
print ('</form></table><br>\n')
print('<b><font color="#f0f">receives</font></b><br>\n')
print ('name='+my_hash['name']+'<br>comment<br>'+my_hash['comment']+'<br>It OK?<br>\n')
print ('<br><a href="'+this_script+'">reload</a><br>\n')

# my_error('test message.all end!!')
print ('<br><br><br></body></html>\n')

exit()
```
書き出して、おわり。

最後に抜けていないか確認のため。
```perl
#!C:/xampp/Perl/bin/perl

# This is a perl header.
################## Another way to specify. ##################
#!C:/xampp/Perl/bin/perl5.32.1
#############################################################

#      information.       
# File      my_perl.cgi
# address1  http://localhost/perl_test/my_perl.cgi
# address2  http://127.0.0.1/perl_test/my_perl.cgi
# environment  xampp:xampp/htdocs/perl_test/
# in xampp:xamp/perl/bin/perl5.32.1 

## script Start
$this_script = 'http://localhost/perl_test/my_perl.cgi';

$point_err = 'bol1_1';
$point_return = 'bol2_0';
$settig_msgA = 'NO Settig.';
$settig_msgB = 'NO Settig.';
$error_detail = 'No Error.';
sub my_error(error_detail){
	#callされた時点での変数内容に従う。
	if($point_err eq 'bol1_1'){
        print "Content-type:text/html\n\n";
        print "<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\"><title>Error</title></head><body>";
	}
	print "<h1>エラー発生(An error has occurred.)</h1><h2>detail $_[0]</h2><div style=\"background-color: #000066;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">$settig_msgA</div><div style=\"background-color: #006600;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">$settig_msgB</div><br>";
	
	if($point_return eq  'bol2_1'){
		return;
	}
	print"</body></html>\n";
	exit;
}

# &my_error('test error.');

print "Content-type:text/html\n\n";
print '<!DOCTYPE html><html lang="ja"><head><meta charset="UTF-8"><title>my perl</title></head><BODY BGCOLOR="#ffffff">'."\n";

$point_err = 'bol1_0';#    ここからはErrorでヘッダーが要らない。
$point_return = 'bol2_1';# ここからはError表示後戻ってくる。

print <<MY_EOF ;
<h1>test system</h1>
<p>日本語を話せる、システムです。「This is a system that allows you to speak Japanese.」<br>
カンニングペーパー「コピペオンライン英和翻訳 『Multilingal Online Translation』」はMicrosoftストアーで。<br>
The cheat sheet "Copy and Paste Online English-Japanese Translation 『Multilingal Online Translation』" is available at the Microsoft Store.<br>
ブラウザ、拡張機能もお忘れなく。わからない時は、質問AIですよ。「Don't forget your browser and extensions. When you don't understand, there is a question AI.」</p><br>
MY_EOF

######　時間取得
sub time_get {
	$date_sec = time;
	($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($date_sec);
	@week = ('日','月','火','水','木','金','土');
	$m_week = $week[$wday]; #koko2013/02/21
# 日時のフォーマット
	$full_date = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d",$year+1900,$mon+1,$mday,$week[$wday],$hour,$min,$sec);
	$date = sprintf("%04d/%02d/%02d",$year+1900,$mon+1,$mday);
	$date1 = sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec);
	$date2 = sprintf("%04d年%02d月%02d日",$year+1900,$mon+1,$mday);
	$date3 = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
	$return_hour=$hour;
}


# 受信
if ($ENV{'REQUEST_METHOD'} eq "POST") {
	$post_flag = 1;
	if ($ENV{'CONTENT_LENGTH'} > 51200) { &my_error("投稿量が大きすぎます"); }
	read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
} else {
	$post_flag = 0;
	$query = $ENV{'QUERY_STRING'};
	if(length($query) > 15){&my_error("GETは受け付けていません。");}
}

$tmp_q_m = '<b>get or post.</b>:'.length($query).'<br>query:'.$query;
$settig_msgA = $tmp_q_m;
&my_error('testエラー Test query.<b>test.</b>');

#
#
foreach ( split(/&/, $query) ) {
	($key, $val) = split(/=/);
	
	$key =~ tr/+/ /;
	$key =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
	$key =~ s/&/&amp;/g;
	$key =~ s/</&lt;/g;
	$key =~ s/>/&gt;/g;
	$key =~ s/\r\n/<br>/g;
	$key =~ s/\r|\n/<br>/g; #key end	
	$val =~ tr/+/ /;
	$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
	$val =~ s/\r\n/<br>/g;
	$val =~ s/\r|\n/<br>/g;
	
	if($key eq 'comment'){
		$come = $val;
		$come =~ s/<br>/\n/g;
	}
	#
	#
	$my_hash{$key} = $val;
}

&my_key_value();

sub my_key_value(){
	foreach $key (keys %in) {
		print "key=$key value=$in{$key}<br>\n";
	}
}
# &my_key_value();

&time_get();

print <<MY_EOF ;
<br>
現在の日付と時刻: $date_sec<br>
$full_date Japanise style. きょうは、$date2 で時計は $date3<br>
これをComment欄に貼り付けでご利用してください。"%E6%97%A5%E6%9C%AC%E8%AA%9E%E9%9D%9E%E5%AF%BE%E5%BF%9C"<br>
<!-- <form action="$this_script" method="GET"> -->
<form action="$this_script" method="POST">
<table border=0 cellspacing=1>
<tr><td><b>name</b></td><td><input type=text name=name size=28 value="$my_hash{'name'}" maxlength="12" class=f></td></tr>
<tr><td><b>submit</b></td><td><input type=text name=subm size=100 value="$my_hash{'subm'}" maxlength="100"class=f></td></tr>
<tr><td colspan=2><b>comment</b><br><textarea cols=70 rows=7 name=comment wrap="soft" class=f>$come</textarea></td></tr>
<tr><td><b>url</b></td><td><input type=text size=52 name=url value="$my_hash{'url'}" maxlength="60" class=f></td></tr>'
<tr><td><input type=submit value="submit"></td><td><input type=reset value="reset"></td></tr>
</form></table><br>
<b><font color="#ff00ff">receives</font></b><br>
name=$my_hash{'name'}<br>comment<br>$my_hash{'comment'}<br>It OK?<br>
<br><a href="$this_script">reload</a><br>
MY_EOF

# &my_error('test message.all end!!');
print "<br><br><br></body></html>\n";

exit;
```
続いて
```python
#!C:/Python/python -X utf8
# coding=utf-8

# This is a python header. 
################## python(anconda header) ###################
#!C:/anaconda/python -X utf8
# coding=utf-8
#############################################################

#      information.       
# File      my_python.cgi
# address1  http://localhost/python_test/my_python.cgi
# address2  http://127.0.0.1/python_test/my_python.cgi
# environment  xampp:xampp/htdocs/python_test/
# outside:Python/python 3.12.1

## script Start
this_script = 'http://localhost/python_test/my_python.cgi'

point_err = bool(1)
point_return = bool(0)
settig_msgA = 'NO Settig.'
settig_msgB = 'NO Settig.'
error_detail = 'No Error.'
def my_error(error_detail):
    if point_err:
        print ("Content-type:text/html\n\n")
        print ('<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\"><title>Error</title></head><body>')
    print ('<h1>エラー発生(An error has occurred.)</h1><h2>detail :'+error_detail+'</h2><div style=\"background-color: #000066;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">'+settig_msgA+'</div><div style=\"background-color: #006600;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">'+settig_msgB+'</div><br>')
    if point_return:
        return
    print ('</body></html>\n')
    exit()
    
# my_error('オープン前エラー Occurrence before opening <b>test.</b>')

print ('Content-type:text/html'+'\n'+'\n')
print ('<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\"><title>my pyton</title></head><BODY BGCOLOR=\"#ffffff\">\n')
point_err = bool(0)
# ここからはErrorでヘッダーが要らない。
point_return = bool(1)
# ここからはError表示後戻ってくる。
print ('<h1>test system</h1>'+'\n')
print ('<p>日本語を話せる、システムです。「This is a system that allows you to speak Japanese.」<br>\n')
print ('カンニングペーパー「コピペオンライン英和翻訳 『Multilingal Online Translation』」はMicrosoftストアーで。<br>\n')
print ('The cheat sheet \"Copy and Paste Online English-Japanese Translation 『Multilingal Online Translation』\" is available at the Microsoft Store.<br>\n')
print ('ブラウザ、拡張機能もお忘れなく。わからない時は、質問AIですよ。「Don\'t forget your browser and extensions. When you don\'t understand, there is a question AI.」</p><br>\n')

import datetime
now = datetime.datetime.now()
formatted_date = now.strftime("%Y/%m/%d %H:%M:%S")
it_day = now.strftime("%Y年%m月%d日")
it_time = now.strftime("%H時%M分%S秒")

# 受信
import re
import sys
import os

req_met = os.environ.get('REQUEST_METHOD')
if req_met == 'POST':
    for query in sys.stdin:
        os.environ.get('CONTENT_LENGTH')
        pass
else :
    query = os.environ.get('QUERY_STRING')
    if len(query) > 0 and req_met != 'POST':
        tmp_q_m = '<b>not post.</b>:'+str(len(query))+'<br>query:'+query
        settig_msgB = tmp_q_m
        # 受信したアドレスバーに付いている情報をBに入れておく。2行は最終的に要らない。
if len(query) > 10 :
    language = len(query)

tmp_q_m = '<b>get or post.</b>:'+str(len(query))+'<br>query:'+query
settig_msgA = tmp_q_m
my_error('testエラー Test query.<b>test.</b>')

my_hash = {}
#my_hkey_list0 = list(my_hash.keys())
my_hash['name'] = ''
my_hash['subm'] = ''
my_hash['comment'] = ''
my_hash['url'] = ''
my_hash['l_tim'] = formatted_date
my_hash['to_day'] = it_day
# 一応、使うhash(連想配列)のkeyとValue(値)を初期化して置く。
come = ''

key_myh = list(my_hash.keys())

import urllib.parse
key0=''
value0=''
buf_arrey = query.split("&")
from urllib.parse import parse_qs

if "" != buf_arrey:

    for my_buf in buf_arrey:
        
        mytem_buf = my_buf
        mytem_buf += '='
        key_val_arry = mytem_buf.split("=")
        key0 = key_val_arry[0]
        value0 =key_val_arry[1]
        
        key0 = re.sub(r'\+', ' ', key0)
        key0 = re.sub(r'%([0-9a-fA-F][0-9a-fA-F])', lambda x: chr(int(x.group(1), 16)), key0)
     #  key0 =  urllib.parse.unquote(key0)        
        key0 = re.sub(r'&', '&amp;', key0)
        key0 = re.sub(r'<', '&lt;', key0)
        key0 = re.sub(r'>', '&gt;', key0)
        key0 = re.sub(r'\r\n', '<br>', key0)
        key0 = re.sub(r'\r|\n', '<br>', key0)
        my_key = key0
        value0 = re.sub(r'\+', ' ', value0)
        # 私が馬鹿なのでここは出来ません。
     #  value0 = re.sub(r'%([0-9a-fA-F][0-9a-fA-F])', lambda x: chr(int(x.group().encode('utf-8').decode('ascii', 'ignore'), 16)), value0)
        value0 = re.sub(r'%([0-9a-fA-F][0-9a-fA-F])', lambda x: chr(int(x.group(1), 16)), value0)
        # I don't have the power to change it.       
        # value0 = re.sub(r'\x', '%', value0)
        value0 = urllib.parse.unquote(value0)        
        value0 = re.sub(r'&', '&amp;', value0)
        value0 = re.sub(r'<', '&lt;', value0)
        value0 = re.sub(r'>', '&gt;', value0)
        value0 = re.sub(r'\r\n', '<br>', value0)
        value0 = re.sub(r'\r|\n', '<br>', value0)
        my_val = value0
        if my_key == 'comment':
            value0 = re.sub(r'<br>', '\n', value0)
            come = value0

        key_c=0
        for key_myh_s in key_myh:
            if key0 == key_myh_s:
                key_c=1

        if key_c==0:
            if "" != my_val:
                my_val =  value0

        #I can't get around to it, so I'll try putting it out.
        my_hash[my_key] = my_val
        # print (f'key={my_key} value={my_val}<br>\n')
#　end　field。

def my_key_value():
    key_list0 = list(my_hash.keys())
    print(key_list0)
    print ('<br>\n')
    for i, val0 in enumerate(key_list0):
        if i == len(key_list0) - 1:
            print('last: '+val0+' :'+my_hash[val0]+'<br>\n')
        else:
            print('middle '+val0+' :'+my_hash[val0]+'<br>\n')

my_key_value()

print('<br>\n')
print("現在の日付と時刻: ", now)
print('<br>'+formatted_date+' Japanise style. きょうは、'+it_day+'で時計は'+it_time+'<br>\n')
print ('これをComment欄に貼り付けでご利用してください。\"%E6%97%A5%E6%9C%AC%E8%AA%9E%E9%9D%9E%E5%AF%BE%E5%BF%9C\"<br>\n')
#print ('<form action=\"'+this_script+'\" method=\"GET\">\n')
print ('<form action=\"'+this_script+'\" method=\"POST\">\n')
print ('<table border=0 cellspacing=1>\n')
print ('<tr><td><b>name</b></td><td><input type=text name=name size=28 value=\"'+my_hash['name']+'\" maxlength=\"12\" class=f></td></tr>\n')
print ('<tr><td><b>submit</b></td><td><input type=text name=subm size=100 value=\"'+my_hash['subm']+'\" maxlength=\"100\"class=f></td></tr>'+'\n')
print ('<tr><td colspan=2><b>comment</b><br><textarea cols=70 rows=7 name=comment wrap=\"soft\" class=f>'+come+'</textarea></td></tr>'+'\n')
print ('<tr><td><b>url</b></td><td><input type=text size=52 name=url value=\"'+my_hash['url']+'\" maxlength=\"60\" class=f></td></tr>'+'\n')
print ('<tr><td><input type=submit value=\"submit\"></td><td><input type=reset value=\"reset\"></td></tr>\n')
print ('</form></table><br>\n')
print('<b><font color="#f0f">receives</font></b><br>\n')
print ('name='+my_hash['name']+'<br>comment<br>'+my_hash['comment']+'<br>It OK?<br>\n')
print ('<br><a href="'+this_script+'">reload</a><br>\n')

# my_error('test message.all end!!')
print ('<br><br><br></body></html>\n')

exit()
```
おわり。
皆様の理解に繋がればと、思い例として出しました。力不足があり、満足できないところは、皆様のご努力で解決に至る事を、望みます。
x は「Space」x「Space」で、定数は分かるし(x)で関数は、分かるのだが・・・?　xとXは検索では区別しない。