※ ChatGPTを利用し、要約された質問です(原文:Jcode,pmを使った連続変換に失敗してしまう)
Jcode,pmを使った連続変換に失敗してしまう
このQ&Aのポイント
Jcode.pmを使った連続変換でエラーが発生してしまう問題が発生しています。
全角数字を半角数字への変換や半角カナを全角カナへの変換は個別で成功するが、連続して行うとエラーが起きる。
変換の順番を変えてもエラーの現象が同じであり、どのように修正すれば連続変換が可能になるかわからない。
フォームから入力された内容について、
全角数字を半角数字へ、半角カナを全角カナへ変換したいので、
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;
とするとエラーは起きないのです。
変換の順番をいれかえても現象は同じでした。
どうすれば両方の変換ができるようになるでしょうか。
どうぞよろしくお願いします。
お礼
ありがとうございます。 やはりJcodeからの戻り値が単なる変換後の文字列というわけではなかったということなんですね。 ご回答をヒントに、別の方法で解決を図り、うまくできました。 &Jcode::convert(\$kword, 'euc', 'euc', 'z'); のように引数zを渡してカナ変換を行なった後、 trで数字変換を行なうように変更しました。 ありがとうございました。