Extend PerlIO and PerlIO::scalar

PerlIOが不完全だということは一応認知されているらしい。perltodoに以下のような記述がある

PerlIO::scalar doesn't know how to truncate(). Implementing this would require extending the PerlIO vtable.
Similarly the PerlIO vtable doesn't know about formats (write()), or about stat(), or chmod()/chown(), utime(), or flock().
(For PerlIO::scalar it's hard to see what e.g. mode bits or ownership would mean.)
PerlIO doesn't do directories or symlinks, either: mkdir(), rmdir(), opendir(), closedir(), seekdir(), rewinddir(), glob(); symlink(), readlink().

See also Virtualize operating system access.

以下,意訳。なお,原文ではPerlIO::Scalarとなっているがそれは誤り。

PerlIO::scalarに対してtruncate()を呼ぶことは出来ません。これを実装するためには,PerlIO vtableを拡張する必要があるでしょう。
同様に,PerlIO vtableにはフォーマット(write())やstat()関係,chmod()/chown(),utime()そしてflock()もありません。
(PerlIO::scalarにとっては,モードビットや所有者といったものの意味を定義するのは難しいところですが)
PerlIOはディレクトリやシンボリックリンクを扱うことも出来ません。つまり,mkdir(), rmdir(), opendir(), closedir(), seekdir(), rewinddir(), glob(), symlink(), readlink()は対象外です。

ファイルシステムアクセスの仮想化も参照のこと。

PerlIOはもともとstdioの代替として作られたので,stdioに含まれない低レベルIOが最初の仕様に入らなかったのは当然かもしれない。しかしやはり,低レベルIOもサポートして欲しい。その場合,fdを持つ普通のPerlIOレイヤは実装の必要は無いだろうから,拡張部分を実装するのはPerlIO::scalarやPerlIO::dirといったものだけでいいはずだ。それほど難しいことではないように思うが,パッチレベルリリースで加えるには大きすぎる修正だろう。となると次のチャンスは5.12.0になってしまうが,それでもやってみる価値があるのかどうかは怪しい。