68user's page 掲示板

Prev< No. 2207> Next  [最新発言に戻る] [過去ログ一覧]
No. 2207 # 68user 2001/10/13 (土) 21:45:30
>>2204 shii
考え方はよいのですが、もちっとスマートにやるなら、
    「あ」の文字コードを調べるスクリプト
        require 'jcode.pl';
        $_="あ";
        jcode::convert(\$_, 'euc');
        s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
        print "あ in euc-jp: $_\n";
        $_="あ";
        jcode::convert(\$_, 'sjis');
        s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
        print "あ in shift_jis: $_\n";
        $_="あ";
        jcode::convert(\$_, 'jis');
        s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
        print "あ in jis: $_\n";

    実行結果:
        あ in euc-jp: %A4%A2
        あ in shift_jis: %82%A0
        あ in jis: %1B%24B%24%22%1B%28B # これは他のパターンも有りうるかも
を踏まえて、
    <input type="hidden" name="assist" value="あ">
としておき、
      read(STDIN,$input,$ENV{'CONTENT_LENGTH'});
      
      ($assist_code) = $input =~ s/(^|&)assist=(.*?))($|&)//;

      if ( $assist_code =~ m/^\%A4\%A2$/i ){
          $input_encoding = 'euc';
      } elsif ( $assist_code =~ m/^\%82\%A0$/i ){
          $input_encoding = 'sjis';
      } elsif ( $assist_code =~ m/^\%1B\%24B\%24\%22\%1B\%28B$/i ){
          $input_encoding = 'jis';
      }

      @parts = split(/&/,$input);
      foreach(@parts) {
              ($key,$val) = split(/=/);
              $key =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
              $val =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
              jcode::convert(\$key,'euc', $input_encoding);
              jcode::convert(\$val,'euc', $input_encoding);
      }
くらいがよろしいかと思います (動作確認はしていません)。

>>2203 AGE
> ntp はソースから make install しました。
> その場合のインストールされたファイルを知りたかったのです。
もし Makefile に uninstall とか deinstall とかいうターゲットがあるなら、
    # make uninstall
    # make deinstall
ですが、なさそうならば
    # make -n install
して、インストールされるファイルをメモって、手動で rm ですね。

>>2202 スナフキン
> ServletもCGIと同じくリクエスト毎に起動するのですか?
いいえ、しません。そういう意味では常駐していますね。

しかし、CGI を使うときも apache が常駐していますが、「常駐
システムを開発している」という意識は僕にはありません。それと
同様に、Servlet コンテナが常駐していても「常駐システム」とは
呼ばないんじゃないなぁ、ということです。まぁ、ここらへんの
感覚は人によって違うのかもしれません。

>>2200 /tk
> どちらもスライスだと思うのですが
えっと、@a[0] と (@a)[0] は違うんですよね? ということです。

要は、
    「@a[0] は文法エラーのところを perl があえて $a[0] に読み変えている」
とこれまで思っていたのですが、
    「@a[0] は文法的には正しいけれど、$a[0] の方が適当なので
        perl があえて警告するようにしている」
ということでしょうか?

> @a は配列のスライスで, (@a) はリストのスライスかと…
perl に配列とリストという区別はあるんでしたっけ。

Prev< No. 2207> Next  [最新発言に戻る] [過去ログ一覧]