• ベストアンサー

MP3情報の表示

Windowsで作ったMP3ファイルのタグ情報をちゃんと表示するためにPerlスクリプトを作っているのですが、 Jcodeでeucに変換する所でエラーになってしまいます。 どこをどう直せばちゃんと表示できるようになるのかわかる方がいらっしゃいましたら教えてください。 == mp3info.pl ====== #!/usr/local/bin/perl -w use MP3::Info; use Data::Dumper; usr Jcode; my $file = $ARGV[0]; my $tag = get_mp3tag($file); my $info = get_mp3info$file); my $jtag = jcode($tag)->euc; print Dumper($jtag, $info); ============ $./mp3info.pl aaa.mp3 $Not a SCALAR reference at /usr/lib/perl5/site_perl/5.6.1/i686-linux-multi/Jcode.pm line 579.

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

my $tag = get_mp3tag($file);により得られた結果である$tagは、そのままEUCに変換出来ません。 従って、以下のようにしてください。 ----------------------- my $file = $ARGV[0]; my $tag = get_mp3tag($file); my $info = get_mp3info($file); my $data = Dumper($tag, $info); my $edata = jcode($data)->euc; ---------------------------------- つまり、Dumperの結果をEUCコードに変換することになります。これであなたの望んだ結果が得られるはずです。

tanicchi
質問者

お礼

ご返答ありがとうございます。 Dumpした結果を変換することで望んだとおりの結果を得ることができました。 本当にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

NO2です。 print $edata ; を最後に行ってください。

全文を見る
すると、全ての回答が全文表示されます。
  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.1

use MP3を使ったこと無いのであれですが、jcode.pmって値にreferを渡すんじゃないですか? (エラーもそんなこと言ってるし) - my $jtag = jcode($tag)->euc; + my $jtag = jcode(\$tag)->euc;

tanicchi
質問者

お礼

ご返答ありがとうございます。 大変助かりました。 また何かありましたらご助言よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Perlで参照のクリアの方法

    Perlで参照のクリアで困っているのですが、以下のソースで正しくクリア方法はありますか? use strict; use warnings; use Data::Dumper; sub test { my ($arrayref) = @_; $$arrayref[2]{'A'} = 'aaaaa'; #$$arrayref = (); # Not a SCALAR reference at test_0042.pl line 10. $arrayref = (); #←クリアしているが、Dumperするとクリアされていない } my @A = (); print Dumper(@A); print "\n"; test(\@A); print Dumper(@A); print "\n"; exit; __END__ $VAR1 = undef; $VAR2 = undef; $VAR3 = { 'A' => 'aaaaa' };

    • ベストアンサー
    • Perl
  • jcode.plのバグでしょうか?KCctchでの質問です。

    PerlのプログラムをKCatch.pmで調べていましたが。 次のような表示がされました。 jcode.plのバグでしょうか?プログラムに問題があるのでしょうか? お教えいただければ幸いです。 ../data/clients.txtが開けません。 Catch: Thu Jun 21 08:54:31 2001 -------------------------------------------------------------------------------- [jcode.pl:366:warn] Use of uninitialized value at jcode.pl line 366. > sub max { $_[ $[ + ($_[$[] < $_[$[+1]) ]; } [jcode.pl:362:warn] Use of uninitialized value at jcode.pl line 362. > $code = ('euc', undef, 'sjis')[($sjis<=>$euc) + $[ + 1]; -------------------------------------------------------------------------------- anquit.cgi with Perl 5.00502 for freebsd

    • ベストアンサー
    • Perl
  • PerlでUTF8をEUCに変換

    こんにちは、お力を貸して下さい。 OSX上で日本語のファイル名を取得し そのファイル名をeucに変換しようとすると 半濁音付きのカナが文字化けを起こしてしまうのです。 Web上で “$euc = Jcode($euc, 'utf8')->z2h->h2z->euc;” で、できないこともないみたいだったので、さっそくやってみたんですが… 変換したいファイル名は、「1ドキュメント」とします。 -------------------------------------- #!/usr/bin/perl use strict; use Jcode; my $path = "パスがはいっている"; my @files; opendir DIR, $path; @files = grep /^1/ && -f "$path/$_", readdir(DIR); closedir DIR; foreach (@files) { my $euc = $_; $euc = Jcode->new($euc, 'utf8')->z2h->h2z->euc; print "$euc\n"; } exit; -------------------------------------- 結果:1ト〓キュメント やっぱり文字化けしましたTT 新しい解決法がありましたら、よろしくお願いします。

    • ベストアンサー
    • Perl
  • requireについて教えてください。

    こんにちは、require について教えてください。 require されるファイルの最終行は 1 を書くのが一般的ですが、 他の値を書くと何か問題があるのでしょうか? 以下の実験をしてみました。 -- require されるファイル array.pl -- #! usr/bin/perl -w use strinct; ['a','b','c',] -- 実行するスクリプト -- #! /usr/bin/perl use strict; my $array_ref = get_array_ref('array.pl'); print "$_n" foreach ( @{$array_ref} ); exit(); sub get_array_ref {   return eval {require $_[0]}; } -- 結果 -- a b c 結果はうまく行ったのですが、eval も含めてこの様な使い方は 間違っていませんでしょうか? よろしくお願いします。

  • No.616076に続けて質問です

    jcode.plを読み込みたく、 #!/usr/bin/perl require './jcode.pl'; としたところ、 Can't locate ./jcode.pl…というエラーが起きました。 どのような原因が考えられますでしょうか?

    • ベストアンサー
    • Perl
  • perl5.8.6日本語の置換について

    教えてください。perl5.8.6の日本語処理で行き詰まっています。 下記のプログラムをeuc-jpで書いて動作させたところ、s///gの 置換がうまくいきません。 何か間違っているのでしょうか。 weather.pl --------------------------- #! /usr/bin/perl # 使い方: # require "weather.pl"; # $data=weather; use LWP::Simple; use strict; use encoding 'euc-jp'; use Encode qw/from_to/; binmode STDERR,"encoding(euc-jp)"; sub weather{ my $doc; my $adrs = "http://www.jma.go.jp/JMA_HP/jp/warn/text/27.html"; until($doc){ $doc = get "$adrs"; } from_to($doc,'shiftjis','euc-jp'); $doc =~/<tr><td><pre>(.+)<\/pre><\/td><\/tr>/s; $doc = $1; $doc =~s/」/ /g; $doc =~s/パーセント/%/g; $doc =~s/[0-9]/[0-9]/g; $doc; } 1; my $result=weather; print "$result\n"; ---------------------------

    • ベストアンサー
    • Perl
  • 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
  • substrの文字列の境界の動作について

    perl5.8を使っています。substrの動作について、以下の動作はperlの仕様どおりでしょうか? 以前、どこかのソースで#--1や #--2の場合はundefとなる?のを見た記憶があるのですが、文字列の境界の動作について理解していないのでよろしくお願いいたします。 $|=1; use strict; use Data::Dumper; my $str = "0123456789A"; print Dumper( substr($str, 10, 1) ); # $VAR1 = 'A'; print Dumper( substr($str, 11) ); # $VAR1 = ''; # --1 print Dumper( substr($str, 12) ); # substr outside of string at test.pl line ...  # --2 exit;

    • ベストアンサー
    • Perl
  • utf-8コードの指定

    以下のURLにて同じ質問をしました。 http://soudan1.biglobe.ne.jp/qa4938782.html その時は解決したと思ったのですが、私の勘違いでした。 Undefined subroutine &main::Jcode called at listpage.pl line 220, line 855. というエラーからして、 $value = Jcode($value)->utf8; という記述そのものの問題ではなく、jcode.pmが認識されていないということなのでしょう。 でもプログラムの最初には use Jcode; としてあるし、パスが通っていないことも考えて#!(何と呼ぶんだったっけ?)も #!/usr/bin/perl -I /usr/lib としました。perl.exeをd:\usr\bin/に置いて /usr/bin/perl で良いなら、jcode.pmはd:\usr/libにあるからパスはこれで良いですよね!? ちなみにこのディレクトリにはcgi.pmも置いていますが、cgi.pmは普通に動いてます。 何が問題だと考えられますか? お手数をお掛けします。

  • メール件名の表示について

    メールの受信表示をwebでするようにプログラムを作成しましたが、日本語の件名がきちんと表示されません。 「中国の消費者物価、4月は8.5%上昇・食料品など高止まり」が「中国の消費者物価、4月は8.5」のように途中で切れてしまいまいます。正しく表示させるにはどのようにしたらよいでしょうか? 以下はプログラムの抜粋です。 #!/usr/bin/perl require 'lib/jcode.pl'; use CGI qw(:standard); use Mail::POP3Client; use Jcode; (略) foreach ( $pop -> Head( $i )) { s/^Subject: (.*)/jcode($1)->mime_decode()->sjis/ie and $sub = $_;

    • ベストアンサー
    • Perl