ピンヘッダのレイアウトツールに 幅狭の DIP IC のラベルを作る機能を足した。印刷して貼るだけで配線ミスが減らせるので便利

特に DIP IC の場合、文字を入れるスペースが殆どないので、自分に必要な要素だけ厳選して作る必要があって、簡単に別バージョンを作れたほうがいいと思う。ブラウザ上でやって実寸 PDF すぐ印刷できるのはかなり便利だと思う。

  1. トップ
  2. tech
  3. IC のピン配置ラベルを作る

Path::Class と Path::Tiny はほぼ同じことができるモジュールで、どっちを使っても特に変わりはないんですが「やっぱこっち〜」って感じで変えるとハマるような差異があり、今回ハマりましたのでご紹介します。

Path::Class->tempdir, Path::Tiny->tempdir

いずれのモジュールにも、tempdir というメソッドがあり、これはいずれも全く同じ引数をとり、File::Temp を使ってテンポラリディレクトリを掘ってパスオブジェクトを返すだけのメソッドです。

しかし内部で使っている File::Temp のメソッドが少々違うため、CLEANUP まわりの挙動が以下のように異ります。

  • Path::Class は File::Temp::tempdir() を使っている
    • CLEANUP => 0 がデフォルト (デフォルトで削除されない)
    • CLEANUP => 1 を指定した場合 Perl プロセス終了時にファイルが削除される
  • Path::Tiny は File::Temp->newdir() を使っている
    • CLEANUP => 1 がデフォルト (デフォルトで削除される)
    • 返ってきたオブジェクトが DESTROY されるときにファイルが削除される

File::Temp の挙動

  • File::Temp::tempdir() は文字列を返す
  • File::Temp->newdir() はオブジェクトを返す
    • 内部的には File::Temp::tempdir() を呼んでる
    • DESTROY が設定されている

ハマる例

普通ハマらないんですが、アホなことしてるとハマります。

  • Path::Class->tempdir を使っていて、Path::Tiny に変えた場合、その後の処理でファイルが存在していない場合がある
  • Path::Tiny->tempdir を使っていて、Path::Class に変えた場合、ファイルが削除されない場合がある
  1. トップ
  2. tech
  3. File::Temp, Path::Class, Path::Tiny