C++マニアック

Perlの小部屋

管理人は Perl もよく使うので、小技集をちょっと。

  1. 複数行コメント
  2. ヒアドキュメント
  3. 日本語を使おう
  4. perl 関連本

複数行コメント ページの先頭へ

複数行をコメントにしたい場合には =pod を使って、次のように書きます。

=pod
  これはコメント。
=cut

ヒアドキュメント ページの先頭へ

複数行をそのままの形で、文字列として扱うには、ヒアドキュメントを使用します。

my $string = <<EOF;
  これは、ヒアドキュメントの
  内容です。
EOF

EOF の部分は、対応していれば EOF に限らず、ABC など何でも OK です。

<< の右側にある EOF を "EOF" または 'EOF' とすることも可能です。

EOF または "EOF" では、ヒアドキュメントの中の変数が展開されます。逆に 'EOF' とすると、変数が展開されません。

日本語を使おう ページの先頭へ

日本語の文字列のマッチを使おうとしたら、"ソ"などの文字で引っかかって悲しい思いをした、などの対策としては、Perl の内部処理として utf8 を使うようにする必要があります。

いにしえの JCode は、もはや、さすがに古くなってしまったので、Encode 系のモジュールの使い方として、次のようにすると簡単、というメモを作ってみました。

・Windows では、プラットフォームの標準文字が shiftjis なので、ソースコードは shiftjis で書くのが簡単です。
  このとき、Perl 内部の文字列比較などは utf8 で行いたいので、ソースコードの冒頭に次のように書くようにします。
    use strict;                                 # お決まりの安全策
    use encoding 'shiftjis';                    # ソースコード自体は shiftjis で書かれている。
    use open IN  => ":encoding(shiftjis)";      # Perl 外部からの入力は、shiftjis である。
    use open OUT => ":encoding(shiftjis)";      # Perl 外部への出力は、shiftjis である。
    use open ":std";                            # 標準入出力も上記 IN/OUT に順ずる。
    use Encode;                                 # Perl 内部の utf8 と外部の型式間を変換するためのモジュール
    use Encode::JP;                             # 上記の日本語補助部分
・ソースコードを utf8 で書くと言う方法もありますが、そのときには、冒頭に次のように書きます。どちらでもほぼ同じかと。
    use strict;                                 # お決まりの安全策
    use utf8;                                   # ソースコード自体は utf8 で書かれている。
    use open IN  => ":encoding(shiftjis)";      # Perl 外部からの入力は、shiftjis である。
    use open OUT => ":encoding(shiftjis)";      # Perl 外部への出力は、shiftjis である。
    use open ":std";                            # 標準入出力も上記 IN/OUT に順ずる。
    use Encode;                                 # Perl 内部の utf8 と外部の型式間を変換するためのモジュール
    use Encode::JP;                             # 上記の日本語補助部分
・上記で Eclipse と EPIC の組み合わせの環境でも、エラーが出ずに動作するようです。
・ファイルをオープンする場合には、次のようにします。
    my $OUTPUT = "漢字.txt";
    open OUTPUT, encode('shiftjis', "<$OUTPUT");    # encode は、Perl 内部の utf8 型式から、指定の外部型式にエンコードする。
・Web から読み込んだ euc-jp を内部の utf8 に変換するときには、次のようにします。
    my $EucJpContent = $UserAgent->get($url);
    my $Utf8Content = decode('euc-jp", $EucJpContent);  # decode は、外部の指定型式から、Perl 内部の utf8 型式にデコードする。

これで、少し快適になるかと。

もはや Perl では、変数名に日本語を使うことも可能ですが、Eclispe などのデバッガが対応していないので、まだ、ちょっと使えないってところでしょうか。