
まだ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 = '何をしても絶好調な一日。新しいことにチャレンジしてみると良いでしょう。';
}
にすると正しく表示されます。
サーバ側で記号などが表示されることは確認済みです。
なにがいけないのでしょうか?
No.1ベストアンサー
- 回答日時:
よく分かりませんが、
☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!
これの'が問題では?
最近Perl触ってないので出来ないかもしれませんが、エスケープシーケンス使って
☆^v(*^∇\')乂(\'∇^*)v^☆ヤッタネ!!
こんな感じにするれば出来るかも・・・
この回答への補足
onion_seさん回答ありがとうございます。
書き込みのとうりやってみたのですが、はやり同じエラーが表示されてしまいました。
ちなみに関係ないかもしれませんが
if($d == 4) {
print "<p>☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!</p>\n"
}
では、正しく表示されました。

No.4
- 回答日時:
No3の方への返信の
$msg = "☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!";
が正しく表示されるのは合っています。
perlやJ-CODEに問題はないと思います。
最初にエラーになった
$tips = '☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!';
との違いは、最初と最後がダブルクォーテーションに変わっているだけですが、ダブルクォーテーションで囲まれたシングルクォーテーション("'")やその逆のシングルクォーテーションで囲まれたダブルクォーテーション('"')は、文字列として判断されますので、意図したとおり表示されたわけです。
上の文では、最初のダブルクォーテーションから終わりのダブルクォーテーションまで
☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!
を文字列として$msgに代入していますが、
下の文は、最初のシングルクォーテーションから顔文字で使われている最初のシングルクォーテーションまで
☆^v(*^∇
までを文字列として判断し、残りの
)乂('∇^*)v^☆ヤッタネ!!'
の部分が処理できずにエラーになっています。
No.3
- 回答日時:
原因については他の方と一緒です。
文字列に'や"が混ざるときは\を足すより
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が正しく動いているか確認する方法はありますか?
No.2
- 回答日時:
$tips = '☆^v(*^∇\')乂(\'∇^*)v^☆ヤッタネ!!';
これならどうですか?
顔文字が使ってあり、わかりにくいですが、
$tips =
'☆^v(*^∇'
)乂(
'∇^*)v^☆ヤッタネ!!';
ここで分けられているので、エラーになっています。
なので、顔文字の'の前に\を入れましょう。
そうすると、Perlではプログラムの一部ではなく、
'の文字と認識してくれます。
っていうか、No1の方と同じなんですが。
文字が原因かなー、と思われるエラーは、取り除いて
いって徐々に追加していきましょう。
多少重いけど、Copalってソフトで、エラー箇所や
内容を少し詳しく教えてくれます。
あ、win版ですが。
参考URL:http://homepage1.nifty.com/kaityo/
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Strawberry Perl for Windows ...
-
INDIRECT 横に再度抽出したい
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
perlで2次元配列をサブルーチ...
-
Perlの全角スペース 文字化け?
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
Perlで時間の計算
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CLispのloop内の挙動について
-
Pythonのプログラミングの質問...
-
Perlで use strict して our変数
-
プロトタイプ宣言のワーニング...
-
Perlで自分自身の関数名を知る...
-
dieやPerl自体でエラーが発生し...
-
内部処理形式が日付型 (Date) ...
-
Pythonのマルチプロセスでの並...
-
HASH(0xほげほげ)
-
10進数→2進数
-
Telnetモジュールで繋がりません。
-
数値の多い順に別々の処理をす...
-
Perlで複数の値を返す良い方法...
-
Perlで足し算をするには
-
[perl] next と return 同じ意...
-
親ループのループ変数$_を子ル...
-
Net::SSH::Perlについて
-
PerlでCabochaを呼び出すには(...
-
Perlのプログラミングに困って...
-
JSONで文字列が長い時
おすすめ情報