-PR-
解決済み

表という文字の扱いについて

  • 暇なときにでも
  • 質問No.1585444
  • 閲覧数79
  • ありがとう数5
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 80% (738/912)

表という文字は2バイト目が\と同じコードだから注意しろという記事を読みました。その記事では、
print "表示"は文字化けするが
print '表示' は問題ないとありました。
なぜなら''で囲むとその中はperlインタプリタが解釈しないからだとありました。
しかしそのあとに、
print "表"もprint '表'も文法エラーになるので注意しなさいとありました。
どうしてprint '表示'では何の問題もないのに、print '表'ではエラーになってしまうのでしょうか?
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル14

ベストアンサー率 50% (3003/5914)

>\x5cは\と解釈されてしまいエラーになってしまわないのはどうしてなのでしょうか?
それは、2度評価されないということですね。
\xhhは、16進で文字コードを表す表記ですが、
\xの部分がそういう解釈をするエスケープだとされますから
\x5cは文字コード\と解釈されますが、それは、既に評価した結果であって、それをもう一度文字列の中のエスケープだとは解釈されません。
何度でも、再評価されてしまうのだったら
\\の様に、エスケープをエスケープすることができません。
お礼コメント
tochanx

お礼率 80% (738/912)

再度のご回答ありがとうございます。とてもためになりました。
投稿日時 - 2005-08-20 19:43:06

その他の回答 (全2件)

  • 回答No.1
レベル14

ベストアンサー率 66% (1052/1578)

シングルクォーテーションで括った文字列の中では\n等のエスケープシーケンスは無効ですが、\'と\\は有効になります。
つまり print '表' は print '‥\' と等価ですので、文字列の終了を示す「'」が見つからないという事になってしまうのです。
お礼コメント
tochanx

お礼率 80% (738/912)

ありがとうございます。理解できました。
投稿日時 - 2005-08-17 17:48:04


  • 回答No.2
レベル14

ベストアンサー率 50% (3003/5914)

>print '表'ではエラーになってしまうのでしょうか?
「表」はシフトJISで"\x95\x5c"になっています。
\x5cの部分が、\と同じコードなので、
\x95\'と書いたのと同じになります。
そのために、本来の、文字列の囲みの終端である ' がエスケープされて、文字列中に ' を書きたいからエスケープしているのだと判定されて、文字列の囲みの終端が無いことになって、エラーになります。
print '表\';
(\\にしたことになる)
とするか
スクリプトの先頭に
use encoding 'shiftjis';
と書けば
print "表示";
print "表";
print '表';
と書いても大丈夫です。
既に書いていますが、
場合によっては、コードとして
print "\x95\x5c";
の様に書くのもありです。
お礼コメント
tochanx

お礼率 80% (738/912)

対策まで提示していただきありがとうございます。
すいません。ちょっとわからないところがあります。
print "\x95\x5c";と書くと問題なく動作するのですが、
この場合、\x5cは\と解釈されてしまいエラーになってしまわないのはどうしてなのでしょうか?
投稿日時 - 2005-08-17 17:51:04
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-

特集


専門家があなたの悩みに回答!

ピックアップ

ページ先頭へ