「MobileMe で charset 指定のないメールが文字化けする件」を書くときに Perl を使ってメールを読む方法を学んだ。そのときのまとめ。
次に示すのは、IMAP サーバにアクセスして、ある題名(の一部)に合致するメールの情報を表示するスクリプトである。
「MobileMe で charset 指定のないメールが文字化けする件」を書くときに Perl を使ってメールを読む方法を学んだ。そのときのまとめ。
次に示すのは、IMAP サーバにアクセスして、ある題名(の一部)に合致するメールの情報を表示するスクリプトである。
小ネタ。「【Unix】タイムスタンプを変更する」を調べたときに使った Perl スクリプト。
#!/usr/bin/perl use strict; use warnings; use Date::Manip; my @s = stat "IMG_0036.MOV"; my $atime = $s[8]; my $mtime = UnixDate "2010-08-14T14:29:17", "%s"; utime $atime, $mtime, "IMG_0036.MOV";
Perl でファイルのタイムスタンプを変えるには utime
関数を使う。例では atime は元のファイルのものをそのまま使い、mtime だけを指定の日時に変更している。どちらのパラメータもエポック時で指定する必要があるが、その際 Date::Manip
モジュールの UnixDate
関数を使うと便利だ。
【Perl】Date::Manip モジュールで日付文字列を解析する(関数型インターフェイス編)
https://blog.delphinus.dev/2010/07/date-manip-in-functional-interface.html
もう 3 回目になるが、Perl スクリプトを exe 化する方法について。Perl が 5.12.2 にアップデートしたのでまとめてみた。
PARでPerlスクリプトをexe化 @ ActivePerl 5.10.1 build 1007
https://blog.delphinus.dev/2010/02/par-activeperl-5101-build-1007.htmlActivePerl 5.12 で PAR::Packer をインストール
https://blog.delphinus.dev/2010/04/install-par-packer-on-activeperl-5120.html
まずは、PPM(Perl Package Manager)を使って必要なモジュール(+α)をインストールする。
今まで面倒で放置していたのだが、Movable Type を 5.0 から 5.02 にアップグレードしてみた。
Movable Type 5.0 から 5.0x へのアップグレード
http://www.movabletype.jp/documentation/mt5/upgrade/mt5.html
当たり前のことなのだけど、改めて纏めてみる。レキシカルスコープとパッケージの範囲って全然違うんだなあ。
our
と my
#!/usr/bin/perl use strict; use feature qw! say !; package AAA; our $our_var = 123; my $my_var = 567; package DDD; say '$our_var : ' . ( $our_var // "undefined" ); say '$AAA::our_var : ' . ( $AAA::our_var // "undefined" ); say '$DDD::our_var : ' . ( $DDD::our_var // "undefined" ); say '$my_var : ' . ( $my_var // "undefined" ); say '$AAA::my_var : ' . ( $AAA::my_var // "undefined" ); say '$DDD::my_var : ' . ( $DDD::my_var // "undefined" );
$our_var : 123 $AAA::our_var : 123 $DDD::our_var : undefined $my_var : 567 $AAA::my_var : undefined $DDD::my_var : undefined
our
も my
もレキシカルスコープ全体で有効になる。この例の場合、その範囲はスクリプト全体となる。our
は変数をパッケージの名前空間に紐付けする。つまり、グローバル変数を作る。my
にそのような効果はないのでパッケージ名を付けても参照できない(14 行目)。小ネタ。5.10.0
以降いくつかの予約語が追加されたが、互換性のために標準では有効になっていない。
#!/usr/bin/perl use utf8; use strict; use warnings; binmode STDOUT => ":utf8"; # say は使えない say "Hello, World!"; # でも Defined-or 演算子はエラーにならない my $t = undef // "未定義です!";
$ perl testSay.pl String found where operator expected at testSay.pl line 8, near "say "Hello, World!"" (Do you need to predeclare say?) syntax error at testSay.pl line 8, near "say "Hello, World!"" Execution of testSay.pl aborted due to compilation errors.
Gmail の SMTP サーバを使ってメールを送るのに四苦八苦したメモ。次のサイトを参考にして書いてみた。
Gmail の SMTP を利用して Perl からメール送信(添付ファイル付) – memo.mzt
http://d.hatena.ne.jp/mzt/20080219/p1
Encode モジュールでの MIME Encode
http://www.ksknet.net/perl/encodemime_enco.html
ただ送るだけなら割と簡単なのだが、文字化けを防いだり、第三、第四水準といった最新の文字セットを含めようとすると結構複雑。この本が大変参考になった。
プログラマのための文字コード技術入門
http://www.amazon.co.jp/dp/477414164X/