人に聞けない痔の悩み、これでスッキリ >>

フォームから入力された内容について、
全角数字を半角数字へ、半角カナを全角カナへ変換したいので、
Jcode.pmを使ったのですが、たとえば、
「全角数字を半角数字」だけとか、「半角カナを全角カナ」だけ
だとうまくできますが、連続して両方変換しようとすると
Jcodeのエラー「Not a SCALAR reference at Jcode.pm line 626」がかえってきてしまいます。
このようなコードを書いています。

use Jcode;
$AAA = 'あいう012カキクser'; (実際はフォームからのデータ)
&Jcode::convert(\$AAA, 'euc');
my $j = Jcode->new();
$j->set($AAA, 'euc');
$BBB = $j->tr('0-9A-Za-z', '0-9A-Za-z'); (数字変換:ここまでは成功する)
my $j = Jcode->new();
$j->set($BBB, 'euc'); #1
$CCC = $j->h2z->euc; (カナ変換:失敗してエラーが発生する)

コードはEUCで書いています。どうも #1 のところで、
2行上であらかじめJcodeによって変換されたものが格納されている
変数$BBBを指定するとエラーが起きるようです。#1のところで、

$j->set($AAA, 'euc'); #1
$CCC = $j->h2z->euc;

とするとエラーは起きないのです。
変換の順番をいれかえても現象は同じでした。
どうすれば両方の変換ができるようになるでしょうか。
どうぞよろしくお願いします。

A 回答 (1件)

> $BBB = $j->tr('0-9A-Za-z', '0-9A-Za-z');



$BBBに代入されるのは、Jcodeクラスのインスタンスです。メソッドset()の第1引数として渡すべきものは、文字列(もしくはその参照)ですので、エラーになっているのは。
    • good
    • 0
この回答へのお礼

ありがとうございます。
やはりJcodeからの戻り値が単なる変換後の文字列というわけではなかったということなんですね。

ご回答をヒントに、別の方法で解決を図り、うまくできました。
&Jcode::convert(\$kword, 'euc', 'euc', 'z');
のように引数zを渡してカナ変換を行なった後、
trで数字変換を行なうように変更しました。

ありがとうございました。

お礼日時:2006/08/10 14:57

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


人気Q&Aランキング