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

このQ&Aに関連する最新のQ&A

A 回答 (1件)

もしかすると御手持ちのjcode.plのバージョンが古いのかも知れません。


最新バージョンは2.13です。下のURLの一つ目からダウンロードできます。
またjcode.plの上位互換型モジュールとしてJcode.pmと言うものもあります。
(二つ目のURL)こちらも試してみられてはいかがでしょうか。
    • good
    • 0
この回答へのお礼

お返事いただきありがとうございます。
早速Jperl.pmをダウンロードいました。
これからテストします。
私の問合せのことですが、KCatch.pmをコメントアウトしましたら、
エラー表示しなくなりました。

お礼日時:2001/06/28 23:26

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

このQ&Aと関連する良く見られている質問

Qperlスクリプト s/^\s+//;  s/\s+$//;  return wantarray ? @out : $out[0]; について

自作の掲示板を作ろうと思い、perlの勉強をしている者です。人様の作ったスクリプトを解析しています。以下のスクリプトはライブラリに記述されていたものです。


sub tttt {
my @out = @_;
for (@out) {
s/^\s+//;
s/\s+$//;
}
return wantarray ? @out : $out[0];


このスクリプトなんですが、 s/^\s+//; の部分の「+」と s/\s+$//; の部分の「+$」、 また「return wantarray~」 の三つの部分のスクリプトが、どういった働きをしているの分かりません。専門書やウェブ上のリファレンスも色々調べたのですが・・。

分かる方いらっしゃいましたらご教授下さると幸いです。よろしくお願いします。

Aベストアンサー

まず前2つの「+」は,正規表現における,「直前の表現を一回以上繰り返し」をあらわします.
「\s」は空白文字一文字を表す正規表現ですので,「\s+」は,「一文字以上の空白文字」になります.
次に,最初の「^」と2番目の「$」は,その正規表現がどこに現れるかを示す記号です.それぞれ,先頭と最後尾にあることを示します.
したがって,「^\s+」は,「最初に空白が一文字以上ある文字列」に,
「\s+$」は「行末に空白が一文字以上ある文字列」にヒットします.
置換構文sはご存知なんですかね.すなわち,この2文で,行の最初と最後の空白を消しているんです.

次に, wantarray ですが,
http://www2u.biglobe.ne.jp/~MAS/perl/ref/wantarray.html
によると,このサブルーチンttttを呼び出すときに,何を返り値にしているかで真偽が決まる関数です.
呼び出す時に配列を希望していたら @out 全体を,変数を希望していたら $out[0]だけを返します.

Q$hts =~ s/##([^#]+)##/$FORM{$1}/g の意味を教えてください!

お世話になります。
perl素人なのですが必要に迫られてWEBで調べながら
ソースを解析していますが、次のコードで完全に止まってしまいました。

$hts =~ s/##([^#]+)##/$FORM{$1}/g

この場合、
#hts から ##([^#]+)## を探して $FORM{$1} に全て置き換えようとしていると思うのですが、以下2点が理解できず困っています。

1.##([^#]+)## の意味
$htsに##で囲まれた文字列が複数あるのでそれら全てを探すということでしょうか?

2.$FORM{$1} の意味
$1は1.で検索した結果だと思いますが、$FORM{ }は一体なんでしょうか?

素人がいきなり解析するのは無謀なのは承知の上ですが、
どうしても業務で必要なので、お知恵をお貸し下さい。
よろしくお願いいたします。

Aベストアンサー

1.
perlを基準に「正規表現」で調べてごらん

2.
同じくperlでHTMLのformデータを受け取る方法を調べてごらん

QUse of uninitialized value ---

初心者です。フォームに文字を入力してもらい、↓
print blockquote(
textfield(
-name => 'die Antwort',
省略----条件にあえば、
my $value = param('die Antwort');#として
if (($value eq $ans || $value eq $ans2) and ($c eq $num)){
「正解」と表示することにしました。すると、うまくいくのですが、
if (($value eq $ans || $value eq $ans2) and ($c eq $num)){
について「Use of uninitialized value ----」とApacheのerror logに書かれてしまいます。このためerror logがすぐに巨大なファイルになってしまいます。これを避ける方法をお教えください。よろしく、お願いいたします。

Aベストアンサー

コードに use warnings が入っているのですよね。
デバッグも済んでいるのでしたら、
no warnings qw ( uninitialized );
で、この警告の表示を抑制してもよいと思います。

QJcodeモジュールの代わりにjcode.plで代用可能でしょうか?

こんばんわ。前回質問したときに、
回答をしていただいた方、ありがとうございました。

原因は、結局のところ、サーバー会社の自分の使っているサーバーに
ImageMagickがインストール?されていなかったみたいでした。
使えないのですが、(使用では使えることになっていた。)
と、連絡したところ、無事使えるようになりました。
ありがとうございました。

ですが、実際、ImageMagickを使ってみて、
その機能の一部である、文字合成については英数字のみできました。
プログラムのuseにある、Jcodeが、働いていないみたいでした。
これはサーバーのサポート外なので、どうしようもないのですが。

そこで、思いついたのは、jcode.plを使って、なんとかならないかなー?と、思ったのですが、これはさすがに、無理でしょうか?

当然できたとしても難しいとは思うのですが、どうでしょう?

無理でしょうか?
できるのでしょうか?できたとしても、かなり難しいのでしょうか?
できるとしたら、どんな感じに組めばいいのか、参考になるアドバイスがいただけたらと、思っているのですが。

よろしくお願いします。

↓は日本語が表示されなかった、プログラムです。

#!/usr/local/bin/perl -w

use strict;
use Jcode;
use Image::Magick;

# 画像を指定
my $file = "sample.jpg";

# 合成したい文字列
my $text = "ABC123日本語";

# UTF-8へ変換
$text = jcode($text)->utf8;

# オブジェクト作成
my $image = Image::Magick->new;

# 画像読み込み
$image->Read($file);

# 文字を記入する
$image->Annotate(text=>$text, stroke=>'#FFFFFF', fill=>'#005599',
font=>'sazanami-gothic.ttf', pointsize=>'36',
x=>'20', y=>'40', encoding=>'UTF-8');

# 画像出力
print "Content-type: image/jpeg\n\n";
binmode STDOUT;
$image->Write('jpeg:-');

undef $image;
exit;


よろしくお願いします。

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


よろしくお願いします。

こんばんわ。前回質問したときに、
回答をしていただいた方、ありがとうございました。

原因は、結局のところ、サーバー会社の自分の使っているサーバーに
ImageMagickがインストール?されていなかったみたいでした。
使えないのですが、(使用では使えることになっていた。)
と、連絡したところ、無事使えるようになりました。
ありがとうございました。

ですが、実際、ImageMagickを使ってみて、
その機能の一部である、文字合成については英数字のみできました。
プログラムのuseにある、Jcode...続きを読む

Aベストアンサー

ImageMagickの文字合成は、
UTF-8でエンコードされた文字以外では文字化けします。
ImageMagickの仕様です。

そして、jcode.plはUTF-8を扱うことはできず、
ここは素直にJcode.pmを利用する他ありません。
(PerlのバージョンによってはUTF-8の扱いも可能)

参考URLのページの下の方に書かれてある、
「Tarballを直接入手」という項目より、
ZIP版のJcodeをダウンロードして、展開したのち、
そこに含まれる Jcode.pm ファイルを use しているスクリプトと、
同一のディレクトリに置くことで利用できます。

参考URL:http://openlab.ring.gr.jp/Jcode/index-j.html

Q[perl] $xxx == 1 or $xxx == 5 or $xxx == 11 などと書くが面倒です

タイトルの通りです

if文などで長々と書くのが面倒なのですが何かいい方法はないのでしょうか?
以前はif($xxx =~ /^1$|^5$|^11$/)などと書いていたのですが、正規表現を使うと処理が遅いんですね

なるべく処理が軽くて簡潔な書き方がありましたら紹介してください

Aベストアンサー

配列なら
my @array = (1, 5, 11);
if (grep {$_ == $xxx } @array) { ... }
とかかな. ハッシュなら
my %valid = ( 1 => 1, 5 => 1, 11 => 1 );
if ($valid{$xxx}) { ... }
のような感じ (「ハッシュを使った重複チェック」のバリエーション).
あ,
if ($xxx == (1 or 5 or 11)) { ... }
のような形は, (そのままじゃないけど) Perl6 でサポートされる予定になっています. いつのことかは知りませんが.


おすすめ情報