北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

rss-feed失敗記(2)

しゃぁないから深入り。ソースをいじりながらデバグってみたところ、LP.pmでXML::Parser::Liteにハンドラを仕掛けてるコードがまずいらしい。おそらく、グローバルな@_がぶつかって悪さしてるんだろう。



以下は、とってもよくないなんちゃって修正。これで無事に解決〓。しかし、perl5.8ってこんな部分の挙動変わったんだっけなァ?



$ diff LP.pm.org LP.pm
94a95
> my $events = [];
96,100c97,101
< Init => sub { shift; $self->init_handler(@_) },
< Final => sub { shift; $self->final_handler(@_) },
< Start => sub { shift; $self->start_handler(@_) },
< End => sub { shift; $self->end_handler(@_) },
< Char => sub { shift; $self->char_handler(@_) }

    • -

> Init => sub { shift; push(@$events, ['I', @_]) },
> Final => sub { shift; push(@$events, ['F', @_]) },
> Start => sub { shift; push(@$events, ['S', @_]) },
> End => sub { shift; push(@$events, ['E', @_]) },
> Char => sub { shift; push(@$events, ['C', @_]) }
103a105,121
>
> #event run
> foreach my $e(@$events){
> my $event = shift(@$e);
> if($event eq 'I'){
> $self->init_handler(@$e);
> }elsif($event eq 'F'){
> $self->final_handler(@$e);
> }elsif($event eq 'S'){
> $self->start_handler(@$e);
> }elsif($event eq 'E'){
> $self->end_handler(@$e);
> }elsif($event eq 'C'){
> $self->char_handler(@$e);
> }
> }