« リメイク:「戻る」リンクを作る | メイン | 携帯番号ポータビリティ(MNP) »

リメイク:自分の名前を調べる

自分の名前を調べる@のぶろぐ

今回も、今後のPerlで推奨されるであろう書き方(UTF-8で書いて、「use utf8;」を用いる)をしてみました。
前回と違うのは、Encodeを明示的に使うのではなく、PerlIOに対して直接細工をします。

参考:Perl 5.8.x Unicode関連

Wide character な文字列はそのまま出力すると文句を言われるというわけです。 回避するには、PerlIOレイヤを使うか、UTF8フラグを落とします。

UTF8フラグをいかに落とすか、って事ですね。

サンプル

今回は、binmodeを使って、出力を「utf8」ということにしています。

もし、EUC-JPに変更したい場合は、「encoding」を使って文字コードを変更します。
…まあ、バグの元にもなりそうで、あまり意味はなさそうですが。


さて、テーマは自分の名前を調べる、ですが、ここではCGI.pmで簡単に使える環境変数を取得してみました。
ドキュメントにはあまり細かくは書いていないので、簡単にスクリプトを書いて実装の参考にするのもよいですね。


ソースコード

#!/usr/bin/perl -T
# 日本語(utf-8)
 
use strict;
use warnings;
use utf8;
use CGI;
 
binmode STDOUT, q{:utf8};
 
# binmode STDOUT, q{:encoding(euc-jp)};
 
{
    my $cgi   = CGI->new;
    my $html  = qq{};
    my $title = qq{テスト5};
    $html .= $cgi->header( { -charset => q{UTF-8} } );
 
    #    $html .= $cgi->header( { -charset => q{EUC-JP} } );
    $html .= $cgi->start_html(
        {   -title => $title,
            -lang  => qq{ja},
        }
    );
    $html .= $cgi->h1($title);
    $html .= $cgi->start_div;
    if ( my $referer = $cgi->referer ) {
        foreach my $key ( sort keys %ENV ) {
            my $lc_key = lc $key;
            $lc_key =~ s/^http_//;
            my $value = "";
            eval { $value = $cgi->$lc_key() };
            unless ($@) {
                $html .= $cgi->p(
                    qq{環境変数「$key」の値は、「$value」です。}
                );
            }
        }
        $html .= $cgi->a( { -href => $referer }, q{戻る} );
        $html .= $cgi->h2(qq{参考});
        $html .= $cgi->p( join $cgi->br, sort keys %ENV );    # キーの一覧
    }
    else {
        $html .= $cgi->p(qq{情報の取得に失敗しました。});
    }
    $html .= $cgi->end_div . $cgi->end_html;
 
    print $html;
}

カテゴリ:

トラックバック

このエントリーのトラックバックURL:

同一カテゴリの最新記事

最近のエントリー

Amazon.co.jp

Creative Commons License
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.
Powered by
Movable Type 3.36
Amazon.co.jp