CGI-Perlの質問です。

split関数で、以下のA)の文字列をB)の文字列に変換するにはどうしたらよいでしょうか?
CGIを少しだけカスタマイズしたいのですが、Perlの知識が浅いため、解決方法そのものを教えていただければうれしいです。もしそのまま使える完全なコードややり方を回答していただいた回答者の方には500ポイントを差し上げます。よろしくお願いいたします。
※文字制限のため参考コードなどはこの下にある「この質問・回答へのコメント」に記載いたします。

A)$option、$option2
▼$option
select,選択,0,0:9,9号,5,100:11,11号,6,200:13,13号,3,300:15,15号,1,500:another,指定,,500
▼$option2
select,選択:red,赤:blue,青:green,緑
※$option = "記号,意味,在庫数,単価"、$option2 = "記号,意味"

B)$option_set、$option2_set
▼$option_set 
<select name='op1'>
<option value='select'>選択</option>
<option value='9'>9号</option>
<option value='11'>11号</option>
<option value='13'>13号</option>
<option value='15'>15号</option>
<option value='another'>指定</option>
</select>
▼$option2_set
<select name='op2'>
<option value='select'>選択</option>
<option value='red'>赤</option>
<option value='blue'>青</option>
<option value='green'>緑</option>
</select>
※$option、$option2がもし空の場合は$option_set ="";、$option2_set ="";とする。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2010/01/30 23:36:51
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:mystashes No.2

回答回数32ベストアンサー獲得回数11

ポイント500pt

書いている間にkn1967さんのコメントが先に入ってしまったので恐縮ですが...

一応HTMLへのリスト出力以外の部分を考慮したご参考ということで。

変数の頭の"my"は全て削除可能です。

#これ以前で $option_su_ex,$option_su_tani,$option_no,$option2_noが定義されていると考えています
my $i=0;
my $flag_zaiko_non=0;
my $flag_non_option =1;

my @option=split(/:/,$option);
my @option2=split(/:/,$option2);
my $option_set="";
my $option2_set="";

my $zaiko_new=0;
# 以下の変数はリスト出力以外の用途で使用予定有りと考えています。
my $zaiko=0;
my @op_k;
my @op_m;
my @op_su;
my @op_pr;
my @op2_k;
my @op2_m;
my @op2_su;

$i=0;
for (@option) {
    my @value = split(/,/,$_);
    # op_*[$i] が後ほど使用予定無しであれば下の1行は不要です(本ソースコード内では使用していません)
    ($op_k[$i],$op_m[$i],$op_su[$i],$op_pr[$i])=@value;
    next if ($value[0] eq '');
    $flag_non_option=0;
    my $su_ex='';
    my $pr_ex='';
    if ($value[2] > 0) {
        $zaiko_new+=$value[2];
        $su_ex = ($option_su_ex == 1) ? "$value[2]$option_su_tani" : "";
    } else {
        # $flag_zaiko_non はリスト出力以外の用途で使用予定有りと考えています
        # 1商材でも在庫無しのものがあればフラグを立てて良いのですね?
        $flag_zaiko_non=1;
    }
    $pr_ex = ($value[3] ne '') ? "[$value[3]]" : "";
    $option_set=$option_set."<option value='$value[0]'>$value[1]$pr_ex$su_ex</option>\n";
    last if (++$i >= $option_no);
}

$option_set=($option_set ne "") ? "<select name='op1'>\n$option_set</select>" : "";
# 下の print は確認用です。意図通りの出力を確認したら削除してください。
print "$option_set\n";

# $zaiko は全商品の合計で良いのですよね?
if($flag_non_option ne '1'){
    $zaiko=($zaiko_new > 0) ? $zaiko_new : 0;
}

$i=0;
for (@option2) {
    my @value = split(/,/,$_);
    # op2_*[$i] が後ほど使用予定無しであれば下の1行は不要です(本ソースコード内では使用していません)
    ($op2_k[$i],$op2_m[$i],$op2_su[$i])=@value;
    next if ($value[0] eq "");
    $option2_set=$option2_set."<option value='$value[0]'>$value[1]</option>\n";
    last if (++$i >= $option2_no);
}

$option2_set=($option2_set ne "") ? "<select name='op2'>\n$option2_set</select>" : "";
# 下の print は確認用です。意図通りの出力を確認したら削除してください。
print "$option2_set\n";
id:icta

回答ありがとうございます。

ほぼ希望とおりの動作をしたのですが2点だけうまくいかないところがあります。

1)valueの値が“記号”ではなく“意味”になる。

<option value='15'>15号</option>と表示させたいのですが<option value='15号'>15号</option>となります。

2)8件表示されるべきところが1件しか表示されない。

以下のコードが実際に使用するコードです。“#ここにコードを挿入”の部分に教えていただいたコードを挿入しましたが、1件しか表示されません。

この原因は教えていただいたコードとは無関係だと思い、試行錯誤したのですが原因を解明できませんでした。

勉強不足で申し訳ありませんが、どこを変更すればよいか教えていただけませんでしょうか?よろしくお願いします。


$t8_width = $t_width/4;

$i =0;

while($i < 8){

$table_related[$i] =<<"EOF";

\ 

EOF

$i ++;

}

$i =0;

foreach(@CHILD_DATA){

($goods_no,$name,$kigou,$option,$option2,$class,$setumei,$fcolor,$price,$tani,$zaiko,$limit,$picture,$bikou,$aux1,$aux2,$aux3,$aux4,$aux5,$free1,$free2,$free3) = split(/\<\>/,$_);

($price,$tax_ch)= split(/\:/,$price);

if($tax_flag eq ''){

if($tax_ch == 1){

$tax_set ="$tax_komi";

}else{

$tax_set ="$tax_betu";

}

}elsif($tax_flag eq '0'){

$tax_set ="$tax_betu";

}elsif($tax_flag eq '1'){

$tax_set ="$tax_komi";

}elsif($tax_flag eq '2'){

$tax_set ='';

}


#ここにコードを挿入


$price_set = $price;

1 while $price_set =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理

$link_pw ="$modoru_goods&mode=p_wide&id=$goods_no&superkey=1&back=$referer_url_encode";

($pic1,$pic2,$pic3,$pici,$picj) =split(/\|/,$picture);

if($pici eq ""){

$pici ="$default_g";

}

($pici,$w_h_set) =&pic_convert($goods8_width,$goods8_height,$pici,$convert_none_8);

$pici_set ="\"$name\"";

$h8_15 =$goods8_height +10;

$table_related[$i] =<<"EOF";

$pici_set

<br$xslash>

$name

<br$xslash>\\$price_set$tax_set

<form action="$script" method="$post_get">

<input type='hidden' name='g_no' value="$goods_no"$slash>

$option_set$option2_set

<input type="hidden" name="goods" value="$name"$slash>

$zaiko_set$kosuu_setting

<input type='hidden' name='mode' value='look'>

$get_setting

</form>


EOF

if($i == 4){

$related_5_8goods =1;

}

$i ++;

}


以下はご質問の件です。

>商材でも在庫無しのものがあればフラグを立てて良いのですね?

>$zaiko は全商品の合計で良いのですよね?

申し訳ありません。変数が多く、ファイルが多岐に渡るため実際にどのように働いているのかはっきりとはわかりません。問題なく動作しているのでこのままでよいと思われます。

2010/01/30 22:25:47

その他の回答2件)

id:ritto11 No.1

回答回数3ベストアンサー獲得回数0

こちらのサイトは参考になりませんでしょうか?

良かったらご覧になってみて下さい。

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_k05.htm

id:icta

回答ありがとうございます。このサイトはすでに確認済みです。

2010/01/30 21:51:55
id:mystashes No.2

回答回数32ベストアンサー獲得回数11ここでベストアンサー

ポイント500pt

書いている間にkn1967さんのコメントが先に入ってしまったので恐縮ですが...

一応HTMLへのリスト出力以外の部分を考慮したご参考ということで。

変数の頭の"my"は全て削除可能です。

#これ以前で $option_su_ex,$option_su_tani,$option_no,$option2_noが定義されていると考えています
my $i=0;
my $flag_zaiko_non=0;
my $flag_non_option =1;

my @option=split(/:/,$option);
my @option2=split(/:/,$option2);
my $option_set="";
my $option2_set="";

my $zaiko_new=0;
# 以下の変数はリスト出力以外の用途で使用予定有りと考えています。
my $zaiko=0;
my @op_k;
my @op_m;
my @op_su;
my @op_pr;
my @op2_k;
my @op2_m;
my @op2_su;

$i=0;
for (@option) {
    my @value = split(/,/,$_);
    # op_*[$i] が後ほど使用予定無しであれば下の1行は不要です(本ソースコード内では使用していません)
    ($op_k[$i],$op_m[$i],$op_su[$i],$op_pr[$i])=@value;
    next if ($value[0] eq '');
    $flag_non_option=0;
    my $su_ex='';
    my $pr_ex='';
    if ($value[2] > 0) {
        $zaiko_new+=$value[2];
        $su_ex = ($option_su_ex == 1) ? "$value[2]$option_su_tani" : "";
    } else {
        # $flag_zaiko_non はリスト出力以外の用途で使用予定有りと考えています
        # 1商材でも在庫無しのものがあればフラグを立てて良いのですね?
        $flag_zaiko_non=1;
    }
    $pr_ex = ($value[3] ne '') ? "[$value[3]]" : "";
    $option_set=$option_set."<option value='$value[0]'>$value[1]$pr_ex$su_ex</option>\n";
    last if (++$i >= $option_no);
}

$option_set=($option_set ne "") ? "<select name='op1'>\n$option_set</select>" : "";
# 下の print は確認用です。意図通りの出力を確認したら削除してください。
print "$option_set\n";

# $zaiko は全商品の合計で良いのですよね?
if($flag_non_option ne '1'){
    $zaiko=($zaiko_new > 0) ? $zaiko_new : 0;
}

$i=0;
for (@option2) {
    my @value = split(/,/,$_);
    # op2_*[$i] が後ほど使用予定無しであれば下の1行は不要です(本ソースコード内では使用していません)
    ($op2_k[$i],$op2_m[$i],$op2_su[$i])=@value;
    next if ($value[0] eq "");
    $option2_set=$option2_set."<option value='$value[0]'>$value[1]</option>\n";
    last if (++$i >= $option2_no);
}

$option2_set=($option2_set ne "") ? "<select name='op2'>\n$option2_set</select>" : "";
# 下の print は確認用です。意図通りの出力を確認したら削除してください。
print "$option2_set\n";
id:icta

回答ありがとうございます。

ほぼ希望とおりの動作をしたのですが2点だけうまくいかないところがあります。

1)valueの値が“記号”ではなく“意味”になる。

<option value='15'>15号</option>と表示させたいのですが<option value='15号'>15号</option>となります。

2)8件表示されるべきところが1件しか表示されない。

以下のコードが実際に使用するコードです。“#ここにコードを挿入”の部分に教えていただいたコードを挿入しましたが、1件しか表示されません。

この原因は教えていただいたコードとは無関係だと思い、試行錯誤したのですが原因を解明できませんでした。

勉強不足で申し訳ありませんが、どこを変更すればよいか教えていただけませんでしょうか?よろしくお願いします。


$t8_width = $t_width/4;

$i =0;

while($i < 8){

$table_related[$i] =<<"EOF";

\ 

EOF

$i ++;

}

$i =0;

foreach(@CHILD_DATA){

($goods_no,$name,$kigou,$option,$option2,$class,$setumei,$fcolor,$price,$tani,$zaiko,$limit,$picture,$bikou,$aux1,$aux2,$aux3,$aux4,$aux5,$free1,$free2,$free3) = split(/\<\>/,$_);

($price,$tax_ch)= split(/\:/,$price);

if($tax_flag eq ''){

if($tax_ch == 1){

$tax_set ="$tax_komi";

}else{

$tax_set ="$tax_betu";

}

}elsif($tax_flag eq '0'){

$tax_set ="$tax_betu";

}elsif($tax_flag eq '1'){

$tax_set ="$tax_komi";

}elsif($tax_flag eq '2'){

$tax_set ='';

}


#ここにコードを挿入


$price_set = $price;

1 while $price_set =~ s/(.*\d)(\d\d\d)/$1,$2/g; #桁カンマを入れる処理

$link_pw ="$modoru_goods&mode=p_wide&id=$goods_no&superkey=1&back=$referer_url_encode";

($pic1,$pic2,$pic3,$pici,$picj) =split(/\|/,$picture);

if($pici eq ""){

$pici ="$default_g";

}

($pici,$w_h_set) =&pic_convert($goods8_width,$goods8_height,$pici,$convert_none_8);

$pici_set ="\"$name\"";

$h8_15 =$goods8_height +10;

$table_related[$i] =<<"EOF";

$pici_set

<br$xslash>

$name

<br$xslash>\\$price_set$tax_set

<form action="$script" method="$post_get">

<input type='hidden' name='g_no' value="$goods_no"$slash>

$option_set$option2_set

<input type="hidden" name="goods" value="$name"$slash>

$zaiko_set$kosuu_setting

<input type='hidden' name='mode' value='look'>

$get_setting

</form>


EOF

if($i == 4){

$related_5_8goods =1;

}

$i ++;

}


以下はご質問の件です。

>商材でも在庫無しのものがあればフラグを立てて良いのですね?

>$zaiko は全商品の合計で良いのですよね?

申し訳ありません。変数が多く、ファイルが多岐に渡るため実際にどのように働いているのかはっきりとはわかりません。問題なく動作しているのでこのままでよいと思われます。

2010/01/30 22:25:47
id:tkyk3 No.3

回答回数60ベストアンサー獲得回数7

ポイント50pt

多分、サブルーチンにした方が簡潔になると思います。

本当は、もうちょっとコードを書いて分かりやすくしたり汎用的にした方がいいと思いますが…。

間違っていたらごめんなさい。


my $option = "select,選択,0,0:9,9号,5,100:11,11号,6,200:13,13号,3,300:15,15号,1,500:another,指定,,500";

my $option2 = "select,選択:red,赤:blue,青:green,緑";

$option_set  = option_html($option, 'op');
$option2_set = option_html($option2, 'op2');

#オプション項目をHTMLに変換する
sub option_html {
	my $string = shift;
	my $name   = shift;
	if ($string) { return '';} #何もない場合は空を返す
	
	my @opitons = split(/:/,$string); # :で切り分けて配列へ
	
	print "<select name='$name'>\n";
	foreach my $option (@opitons) { #
		my @cells = split(/\,/,$option); # ,で切り分けて配列へ
		print "<option value='$cells[0]'>'$cells[1]</option>\n";
	}
	print "</select>\n";
}
id:icta

回答ありがとうございます。最初に挙げたコードに準じたものが望ましいというこちらの希望にmystashesさんの回答がより近いものであったためこちらで解決を進めて行きたいと思います。回答のためにお時間を割いていただいたことを大変感謝いたします。

2010/01/30 22:20:14
  • id:icta
    ▼以下が元のCGIの一部です。
    $optionのsplitしたデータを$option_setに入れるコードなのですが、これにいくら手を加えても$option_setが空のままになってしまいます。
    可能であればこれに準じた形でのコードが望ましいのですが、条件にない変数が含まれていますのでもし不可能な場合は上記質問の文字列変換だけでもかまいません。
    お力とお知恵をお借りできれば幸いです。

    @option = split(/\:/,$option);
    $i = 0;
    $flag_zaiko_non=0;
    $flag_non_option ='1';
    $option_set = "";
    $zaiko_new ='';
    while($i < $option_no) {
    ($op_k[$i],$op_m[$i],$op_su[$i],$op_pr[$i]) =split(/\,/,$option[$i]);
    if($op_k[$i] eq ''){ $i++; next;}
    $flag_non_option ='0';
    if($op_su[$i] eq ''){ $flag_zaiko_non=1; }
    if($op_su[$i] > 0){$zaiko_new +=$op_su[$i];}
    $su_ex ='';
    if($op_su[$i] ne '' && $option_su_ex == 1){ $su_ex ="/$op_su[$i]$option_su_tani";}
    $pr_ex ='';
    if($op_pr[$i] ne ''){$pr_ex ="[\\$op_pr[$i]]";}
    $option_set = $option_set."<option value='$op_k[$i]'>$op_m[$i]$pr_ex$su_ex</option>\n";
    $i++;
    }
    if($option_set ne ""){
    $option_set = "<select name='op1'>".$option_set."</select>";
    }else{
    $option_set ="";
    }

    if($flag_non_option ne '1'){
    if($zaiko_new eq ''){
    $zaiko =0;
    }else{
    $zaiko =$zaiko_new;
    }
    }

    @option2 = split(/\:/,$option2);
    $i = 0;
    $option2_set = "";
    while($i < $option2_no) {
    ($op2_k[$i],$op2_m[$i],$op2_su[$i]) =split(/\,/,$option2[$i]);
    if($op2_k[$i] eq ""){ $i++; next;}
    $option2_set = $option2_set."<option value='$op2_k[$i]'>$op2_m[$i]</option>\n";
    $i++;
    }
    if($option2_set ne ""){
    $option2_set = "<select name='op2'>".$option2_set."</select>";
    }else{
    $option2_set ="";
    }
  • id:kn1967
    あら!? まだ人力検索を覗いてたので、回答しようと思ったら回答権無いわw
    自分で調べろみたいな回答なんて、いやぁ~ねぇ~。

    素通りしようかと思ったけど、せっかく作ったから、あげちゃう♪
    求めるものと少し違うと思うけど、そこは自分でフォローしてね♪
    (久々にperl触ったら、あんまりperlらしくない書き方になっちゃたわん)

    じゃぁ~ねぇ~~~。

    # データ準備
    $option = 'select,選択,0,0:9,9号,5,100:11,11号,6,200:13,13号,3,300:15,15号,1,500:another,指定,,500';
    $option2 = 'select,選択:red,赤:blue,青:green,緑';
    # 変換
    if ($option ne '') {
    $option =~ s/([^,]+),([^,]+),([^,]*),([^:]*):?/<option value="$1">$2 在庫$3 単価$4<\/option>/g;
    $option =~ s/ 在庫0 単価0//g;
    $option =~ s/在庫 単価/単価/g;
    $option_set = '<select name="op1">' . $option . '</select>';
    } else {
    $option_set = '';
    }
    if ($option2 ne '') {
    $option2 =~ s/([^,]+),([^:]+):?/<option value="$1">$2<\/option>/g;
    $option2_set = '<select name="op2">' . $option2 . '</select>';
    } else {
    $option2_set = '';
    }
    # 出力
    print $option_set;
    print $option2_set;
  • id:tkyk3
    在庫・単価に関しては特に意識はしていませんが、それも含めてコーディングするなら、在庫・単価の扱いをどのようにしたらいいのか書き加えてくだされば幸いです。単に表示するだけなのか、それとも何か増減などの処理も必要か、等で変わってくると思うので…とりあえず、質問内容のみの回答をしてみました…。

    ノーチェックだけど(笑)
  • id:b-wind
    変態さんが通りますよ…。

    $option = 'select,選択,0,0:9,9号,5,100:11,11号,6,200:13,13 号,3,300:15,15号,1,500:another,指定,,500';
    $option_set = $option ? sub {
    $option_set .= $option;
    1 while ( $option_set =~ s|([^,]+),([^,]+),([^,]*),([^,:]*)|<option value='$1'>$2</option>\n|g );
    qq|<select name='op1'>\n| . $option_set . qq|</select>\n|;
    }->(): "";

    もう少し短くなるかな…。
  • id:icta
    kn1967さん、回答ありがとうございます。最初に挙げたコードに準じたものが望ましいというこちらの希望にmystashesさんの回答がより近いものであったためこちらで解決を進めて行きたいと思います。回答のためにお時間を割いていただいたことを大変感謝いたします。
  • id:kn1967
    回答2への返答欄に対してですが、横から失礼。


    1)valueの値が“記号”ではなく“意味”になる。
      mystashes さんのコードで、正しく表示されるので、
    ictaさんがコピーをミスしている。あるいは、文字化けという事も考えられる。
    いずれにしても、よく見直してもらうしかない。


    2)8件表示されるべきところが1件しか表示されない。
      $option_no 及び $option2_no の値が無いために、
    forループをそれぞれ1回で抜けてしまっている。
      mystashes さんのコードの行頭で説明されているとおり、
    これらの変数に値を入れておく必要がある。
    これらの変数はictaさんがコメント欄に書いたコードに由来するものなので、
    それぞれが実際にはどのような値を持っているのかは回答者からは判らない。


    ※手前味噌ではあるが、私がコメント欄にしるしたものも
     一度入れてみて欲しい。perlでの動作を理解してもらうために、
     極力最低限の機能にて、動作確認まで行ったものであるからして、
     単体でも動くし、単純にコピペで移植するだけで、そちらでも動くはずである。
    ※tkyk3 さんのコードはwin版perl 5.8.8で動かなかった(Linuxでは試してない)
     やりたいことは判るけど、ご本人もノーチェックということなので、
     今のところ放置でスマン。
  • id:mystashes
    御確認有難う御座います。
    >1)valueの値が“記号”ではなく“意味”になる。
    ><option value='15'>15号</option>と表示させたいのですが<option value='15号'>15号</option>となります。
    "#ここにコードを挿入"の手前で$optionの内容を確認頂けないでしょうか。(print $option で良いです)
    "~:15号,15号,1,500:~" となっていたりしないでしょうか?

    >2)8件表示されるべきところが1件しか表示されない。
    $option_no, $option2_no が定義されていない為です。
    元のスクリプトで
    while($i < $option_no) {
    という部分があり、リスト数の上限値を規定していると推察しました。
    そういう要件が無い場合($optionの内容は全てリストする場合)は
    last if (++$i >= $option_no);

    last if (++$i >= $option2_no);
    を行ごと削除してください。

    以下はご質問の件です。

    >>1商材でも在庫無しのものがあればフラグを立てて良いのですね?
    >>$zaiko は全商品の合計で良いのですよね?
    >申し訳ありません。変数が多く、ファイルが多岐に渡るため実際にどのように働いているのかはっきりとはわかりません。問題なく動作しているのでこのままでよいと思われます。

    この部分に関しては全体が判らない為何とも言い難いです。
    何処かのフェイズで一度変数を整理された方が良いかもしれません。(役割、名称等)

    ※追加
    09行目:$i =0;
    10行目:foreach(@CHILD_DATA){
    ↑9行目この$iは最終行手前でインクリメントしていますが、うまくカウントされません。
    私が書いた部分で$iを使っているので、上書きされてしまいます。

    $child_count =0;
    foreach(@CHILD_DATA){
    ~略~
    $child_count++;
    }
    等に変更してください。
    使い捨てでない限り、意味の判る変数名を付けた方が混乱が少なくなります。
    ただし、提示頂いたコードの外で @CHILD_DATA の要素数を $i として取得している場合は、私が提示したコードの $i を他の変数名に変更してください。

    完全に余談ですが、今後の為に、一段落した時点で"use strict"を調べてみてください。
    変数に関する混乱を多少緩和できます。(コーディングに不慣れな方ほど使う価値があると思っています)
  • id:kn1967
    おお! perl神降臨しておられたか!
    やっぱ私のはperlらしからぬコードですね。精進します!

    恐れ多くも4つ目は ([^,:]*) だと : まで巻き込んでしまうので
    ([^:]*):* です。

    では、ひとまず失礼。
  • id:icta
    mystashesさん、kn1967さん、丁寧にご回答いただきありがとうございました。
    お二人のコードは完全に希望通りの動作をいたしました。
    kn1967さんのコードは当初<option value="$1">$2 在庫$3 単価$4<\/option>となっており<option>タグ内が希望どおりのものではなかったため、動作をよく確認せずにいました。大変申し訳ありません。
    「1)valueの値が“記号”ではなく“意味”になる。」ですがご指摘のとおり私のイージーミスでした。何度もチェックしたつもりでしたが完全に見落としていました。
    お恥ずかしい限りです。
    mystashesさん、use strict検索してみました。わからないことがたくさんありますが一歩一歩確実に進んで行きたいと思います。
    大変お世話になりました。


  • id:b-wind
    狂気の沙汰。

    $option = 'select,選択,0,0:9,9号,5,100:11,11号,6,200:13,13 号,3,300:15,15号,1,500:another,指定,,500';

    $option_set = $option ? join( '', qq|<select name="opt1">\n| , ( map { map { qq|<option value='$_->[0]'>$_->[1]</option>\n|; } [(split(/,/,$_))[0,1]] } split ( /:/, $option ) ) , qq|</select>\n| ) : "";

    print $option_set;

    前のは正規表現ミスってた。
  • id:mystashes
    多大なポイント、いるか賞を頂き有難う御座います。
    改善点は多数あるかと思いますが、焦らず一つ一つ改善していってください。
    蛇足となりますが、類似の機能を実装される機会があれば、他回答者様のコードをご参考にされることをお勧め致します。
    御認識頂いております通り、私のコードはictaさんの元コードに準じる形という点を考慮したもので、多少冗長な書き方になっています。
    コーディングスタイルにベストは存在しませんので(特にPerlは)、種々サンプルコードからご自分に合う形を取り入れていってください。
    WEBサイトの無事リリースをお祈りいたしております。(指輪でしょうか?)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません