_--_--_-_-のプロフィール

@_--_--_-_- _--_--_-_-
ありがとう数83
質問数15
回答数38
ベストアンサー数
8
ベストアンサー率
47%
お礼率
74%

Perl始めて早20年。自他共に認めるJust another Perl hacker,である。

  • 登録日2008/03/09
  • 正規表現で文字クラスの引き算

    お世話になります。 正規表現の文字クラスについてお聞きします。 0~6 の数字1字を [0-6] という風に指定しますが、 .NET 正規表現では、 この中から 3~5 は除く、というようなとき、 [0-6-[3-5]] と言う風に書けるようですが、 Perl では書けないようです。 (一応ラクダ本と perldoc perlre には当たりました) #! perl # regtest.pl -- 正規表現のテスト while(<DATA>) { chomp; print "$_ matches /[0-6-[3-5]/\n" if /[0-6-[3-4]/; } __DATA__ 0 1 2 3 4 5 6 7 8 9 のようなスクリプトを動かすと、 C:\test>regtest.pl 0 matches /[0-6-[3-5]/ 1 matches /[0-6-[3-5]/ 2 matches /[0-6-[3-5]/ 3 matches /[0-6-[3-5]/ 4 matches /[0-6-[3-5]/ 5 matches /[0-6-[3-5]/ 6 matches /[0-6-[3-5]/ のような結果が得られ、引き算が確かに聞いていません。 Perl と .NET 正規表現は互換ではないのでしょうか。 また、Perl でも同じことが書けるでしょうか。 よろしくご教示願います。

    • ベストアンサー
    • Perl
  • cgiの未入力チェック機能

    プログラムを全て記述すると、長くなりそうなので、 まずは現象だけでも。 下記のURLのようなメールフォームを作りました。 http://life-field.com/mailform/mail.htm 一人目の申込者の氏名の未入力チェックだけでも行いたいのですが、 mail.htm中の、氏名には、 <INPUT size="40" type="text" name="name"> と、指定して、 mail.cgiのチェック部分は、 my $name = $cgi->param('name'); このようにパラメータ変換した後、 if($name =~ /^\s*$/){&error('Input Error!','氏名を入れてください。ブラウザーの戻るボタンで戻って、必要な項目を入力して下さい。');exit;} と、エラーチェックをし、 sub error{ my ($title,$msg) = @_; print<<"END"; Content-type: text/html <HTML> <HEAD> <LINK rel="stylesheet" href="mystyle.css" type="text/css"> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>$title</TITLE> </HEAD> <BODY> <P>$title</P> <HR width="700"> $msg <HR width="700"> </BODY> </HTML> END } こうやって、エラー出力しています。 ですが、氏名を入力して「申し込みボタン」を押したにもかかわらず、 「氏名を入れてください。ブラウザーの戻るボタンで戻って、必要な項目を入力して下さい。」 と未入力エラーが返って来てしまうのです。 考えられる原因がいくつかありましたら、 チェックいたしますので、 どうかお助けください・・・。

    • ベストアンサー
    • Perl
    • rtsl
    • 回答数1
  • CGIでprint出力時に文字化けします・・・

    test.cgi (UTF-8)--------------------- #!/usr/bin/perl use utf8; print "Content-type: text/html;charset=utf-8\n\n"; open FILE, "test.txt"; while (<FILE>){ $read_list[$i]=$_; $i++; } print "あ=$read_list[0]<BR>\n"; print "a=$read_list[0]<BR>\n"; exit; ------------------------------- test.txt (UTF-8)-------------- テスト用投稿 ------------------------------- 上記の2種類のファイルを用意し実行したところ、下記の結果になります。 ↓-----------------------------↓ あ=i≫?a□□a□1a□□c□¨ф□□c¨?<BR> a=テスト用投稿<BR> ↑-----------------------------↑ 文字が正常に表示されないのですが、外国語?みないなまったく読めない文字になってしまいます。(コピペだと表示されないみたいなので、似たような感じで作りました。) 色々試してみたのですが、print="";の中に英数以外が入っていると文字化けするみたいです。 あ=テスト用投稿 a=テスト用投稿 としたいのですが、まったく解決方法がわかりません。 perlのバージョンは5.6.1です。 ファイルはすべてUTF-8で保存しています。 ブラウザもエンコードはUTF-8になっています。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • 文字列の切り出しとその文字列からの文末削除がしたい

    while(<GO>){ if($_ =~ /BOOK(.+)/){ print OUT "\n$1,"; } #01234を見つけたら、一番最初の文字列を抜き出す if($_ =~ /012345 (.+)(.+)(.+)(.+)(.+)(.+) /){    #その文字列の文末を削除 $data=(.+) substr($data, -3, 2) = ""; print OUT "$1,"; } } close(OUT); データ例 #####BOOK###### ###################33########################## 012345 6.6666ppm 2.6asc 3.9asc GOOD 0 0 012345 1.6666pm 2.6asc 3.9asc NO 0 0 012345 6.6656pppm 2.6asc 3.9asc MIN 0 0 ###################36########################## 012346 6.6666ppm 2.6asc 3.9asc GOOD 0 0 012346 1.6666ppm 2.6asc 3.9asc NO 0 0 012346 6.6656ppm 2.6asc 3.9asc MIN 0 0 上記のようなデータから一番左の文字列があったら、 一番最初の文字列を切り出し,文末を削除したいのですが、 作成したperlでは6.6666ppm 2.6asc 3.9asc まで切り出して且文末が削除できません。 どうかアドバイスをお願いします。

    • ベストアンサー
    • Perl
    • noname#72292
    • 回答数11
  • 暗号化(perl)→復号化(php)

    暗号化キーを使用した暗号化→復号化で cgi(perl)で暗号化し、phpで復号化を行おうとしております。 AES暗号を使用したのですが、いろいろ設定を変えて 試みたのですが、うまくいきませんでした。 他に暗号化キーを使用した暗号化の方法がありましたら 教えてください。 暗号化(perl)→復号化(php)で実績のあるモジュールが あれば非常に助かります。 よろしくお願いします。

    • ベストアンサー
    • Perl
    • lsdp
    • 回答数1