- ベストアンサー
Perlおみくじのエラーについて
- perlを勉強した初心者がPerlおみくじのコードを書いた際にエラーが表示される問題があります。
- エラーの原因は、正しくエスケープされていない特殊な文字が含まれているためです。
- エラーが発生する部分を修正することで、正しく表示できるようになります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
よく分かりませんが、 ☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!! これの'が問題では? 最近Perl触ってないので出来ないかもしれませんが、エスケープシーケンス使って ☆^v(*^∇\')乂(\'∇^*)v^☆ヤッタネ!! こんな感じにするれば出来るかも・・・
その他の回答 (3)
- salt-water_tabby
- ベストアンサー率22% (19/85)
No3の方への返信の $msg = "☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!"; が正しく表示されるのは合っています。 perlやJ-CODEに問題はないと思います。 最初にエラーになった $tips = '☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!'; との違いは、最初と最後がダブルクォーテーションに変わっているだけですが、ダブルクォーテーションで囲まれたシングルクォーテーション("'")やその逆のシングルクォーテーションで囲まれたダブルクォーテーション('"')は、文字列として判断されますので、意図したとおり表示されたわけです。 上の文では、最初のダブルクォーテーションから終わりのダブルクォーテーションまで ☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!! を文字列として$msgに代入していますが、 下の文は、最初のシングルクォーテーションから顔文字で使われている最初のシングルクォーテーションまで ☆^v(*^∇ までを文字列として判断し、残りの )乂('∇^*)v^☆ヤッタネ!!' の部分が処理できずにエラーになっています。
- steel_gray
- ベストアンサー率66% (1052/1578)
原因については他の方と一緒です。 文字列に'や"が混ざるときは\を足すより q{~}やqq{~}にするとわかり易くなります。 $tips = '☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!'; $tips = q{☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!}; "~"の代わりはqq{~}です。 また、文字列内で使われていない記号ならば q/~/ や q|~| でもかまいません。詳しくは参考URLを。
補足
if($d == 0) { $msg = "☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!"; $z = "最高テストてすと"; } なんでかよくわかりませんが、上記のように書いたら 正しく表示されるようになりました。 もしかして自作のサーバのperlがうまく動いてないのかも・・・ ちょっと違う質問なのですがJ-codeが正しく動いているか確認する方法はありますか?
- happy_books
- ベストアンサー率28% (131/460)
$tips = '☆^v(*^∇\')乂(\'∇^*)v^☆ヤッタネ!!'; これならどうですか? 顔文字が使ってあり、わかりにくいですが、 $tips = '☆^v(*^∇' )乂( '∇^*)v^☆ヤッタネ!!'; ここで分けられているので、エラーになっています。 なので、顔文字の'の前に\を入れましょう。 そうすると、Perlではプログラムの一部ではなく、 'の文字と認識してくれます。 っていうか、No1の方と同じなんですが。 文字が原因かなー、と思われるエラーは、取り除いて いって徐々に追加していきましょう。 多少重いけど、Copalってソフトで、エラー箇所や 内容を少し詳しく教えてくれます。 あ、win版ですが。
補足
onion_seさん回答ありがとうございます。 書き込みのとうりやってみたのですが、はやり同じエラーが表示されてしまいました。 ちなみに関係ないかもしれませんが if($d == 4) { print "<p>☆^v(*^∇')乂('∇^*)v^☆ヤッタネ!!</p>\n" } では、正しく表示されました。