print や substr といった、Perl の組込み関数を自前のルーチンで上書きする hack のメモ。ソースコードが混乱する元でしかないんだけど、良い子は真似しちゃダメだぞ!
#!/usr/bin/perl
use subs qw( substr );
sub substr {
print "$_[0], $_[1], $_[2]
";
}
substr 1, 2, 3; → "1, 2, 3"
print CORE::substr 1234567890, 2, 3; → "345"
#!/usr/bin/perl
BEGIN {
*CORE::GLOBAL::substr = sub {
print "$_[0], $_[1], $_[2]
";
};
}
substr 1, 2, 3; → "1, 2, 3"
print CORE::substr 1234567890, 2, 3; → "345"
標準関数のテーブルを上書きしているんだけれど、CORE::substr で標準関数が呼べてしまうのが謎。