朝会社につくと慌しい雰囲気。
スタッフのPCが起動しなくなったらしい。
久しぶりにきくHDDの軽やかなコロコロ音。死んだな。
2台ささっていたHDDを別のPCにさしてデータの復旧を試みていたようだが、両方とも駄目らしい。 CD-ROM ドライブも異音をたてるようになっている。
彼女が帰ってから次の日出社するまでに、いったい何があったのか。
って辛さが。
(天気予報で「今年一番の〜」とかしょっちゅう言うのがちょっと嫌。)
今日からがスギ花粉の飛散ピークらしいが、既に昨日からかなりきてる。 特に夜がつらい。鼻の通りが悪いわ、喉は痛くなるわ、寝付きが悪くて仕事の妄想が頭に浮かんで離れないわで。
今日は4月並の暖かさになるはずなのに、オフィスがえらい寒い。 いやな感じ。
もしや。
帰って計ったらまた熱出てた。 ガクリ。
去年はオールA(異常なし)だったのだが、今回はC判定(要観察)が2つついた。
前者は最近また太ったとか、油っこい弁当を食べたりとか心当りあり。 後者についてはGOTはいちおう基準値内でGPTの方が高くなっているから過栄養性脂肪肝傾向ということ?
どちらにせよ生活改善が必要。
PAR を使うとPerlスクリプトを単独の実行可能形式ファイルに変換することができる。 この際、自動的に依存するモジュールも探し出して追加してくれるのだが、eval の中で use するものや lib 以下に配置された通常のファイル等は自分で追加する必要がある (pp の -a, -A, -M オプション等で)。
開発しているモジュールに含まれるスクリプトをexe化するルールは、Makefile.PL でいろいろ処理をしてこれらを指定するようにしておけば比較的簡単にビルドできる。
しかしそれが今開発対象となっているモジュール/スクリプトではなく、その依存モジュールがそのようになっていると面倒くさい。 ということで依存モジュール側で必要なモジュール・ファイル一式を PAR ファイル化し、それを作業中のモジュール/スクリプトで取り込むようにしてみた。
PAR の pp コマンドは(1つのPAR ファイルから実行形式ファイルを作る時以外)直接 par ファイルを取り込む事ができないようなので、展開してあらためて追加する必要があるのでちょっと面倒。
例えばそのモジュールに myscript.pl が含まれており、これをexe化するにはいくつか手動で追加するファイルを指定する必要があるとする。
またそれらのファイルは、現在作ろうとしているスクリプトをexe化する際にも必要だとする。
pp -p -o all.par \ -I blib/lib -I blib/arch \ -A ... \ -M ... \ blib/script/myscript.pl
myscript.pl に必要なモジュールを含んだ PAR ファイル all.par ができる。
ちなみに parl -p でもモジュールからPAR ファイル化でき blib 以下をごっそりアーカイブできるのだが、そのモジュールが依存しているモジュールを含ませることができないので、今回の用途には×。
all.par を展開する。 ここでは c:\tmp\all 以下に展開するものとする。
スクリプトのあるモジュールのディレクトリに移動し、make。 その後
pp -p -o newscript.par \ -I blib/lib -I blib/arch -I c:\tmp\all\lib \ -a c:\tmp\all\lib;lib \ blib/script/newscript.pl
newscript.par が出来上がる。この中には -a オプションの指定と、newscript.pl の依存関係検査による抽出で c:\tmp\all\lib 以下のファイルが2回含まれているものがある(大抵)。 無駄なので除去する。
(面倒ならば重複するファイルを含んだままではあるが、ここで -p オプションを指定しないで直接 exe を作る事も可能である)
#!/usr/bin/perl -w use strict; use Archive::Zip qw(:ERROR_CODES); my $zip_name = shift || die 'must provide a zip name'; my $zip = Archive::Zip->new; $zip->read($zip_name) == AZ_OK || die "Can't read $zip_name:\n"; my %names; for my $member ($zip->members) { my $file_name = $member->fileName; if (exists $names{$file_name}) { print "Remove $file_name ..."; if (defined $zip->removeMember($member)) { print "OK.\n"; } else { print "NG.\n"; } } $names{$file_name}++; } exit($zip->overwrite);
pp -o newscript.exe newscript.par
Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。
nDiki は1999年1月に始めたコンピュータ日誌を前身とする Naney の Web 日記(兼パーソナルナレッジベース)です。
#nNote タグがついている記事は他の記事に比べて、より断片的・未整理・不完全なちょっとしたノートです。まだ結論に至っていない考えなども含まれます。頻繁/大幅に更新したり削除したりすることがあります。
ナレッジベースアプリケーション Obsidian で書いているノートの一部を notes.naney.org で 公開しています。
※内容は個人的見解であり所属組織とは関係ありません。