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
で標準関数が呼べてしまうのが謎。