tamashiro's note

PerlとPCに関するメモ

Perl

合成文字を単独文字に変換する

Unicode::Normalizeで合成文字を単独文字に変換できる。

use utf8;
binmode STDOUT, ':utf8';

use Unicode::Normalize;

my $ka_dakuten = chr(0x304B) . chr(0x3099); # が
my $ga         = chr(0x304C)              ; # が

if ( NFC($ka_dakuten) eq $ga ) {
    print "「NFC($ka_dakuten)」は「$ga」と同じ\n";
}
「NFC(が)」は「が」と同じ

文字数も正しく?得られる。

use utf8;
binmode STDOUT, ':utf8';

use Unicode::Normalize;

my $ka_dakuten = chr(0x304B) . chr(0x3099); # が

printf "$ka_dakuten: %d文字\n", length $ka_dakuten;
printf "NFC($ka_dakuten): %d文字\n", length NFC($ka_dakuten);
が: 2文字
NFC(が): 1文字

Sat Apr 11 22:32:45 2009

モジュール内ではused only onceは警告されない

スクリプト内で1度しか使われていない名前は警告される。

package Foo;

use warnings;

$Foo::Bar = 1;
perl Foo.pm
Name "Foo::Bar" used only once: possible typo at Foo.pm line 5.

しかし、モジュール内では警告されない。

perl -MFoo -e ''

Sun Apr 12 00:26:29 2009

テストの実行

h2xsを使ったモジュールは以下のコマンドでテストを実行できる。

perl -Ilib -MTest::Harness -e 'runtests @ARGV' t/*.t

ただし、WindowsのActivePerlの場合はコマンド プロンプトでワイルドカードが展開されないため使用できない。

>perl -e "print @ARGV" t\*.t
t\*.t

以下のコマンドであればWindowsのActivePerlでも使用できる。

perl -Ilib -MTest::Harness -e "runtests glob 't/*.t'"

Sun Apr 12 00:53:55 2009

MANIFESTの確認

モジュールのファイル不足はmake時に確認されるが、MANIFESTに書かれていないファイルは無視される。事前に以下のコマンドの結果がMANIFESTの行数と等しい事を確認しておく。

find -type f | wc -l

Sun Apr 12 01:06:00 2009

モジュールを任意のディレクトリにインストールする

Makefile作成時にPREFIXとLIBを指定する事でモジュールを任意のディレクトリにインストールできる。

perl Makefile.PL PREFIX=/home/foo/local LIB=/home/foo/local/lib
make
make test
make install

Sun Apr 12 01:34:35 2009

ArrayBox - 配列をメソッドで操作するためのクラス

概要

require ArrayBox;

my $ab = ArrayBox->new( 'A' .. 'Z' );

$ab->grep( sub { ord() % 2 == 0 } )->map( sub { lc } )->each( sub { print } );
bdfhjlnprtvxz

ソース

ArrayBox-0.00_05, ArrayBox-0.00_05.tar.gz

Sat May 16 17:39:44 2009

ActivePerlのインストール

Location:をC:\usr\local\に設定すると、perlのパスはC:\usr\local\bin\perl.exeになる。(C:\usr\ならC:\usr\bin\perl.exeになる。)あらかじめC:\usr\を作成し、適切なセキュリティ設定(AdministratorsとSYSTEMにフルコントロール、Power Usersに変更、Usersに読み取りと実行、CREATOR OWNERにサブフォルダとファイルのみフルコントロール)をしておく。

Mon May 4 23:02:16 2009

数値

sub is_num { defined $_[0] and ( $_[0] ^ $_[0] ) eq '0' }
for my $one ( 1, '1' ) {
    print "$one は", is_num($one) ? '数値' : '文字', "である\n";
}

Sat Dec 5 09:09:32 2009

Windows

コマンドラインから電源オフや休止を実行する@IT

コマンドラインから電源オフや休止を実行する方法が@IT - アットマーク・アイティコマンドラインから電源オフや休止を実行するに掲載されている。

C:\>shutdown -r -t 0
C:\>%windir%\System32\rundll32.exe powrprof.dll,SetSuspendState

Sun Apr 12 03:12:30 2009

マイ ピクチャやマイ ミュージックを修復

以下のコマンドでマイ ピクチャやマイ ミュージックのフォルダを修復できる。

>rundll32 mydocs.dll,PerUserInit

Tue Apr 14 05:01:29 2009

いろいろ

SonicStage - 1つのアルバムにまとめる

アルバムの名前が同一でアーティスト名が異なる曲は、「コンピレーション」を指定する事で同一のアルバムにまとめられる。

Tue Apr 14 04:55:02 2009

Thunderbird - UTF-8エンコーディングのメールを7bitで送信する

文字エンコーディングをUnicode (UTF-8)にすると、通常は8bitのテキストのまま転送される。

Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

メッセージ本文

Quoted-Printable方式でのMIMEエンコードを指定する事で7bitのテキストで転送できる。

Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: quoted-printable

=E3=83=A1=E3=83=83=E3=82=BB=E3=83=BC=E3=82=B8=E6=9C=AC=E6=96=87

[8 ビットの文字エンコーディングを使うメッセージは Quoted-Printable 方式で MIME エンコードする] チェックボックス([ツール] - [オプション] - [編集] - [一般])で設定する。

Thu Apr 16 00:02:16 2009

Synergy - Computer Startsを設定した場合は、マイ ドキュメントのsynergy.sgcは不要

Synergyの設定を行うと、マイ ドキュメントにsynergy.sgcが作成される。

C:\Documents and Settings\foo\My Documents\synergy.sgc

さらに、[Options] - [AutoStart] - [Computer Starts] をインストールすると、Windowsのディレクトリにもsynergy.sgcが作成される。

C:\WINDOWS\synergy.sgc

Computer Startsの場合はWindowsのディレクトリ側のファイルが参照されるようで、マイ ドキュメント側のファイルは不要。削除しても問題ない。ただし、設定を行うたびに作成される。

Sun Apr 19 10:30:25 2009

TrueCryptの設定

PreferencesのAuto-Dismountを適切に設定する。ショートカットのオプションは以下のように設定する。

/v \Device\Harddisk1\Partition1 /l D /e /q background

Mon May 4 23:24:49 2009

Powered by YUI, jQuery