「一気に最後まで読んだ」本、教えて下さい!

perlでオーバーロードやオーバーライドのようなことがしたいのですが、可能でしょうか?

今はオーバーロードのようなことをしたいのですが

Encodeのdecode関数で

sub decode{
return Encode::is_utf8($_) ? $_ : encode($_);

}

のようなことがしたいです。しかし上の例では再帰になります。

A 回答 (2件)

#1>ラッパー風にPerlで書きたかったということです。


そういうことであれば、#1でも回答していますが、
パッケージ修飾すればいいと思います。

#1>具体的なトラブルはXMLから受け取ったデータをdecodeした時に、…というエラーが発生

使っているParser が正しくエンコードできていないとそういうエラーが発生します。
Parser によって対処が異なります。
Perl モジュールとして提供されているいくつかのParser では、例えばエレメントとしてワイド文字を使っていると想定していないものもあります。
最悪Parser を修正しないといけません。
場合によっては、エンコードを登録するだけで良いものもあります。
    • good
    • 0

Perl でオーバーロードやオーバーライドのようなことは


できるにはできると思いますが、

何がしたいのかよくわかりません。
オーバーロードということなので、引数の違うdecode を定義したいということのように思いますが、
単に自分のパッケージの中で、呼び出すようなラッパー関数を作るというような感じなのかなと思います。

質問のリスト中のencode は、decode の誤りなのですか?
Encode::decode みたいな形でパッケージ修飾してやればいいんじゃないでしょうか(それでも 引数が合わないような気がしますが)
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

したいことは、デコードする前にデコードする必要があるかどうか調べて、必要あるならば、本来のデコードを行い、必要なければそのまま値を返すといったことをラッパー風にPerlで書きたかったということです。
オブジェクト指向を使わず、そのようなことが簡単にできればいいなと思い質問しました。

具体的なトラブルはXMLから受け取ったデータをdecodeした時に、

Cannot decode string with wide characters at C:/usr/local/lib/Encode.pm line 186.

というエラーが発生し、ソースはすでにあちこちでdecodeを使っていますので、一箇所の暫定的な書き換えで対処できれば、管理しやすいためです。
また、今後の対策となるために、decodeの大元や、たくさん使っているdecodeの箇所を触りたくないためです。


>質問のリスト中のencode は、decode の誤りなのですか?
間違っていました。 is_utf8もそれでよかった自信なしです。

お礼日時:2006/05/28 19:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!