use 5.10.1; use strict; use warnings; use URI; use Plack::Request; use Scalar::Util qw(blessed); my $uri = URI->new("http://localhost/"); my $req = Plack::Request->new({}); say +overload::StrVal($uri); #=> URI::http=SCALAR(0x7fa3aa8663c0) say +overload::AddrRef($uri); #=> URI::http=SCALAR(0x7fa3aa8663c0) say +overload::StrVal($req) || "no"; #=> Plack::Request=HASH(0x7f7ff3958b20) say +overload::AddrRef($req)|| "no"; #=> Plack::Request=HASH(0x7f7ff3958b20) # overloadされてたら、CodeRefが返ってくる say +overload::Overloaded($uri); #=> CODE(0x7faea8862418) say +overload::Overloaded($req) || "no"; #=> no # URIのas_stringのCodeRefが返ってくるっぽい say +overload::Method($uri,'""'); #=> CODE(0x7faea883e250) say +overload::Method($req, '""') || "no"; #=> no # "", 0+, bool, nomethodの順番で、overloadされてるのがあればCodeRefが返ってくるっぽい # URIの場合、""が上書きされているのでas_string say +overload::OverloadedStringify($uri); #=> CODE(0x7faea883e250) say +overload::OverloadedStringify($req) || "no"; #=> no # 大元 say +overload::mycan(blessed($uri), '()'); #=> GLOB(0x7fa9998474b8)
むずかしい。