Perl

Perl で UTF-8 のメール件名を正しく送る

概要

メールの件名や表示名は、MIME対応ライブラリに文字列として渡します。独自のエンコード処理を重ねず、ヘッダー用APIを使います。

実施例

use Email::MIME;

my $mail = Email::MIME->create(
  header_str => [
    From    => 'sender@example.com',
    To      => 'recipient@example.com',
    Subject => '日本語の件名',
  ],
  attributes => { content_type => 'text/plain', charset => 'UTF-8' },
  body_str => '本文です。',
);

注意点

送信前に実在する宛先ではなくテスト用メールボックスで、件名・本文・添付の表示を確認します。

参考: 公式ドキュメント

続きを読む

Perl DBI で INSERT 後のIDを取得する

概要

PerlではDBIの同一ハンドルでINSERTを実行し、使用中のドライバーが提供するlast_insert_idを利用します。SQL文字列の連結は避けます。

実施例

my $sth = $dbh->prepare('INSERT INTO entries (title) VALUES (?)');
$sth->execute($title);
my $id = $dbh->last_insert_id(undef, undef, 'entries', 'id');

注意点

last_insert_idの対応範囲はDBドライバーに依存します。対象DBでテストし、トランザクションの接続を途中で切り替えないでください。

参考: 公式ドキュメント

続きを読む

Perl で、「配列の配列」のデータ構造を作る

Perl では配列は、@array = ('aaa', 'bbb', 'ccc') のように書くが、「配列の配列」のデータ構造を表現するにはどうしたらいいのだうろう?

以下にサンプルコードを示す。$songs という配列の先頭は「$」となっている。その内側も配列なのに (...) ではなくて [...] になっていることに注目してほしい。これは配列の配列を参照で表現するためである。アクセス方法は foreach のところを参考にしてほしい。

続きを読む

Perl で、「配列とハッシュの組み合わせ」のデータ構造を作る

  1. 配列の頭に付けるのは「@」であるから、その後の配列の要素の列挙においてハッシュを宣言する。このときハッシュの各要素は {...} でくくって 「key => value」 としている。それぞれの要素はカンマ(,) で区切る。配列の宣言の最後はセミコロン (;) である。
  2. 各要素へのアクセスはまず配列を foreach でほぐす。ほぐした各要素は $db->{key} のように -> でアクセスできる。

 

続きを読む

Ubuntu の Apache で、Perl/CGI を有効にする方法

Ubuntu の Apache の設定ファイルの場所は /etc/apache2/site-available/default である。従って、 Perl をデフォルトのディレクトリ /var/www で動かすには、Perl と Apache の関連モジュールを apt-get でインストールした後、次のようにする。 # vi /etc/apache2/site-available/default Options Indexes FollowSymLinks MultiViews +ExecCGI # ここと DirectoryIndex index.cgi # ここを追加。index.cgi はおまけ。 AddHandler cgi-script .cgi .pl # もし Perl (拡張子は .cgi か .pl)を有効にしたい場合はこの行を追加 AllowOverride None Order allow,deny allow from all
続きを読む

Perl で、1GB のデータ(テキストファイル)を作成する方法

次のコードを makefile.pl などというファイル名で保存して、chmod +x ./makefile.pl し、そして ./makefile.pl を実行すれば makefile.pl と同じディレクトリ上に sample.txt に1GiB (ギビバイト=2^30)ぴったりのデータ(「a」の文字で埋め尽くされた テキストファイル)が作成されていると思う。プログラム的には、例えば 1KiB のダミーデータを変数($data)に入れてそれを 1024 x 1024 回書き込んだ方が 1文字ずつ 2^30 回書き込むよりも速いと思うが、試してみたらバァッファオーバーフローしてるのか?うまくいかなかった。 ちなみに、2^30 = 1ギガバイト = 1,073,741,824 バイト = 1024 バイト x 1024 キロバイト x 1024 メガバイト #!/usr/bin/perl open(OUT, '>sample.txt'); for(my $i = 0; $i < 2^30; $i++) { print OUT 'a'; } close(OUT); 1; </code>
続きを読む

Perl で、ブラウザから送られてきたデータを CGI.pm を使わずに処理する方法

最も原始的な例は以下のようになるだろう。今さらだけど、知っておいて損はないかもしれない。

HTTP プロトコルの場合、クライアントからサーバにデータを送る方法は POST メソッドか GET メソッドと仕様で定義されているから、POST の場合と GET の場合の2つのパターンを考えてデータを受け取ってあげればよい。

続きを読む

デバッグの方法

みなさんは、日ごろプログラミングにおいてデバッグはどのようにされているだろうか。Eclipse などの開発環境を使っている場合は、それを利用すればいいと思う。

続きを読む
Perl を購読