• 締切済み

jcode'convertについて

以下のようなプログラムを書きました。 -------------------------------------------------------------- require 'jcode.pl'; @a=("ら","ー","め","ん"); @b=("半","ら","い","す"); foreach $a(@a){ &jcode'convert(*a, "sjis"); foreach $b(@b){ &jcode'convert(*b, "sjis"); print $a; print $b; $aaa = <STDIN>; } } ------------------------------------------------------------------ &jcode'convert(*a, "sjis");が無いときは'ら半','らら','らい',,'らす','ー半'… といくのですが、&jcode'convert(*a, "sjis");をつけると'らす'でプログラムが終わってしまい、'ー半'…以降がプリント出来ません。 どうすればよいのでしょうか。またどうしてこうなるのでしょうか。

  • Perl
  • 回答数1
  • ありがとう数5

みんなの回答

noname#151056
noname#151056
回答No.1

シンボルテーブルとかエイリアスとかが私はよくわからんのですが、 問題は *b というところにあります。これが $b ではなく @b のほうの エイリアス(?)になっているようです。 つまり、$b ではなく、@b をいじってしまうため、 &jcode'convert(*b, "sjis"); の実行後、@b が空になってしまっています。 だから、一回目の「半」「ら」「い」「す」まではとりあえず処理するけど 次にまた @b のループをしようとすると、@bは空になってるために ループを抜けてしまっているようです。 とりあえず、@b と $b を違う名前に変えれば解決するはずです。

ryogoku
質問者

補足

出来るようになりました! ありうがとうございました!

関連するQ&A

  • jcode.plについて

    次のエラーが発生します。 Undefined subroutine &jcode::convf called at ./jcode.pl line 291. カレントに、jcode.plを置いているだけでは動作するのでしょうか? また、Jcode.pmを使った場合、 &Jcode::convert(\$test_sjis, "sjis"); と大文字にしないといけないのですが、これは仕方ないことでしょうか? てっきり、 require './jcode.pl'と use Jcode.pmの差し替えで済むと思っていました。 #!/usr/bin/perl require './jcode.pl'; my $test = "パソコン結構です。"; #文字化けチェック用 my $test_sjis = $test; my $test_ujis = $test; my $test_jis = $test; &jcode::convert(\$test_sjis, "sjis"); &jcode::convert(\$test_ujis, "ujis"); &jcode::convert(\$test_jis, "jis"); print "\$test_sjis=[$test_sjis]\n"; print "\$test_ujis=[$test_ujis]\n"; print "\$test_jis =[$test_jis]\n"; exit; __END__

    • ベストアンサー
    • Perl
  • perl jcode::convert 半角>全角

    perlでjcode::convertで 半角を全角に変換すると 正しく変換される時とされない時があります。 例えば、 sample1.plとsample2.plの my $message = 'の次の「ハンカク」の4文字は半角の文字です。 (注)ここにアップロードすると全角で表示されてしまいます。   この4文字を半角にして確認してください。 sample1.plではこの4文字が全角に変換されるのですが sample2.plではこの4文字は半角のままです。 なぜ全角に変換されないのでしょうか。 (Windows7, ActivePerl v5.16.3) ---sample1.pl------------ require "jcode.pl"; my $message = 'ハンカク文字は使えるかな?'; jcode::convert(\$message,"sjis","", "z"); print "$message\n"; --------------- ---sample2.pl------------ require "jcode.pl"; my $message = 'ハンカク文字'; jcode::convert(\$message,"sjis","", "z"); print "$message\n"; --------------- なお、どちらも以下のようなメッセージが表示されています。 これは何を意味しているのでしょうか。 defined(%hash) is deprecated at C:/Perl64/site/lib/jcode.pl line 684. (Maybe you should just omit the defined()?) defined(%hash) is deprecated at C:/Perl64/site/lib/jcode.pl line 693. (Maybe you should just omit the defined()?)

    • ベストアンサー
    • Perl
  • &jcode'convert(しても文字化けする

    cgiにある日本語文書contents.txtをメール受信すると文字化けします。 解決策を教えてください。 require './jcode.pl'; open(FH, ">contents.txt"); print FH @contents; close(FH); #連結 $contents=""; foreach $key (@contents) { $contents=$contents.$key; } &jcode'convert(*contents,'jis');

    • ベストアンサー
    • CGI
  • Jcode.pmでconvertできない

    あけましておめでとうございます。 早速ですが、皆様のお力を拝借したく。 WindowsXPSP2+ActivePerl5.6.1でJcode.pmを使用して、utf8へ変換しようとしました。 http://okwave.jp/qa2600582.html を参考にJcode.pmを導入し(とある事情でインストールしておりません)、以下のソースを記述しました。 ちなみに"sjis"で記述しております。 #!/usr/local/bin/perl use lib "./lib"; use Jcode; $buf = "てすてすてす"; print "BeforeCode=".Jcode::getcode($buf)."\n"; Jcode::convert( \$buf, "utf8"); #$j = Jcode->new($buf); #$buf = $j->utf8; print "$buf\n"; print "AfterCode=".Jcode::getcode($buf)."\n"; exit; すると BeforeCode=sjis AfterCode=euc と表示され、"utf8"を指定したにも関わらず、"euc"に変換されてしまいました。 次に、上記ソースの中ほどを #Jcode::convert( \$buf, "utf8"); $j = Jcode->new($buf); $buf = $j->utf8; と書き換えてみました。すると、 BeforeCode=sjis Undefined subroutine &Jcode::_Classic::euc_utf8 called at lib/Jcode/_Classic.pm line 255. とエラーが出てしまいます。 見た感じeuc_utf8が存在しないと言われているようですが、Jcode\Unicode\NoXS.pmに存在しています。 環境に問題があるような気はしますが、どのようにすれば"utf8"への変換が成功するのでしょうか?ご教授いただければ幸いです。 ちなみに上記ソースで Jcode::convert( \$buf, "jis"); Jcode::convert( \$buf, "euc"); Jcode::convert( \$buf, "sjis"); はすべて成功し、指定した文字コードに変換されました。 "utf8"への変換だけが失敗するという状況で、新年早々頭を抱えております。

    • ベストアンサー
    • Perl
  • jcode.pl

    日記などのスクリプトを作成しているのですが、とりあえず今まで、そこまでの理由もわからず他のスクリプトに習ってjcode.plをデコード処理部で &jcode'convert(*value,'sjis'); &jcode'convert(*name,'sjis'); のように使ってきました。 ですが、たまたま今回、jcode.pl等を書き忘れてしまったのですが、ブラウザから投稿してみても文字化けという文字化けが起こりません。スクリプト自身はsjisで書いています。ログファイルもどうやらsjisコードで書き込まれているようなのですが、それでもjcode.plは必要なのでしょうか。windows XP にApache + Active Perl での動作と、@niftyで設置して動作を確認しました。 この場合、jcode.plは必要あるのでしょうか?

    • ベストアンサー
    • Perl
  • jcodeでsjisに変換できない

    メールのSubjectを取得するスクリプトを作っています。 Subjectを取得し、iso-2022をsjisに変換して表示したいのですが、変換できません。 以下、どこに問題ありますでしょうか? すみません、他人の作ったものを修正しているので、よく理解していない部分が多いです。 #--------------------------------------------- require 'jcode.pl'; $subject = 'Subject: =?iso-2022-jp?B?GyRCJWEhPCVrJE4lRiU5JUgbKEI=?='; &jcode'convert(*subject, 'sjis'); print "-->$subject\n"; #--------------------------------------------- これをWindowsのDOSプロンプトから実行しても、以下のようにShift-JISに変換されていません。 c:\test>perl test.pl -->Subject: =?iso-2022-jp?B?GyRCJWEhPCVrJE4lRiU5JUgbKEI=?= 環境 Perl v5.8.8 WindowsXP(sp2) 以上、よろしくお願いします。

    • ベストアンサー
    • Perl
  • jcodeコンバートさせた後の置換処理が無効になるのはなぜ

    jcodeコンバートさせた後の置換処理が無効になるのはなぜですか? foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); #jcode'convertの後ではNG------------# $value =~ s/://g; $value =~ s/,//g; } foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); #jcode'convertの前ならOK------------# $value =~ s/://g; $value =~ s/,//g; &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); }

    • ベストアンサー
    • Perl
  • jcode.plのconvertを使用しなければならない場面とは?

    こんにちは。 jcode.plのconvertがjis,sjis,euc 間の相互変換が 行えるのはわかりました。 しかしながら、その用途がよくわかりません。 日本語にはその3種類の漢字コードがよく使われているのは なんとなくわかるのですが それを例えば &jcode::convert(\$test,'sjis'); というように、sjisにするというのは、どのような場面があって どのような必要性があってそのようにするのか? またeucに変換しなければならない場面等、 ネットで調べましたがその点がよくわからないのです。 例えば、Windows環境で生成されたテキストファイルの文字列を読み込んで Linux環境のPerlで出力しようとする時に、不具合が出るので 日本語は必ずEUCで変換する、など。 (この文章が正しいのかどうか適当です。 このような場面が世の中にはあって、その場合はこうする、というような 例として書きました) ご存知の方、どうぞよろしくお願いします。

    • ベストアンサー
    • Perl
  • jcodeを使ったgetcode

    Perlで日本語を扱う際にjcode.plを使いたいと思いました。 問題点はgetcodeを使用した際に文字コードが出力されなかったということです。 'あ'はsjisと出るのですが 'a'は出力がありません。 文字コードが判別できなくてもなんらかの出力は得られるとWebで見たのでなぜ このような現象になるのか質問させていただきました。 参考にしたサイト http://www.mikeneko.ne.jp/~lab/kcode/jcode.html [ソース] #!/usr/local/bin/perl require './jcode.pl'; print "Content-type: text/html\n\n"; $line = 'あ'; $code = &jcode::getcode(\$line); print "print1 = $code\n"; $line = 'a'; $code = &jcode::getcode(\$line); print "print2 = $code\n"; [結果(コマンドプロンプト上)] Content-type: text/html print1 = sjis print2 = このようになる原因を知りたいです。回答や実行環境への質問などお願いします。 実行環境 1 OS: WindowsXP SP1a webサーバ: Apache 1.3.27 Perl: ActivePerl 5.8.0 ブラウザ: IE6.0 実行環境 2 infoseek無料webスペース

    • ベストアンサー
    • Perl
  • Jcode.pmの命令について

    今まではJcode.plを使用していたのですが、UNICODEの問題でJcode.pmに変更しました。 今までは &jcode'convert(*Message,'jis'); だった個所を Jcode::convert(\$Message, "sjis"); に変更して使用しています。 Jcodeでコンバートできる文字のエンコードは何があるのでしょうか? "sjis"の部分に入る予約語は他に何がありますか? それと、マニュアルや命令が載っているサイトがあれば宜しくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう