XML::Feedãå¤é¨ããåå¾ãããã¼ã¿ããã£ãã·ã¥ãã¦ãããªãã®ã§ããã¦ã¿ã
XML::Feed#parseã«URIãªãã¸ã§ã¯ããæ¸¡ãã¨URI::Fetchã使ã£ã¦ããããã ãã©ãããã¤ããã£ãã·ã¥ãã¦ãããªãããªãã·ã§ã³ã渡ããªãã®ã§ãç¡çãããã£ã¦ãã
# å ã®ã¡ã½ãããåå¾ my $fetch = URI::Fetch->can('fetch'); # ãã£ãã·ã¥ãªãã¸ã§ã¯ããä½ã my $cache = Cache::FileCache->new( { namespace => $c->req->path, # Catalystã§Pathæ¯ã«åããå ´å default_expires_in => $default_expires_in, # é©å½ã« } ); # URI::Fetchã䏿¸ããã no warnings qw(redefine); local *URI::Fetch::fetch = sub { if ( [caller 1]->[3] eq 'XML::Feed::parse' ) { # XML::Feed#parseããå¼ã°ãã¦ããã push @_, Cache => $cache; # fetchã«æ¸¡ã弿°ã«Cacheã追å $_[1] = $_[1]->as_string; # ï¼ä½ã ããã¯â¦ãããç¡ãã¨åããªãã£ããããªæ°ããããã ãâ¦æ°ã®ããããï¼ } return $fetch->(@_); # å ã®ã¡ã½ãããå®è¡ }; # XML::Feedããã£ãã·ã¥ä½¿ã£ã¦ãããããã«ãªã£ããã¼ my $feed = XML::Feed->parse($url);
ä¸å¿ãã¤ã³ã㯠if ( [caller 1]->[3] eq 'XML::Feed::parse' ) ã®é¨åã§ãXML::Feed#parse以å¤ã§ã®äºæããªããã£ãã·ã¥ãé²ãã§ãã¾ããï¼XML::Feed#parseå ã§äºæããªãURI::Fetchãå®è¡ããã¦ãããã¡ããè¡çªå·[caller]->[2]ãè¦ãï¼ï¼