tamahiro22のプロフィール

@tamahiro22 tamahiro22
ありがとう数28
質問数0
回答数32
ベストアンサー数
8
ベストアンサー率
44%
お礼率
0%

  • 登録日2006/12/04
  • use encodingによって正規表現の結果が変わる?

    お世話になります。 webシステムで、画面入力値のチェックをperlで行っているのですが、 今回、perlのバージョンアップ対応を行っており、ソース修正をしたところ、以下のような現象に悩まされて困っております。 (本当のソースはもっと長いのですが、以下の現象により入力チェックが正常に動作しないという点までは突き止めました。) バージョン perl v5.8.0 os Red Hat Linux release 9 現象 use encodingが指定されていると、正規表現の$が効かないようです。 ソースと実行結果1 #!/usr/bin/perl #use encoding "euc-jp"; if ('apple' =~ /e$/) { print ("match\n"); } else { print ("unmatch\n"); } このときは match と表示されます。 ソースと実行結果2 #!/usr/bin/perl use encoding "euc-jp"; if ('apple' =~ /e$/) { print ("match\n"); } else { print ("unmatch\n"); } このときは、unmatch と表示されます。 対処方法のヒントだけでも頂けると助かります。 (他の質問を検索してみましたが、同様なものを見つけることができませんでした。) もしかして、perlのバグなのでしょうか?

    • ベストアンサー
    • Perl
  • ランダムに1行読込み フォーム文字との同異を 判定するには?

    txt ファイル から ランダムに 1行読み込んで それが フォームの入力文字と同じかを 判定し、 同じならば、次のファイルへ飛ぶ には、 どうしたらよいのでしょうか? お教えください。 ------------------------------------------------------ mondai.txt に 問題を 1行に 1題ずつ kotae.txt に 解答を 1行に ひとつずつ 書きました。 mondai.txt の 1行目の 解答が kotae.txt の 1行目 (2行目-10行目、同じ)としました。 001.cgi で 正解すれば 002.cgi を開く 不正解なら もう一度 001.cgi を実行。 問題は ランダムに 表示する。 まず、mondai.txt と kotae.txt を それぞれ 10行にして やってみました。 ------------------------------------------------------ すると、問題は ランダムに表示されました。 しかし、 ##################################################### if (param('answer') eq ("$ans")){ print "Location:$num2.cgi\n\n"; ・・・ { ##################################################### が、うまくいきません。 ↓こうしてあります。どうしたら、よいでしょうか? ↓解答したことを file.txt に記録しよう、ともしています。 ↓ ################ はじめ ############################## #!/usr/bin/perl -T use strict; use warnings; use CGI qw(-debug :standard); my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon = sprintf("%02d", $mon + 1); $day = sprintf("%02d", $day); $hour = sprintf("%02d", $hour); $min = sprintf("%02d", $min); $sec = sprintf("%02d", $sec); my $num = ('1267'); my $num2 = $num + 1; my $value = param('answer'); open(FILE, "../../mondai.txt"); my @data2 = <FILE>; close(FILE); open(FILE, "../../kotae.txt"); my @data3 = <FILE>; close(FILE); my $i = int(rand(10)); my $ans = $data3[$i]; if (param('answer') eq ("$ans")){ print "Location:$num2.cgi\n\n"; open(FILE, '<+file.txt') or die "$!"; my @DATA = <FILE>; close(FILE); open(FILE, '>file.txt') or die "$!"; print FILE ("$num,$ans,$year年$mon月$day日 $hour時$min分$sec秒\n"); print FILE (@DATA); close(FILE); } else { print header(-charset => 'Shift_JIS'); print start_html("$num.cgi"); print ('<font face="century">'); print $data2[$i]; #####---問題表示 print br; print startform( -method => 'POST', -action => "$num.cgi" ); print blockquote( textfield( -name => 'answer', -size => '70', -id => "next", -accesskey => '[' ) ); print <<END; <script type="text/javascript" language="JavaScript"> document.getElementById('next').focus(); </script> END print submit(-value => 'Send ( ↑Alt+[ )'); print endform; } ################ おわり ############################## よろしく、お願いいたします。

    • ベストアンサー
    • Perl
  • パーミッション600でもブラウザからアクセス出来る

    いつもお世話になります。 1.FTPでtest.lzhというファイルをアップし、パーミッションを600にしたもの 2.perlで組んだファイルアップロードCGIを使ってtest.lzhを1と同様の場所にアップしたもの(perlでchmodで600に) ブラウザ上から1の場合はアクセス拒否されるのですが、2の場合は普通にアクセス出来てしまいます。 所有者が異なると、同じパーミッションでも違う動きをするのでしょうか? 2のケースでもアクセス拒否させる方法はあるのでしょうか? 基本的な考え方を間違えていたら済みません。 宜しくお願い致します。

    • ベストアンサー
    • Perl
    • mm666
    • 回答数3
  • 次のcgiファイルを開くには? もう一度

    http://oshiete1.goo.ne.jp/qa3951263.html で質問している者です。 間違って、[回答への補足] に書いてしまいました。 もう一度質問させてください。すみません。 Location を 教えていただき、とても感謝しております。 でも、私の 001.cgi は 以下のように始まっております。 print header(-charset => 'Shift_JIS'); print start_html("001.cgi"); このprint header(-charset => 'Shift_JIS');を消して if (param('answer') eq $ans){ print ('Location:002.cgi\n\n'); } else{ print header(-charset => 'Shift_JIS'); ##省略## print endform; { としたのですが、だめでした。 if (param('answer') eq $ans) が 下の方にもう一度出てくるからでしょうか? ###### はじめ ##################### #!/usr/bin/perl -T use strict; use warnings; use CGI qw(-debug :standard); print "Location:1266.cgi\n\n"; ###### おわり ##################### としたら、001.cgi を開くと 002.cgi へ飛ぶことができました。 どこに print "Location:1266.cgi\n\n"; を書けばよいのでしょうか? よろしく、お願いいたします。

    • ベストアンサー
    • Perl
  • 次のcgiファイルを開くには?

    すみません。初心者です。 001.cgi というファイルで フォーム に 正解を入力して Enterキー を 押したら 次の 002.cgi を 開く(実行する)ようにするには どうしたらよいでしょうか? 今は↓このようにして 「次のファイルへ」をクリックしてもらっています。 Enterキーを押すだけで 次の002.cgi (=$num2.cgi)へ行きたいのです。よろしく、お願いいたします。 #-------- if (param('answer') eq $ans){ print ('正解'); print ("<a href=$num2.cgi accesskey=]>次のcgiファイルへ (Alt+])</a> "); #--------

    • ベストアンサー
    • Perl