重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

まだperlを勉強したて超初心者です。

#!/usr/local/bin/perl

# おみくじを引く
$role = int(rand 6);

if($role == 0) {
$kuji = '大吉';
$tips = '☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!';
}
elsif($role == 1) {
$kuji = '中吉';
$tips = '良いことが起きます。上を向いて歩くと、UFOを目撃できるかもしれません。';
}
elsif($role == 2) {
$kuji = '小吉';
$tips = 'ちょっとした幸運あり。下を向いて歩くと、小銭が拾えるかも知れません。';
}
elsif($role == 3) {
$kuji = '吉';
$tips = '心の平安あり。トイレで読書すると吉。';
}
elsif($role == 4) {
$kuji = '末吉';
$tips = '運気上昇の兆し。家にこもると吉ですが、家族に掃除機でどつかれるので注意。';
}
else {
$kuji = '凶';
$tips = '災厄の日。入浴すると吉ですが、湯船で眠るとそのまま沈むので注意。';
}

# CGIヘッダの出力
print "Content-type: text/html\n\n";

# HTMLの出力
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n";
print "<html>\n";
print "<head><title>Perlおみくじ</title></head>\n";
print "<body><p>今日のあなたの運勢は……<big>$kuji</big>です。</p>\n";
print "<p>$tips</p></body>\n";
print "</html>";

こう書いた際にサーバ側でエラーだ表示されます。

if($role == 0) {
$kuji = '大吉';
$tips = '☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!';
の部分を
if($role == 0) {
$kuji = '大吉';
$tips = '何をしても絶好調な一日。新しいことにチャレンジしてみると良いでしょう。';
}
にすると正しく表示されます。

サーバ側で記号などが表示されることは確認済みです。
なにがいけないのでしょうか?

A 回答 (4件)

よく分かりませんが、


☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!
これの'が問題では?
最近Perl触ってないので出来ないかもしれませんが、エスケープシーケンス使って
☆^v(*^∇\')乂(\'∇^*)v^☆ヤッタネ!!
こんな感じにするれば出来るかも・・・

この回答への補足

onion_seさん回答ありがとうございます。
書き込みのとうりやってみたのですが、はやり同じエラーが表示されてしまいました。

ちなみに関係ないかもしれませんが
if($d == 4) {
print "<p>☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!</p>\n"
}
では、正しく表示されました。

補足日時:2005/05/29 01:08
    • good
    • 0

No3の方への返信の


$msg = "☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!";
が正しく表示されるのは合っています。
perlやJ-CODEに問題はないと思います。

最初にエラーになった
$tips = '☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!';
との違いは、最初と最後がダブルクォーテーションに変わっているだけですが、ダブルクォーテーションで囲まれたシングルクォーテーション("'")やその逆のシングルクォーテーションで囲まれたダブルクォーテーション('"')は、文字列として判断されますので、意図したとおり表示されたわけです。

上の文では、最初のダブルクォーテーションから終わりのダブルクォーテーションまで
☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!
を文字列として$msgに代入していますが、
下の文は、最初のシングルクォーテーションから顔文字で使われている最初のシングルクォーテーションまで
☆^v(*^∇
までを文字列として判断し、残りの
)乂('∇^*)v^☆ヤッタネ!!'
の部分が処理できずにエラーになっています。
    • good
    • 0

原因については他の方と一緒です。



文字列に'や"が混ざるときは\を足すより
q{~}やqq{~}にするとわかり易くなります。

$tips = '☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!';
$tips = q{☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!};

"~"の代わりはqq{~}です。
また、文字列内で使われていない記号ならば
q/~/ や q|~| でもかまいません。詳しくは参考URLを。

参考URL:http://www.rfs.jp/sitebuilder/perl/02/02.html#6% …[%83g%82%CC%82%E6%82%A4%82%C8%89%89%8EZ%8Eq

この回答への補足

if($d == 0) {
$msg = "☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!";
$z = "最高テストてすと";
}
なんでかよくわかりませんが、上記のように書いたら
正しく表示されるようになりました。
もしかして自作のサーバのperlがうまく動いてないのかも・・・
ちょっと違う質問なのですがJ-codeが正しく動いているか確認する方法はありますか?

補足日時:2005/05/30 21:39
    • good
    • 0

$tips = '☆^v(*^∇\')乂(\'∇^*)v^☆ヤッタネ!!';



これならどうですか?
顔文字が使ってあり、わかりにくいですが、

$tips =
'☆^v(*^∇'

)乂(

'∇^*)v^☆ヤッタネ!!';

ここで分けられているので、エラーになっています。
なので、顔文字の'の前に\を入れましょう。
そうすると、Perlではプログラムの一部ではなく、
'の文字と認識してくれます。

っていうか、No1の方と同じなんですが。

文字が原因かなー、と思われるエラーは、取り除いて
いって徐々に追加していきましょう。
多少重いけど、Copalってソフトで、エラー箇所や
内容を少し詳しく教えてくれます。
あ、win版ですが。

参考URL:http://homepage1.nifty.com/kaityo/
    • good
    • 0

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