• ベストアンサー

文字列変換すると、数字に変わる

CGIで、 $hensu = ~ s/\r\n|[\r\n]/<br>/g; を実行すると、 18446744073709551615 と、書き出されます。 ・・・これは、何なのでしょうか? http://okwave.jp/qa/q1653502.html などを参考にしたのですが、いまいちよく分かりません。 すいませんが、ご存知の方がいらっしゃいましたら、ご教示いただけないでしょうか?

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

これだけでは何のことかさっぱり。 > CGIで、 ・「CGI」はしくみであって言語ではありません。どのプログラミング言語のこと? > $hensu = ~ s/\r\n|[\r\n]/<br>/g; > を実行すると ・元の$hesuの内容は? ・どこで実行?どんなタイミングで実行? ・=と~の間のスペースはわざと? > 18446744073709551615 > と、書き出されます。 ・なにに書き出される? ・$hensuとの関係は? ・期待している結果は? まあ、おそらくPerlでしょう。 で、$hensuの改行文字をbrタグの置き換えて表示したいのに、数字が出てくる、ということでしょう。 正規表現の対象を指定する演算子は「=~」です。間を空けてはいけません。 $hensu = ~ s/\r\n|[\r\n]/<br>/g; だと $hensu = (~ (s/\r\n|[\r\n]/<br>/g)); と解釈され、次の様に計算されます。 1) デフォルトの対象$_に対して s/\r\n|[\r\n]/<br>/g → スカラーのコンテキストなので、 成功で1/失敗で0に。おそらく 0になるケースが多い 2) 単項演算子~はビット反転 →0のビット反転で 0xff...f に(64bitなら2進64桁、32bitなら2進32桁のオール1) 3) =で $hensuの値は 2)に。 → 64bit符号無し整数だと 18446744073709551615 何かの資料を見様見真似で書き写したのでしょうが、プログラムを変えようと思うなら、それがどんな意味なのかは知っておいた方がよいでしょう。=~のことを知っていれば、こんな間違いはしないと思います。

mogeraccho
質問者

お礼

ご回答ありがとうございます。 おっしゃるとおり、Perlです。 独学で、少しずつ進んでいるので、まだまだコピーアンドペーストの域を出ておりません。 なので、こういうミスに陥ってしまいました。 今回は、分かりやすい解説とご意見本当にありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

かぶった

すると、全ての回答が全文表示されます。
回答No.2

たぶんタイプミスです。"=スペース~s///"となっていませんか? このタイプミスをすると置換演算子を式として評価すると0になり、さらにビットを反転 するので、数値のビットが全て立ちます。結果としてPerlの数値の取り得る最大値になります。 以下のスクリプトは私の環境だと4294967295になりました。 $var = ~s/\r\n|[\r\n]/<br>/g; print $var, "\n"; # 4294967295 質問者さんの環境は64ビットだと考えられるので、さらに大きい数になったんでしょう。

mogeraccho
質問者

お礼

ご回答ありがとうございます。 そのとおり、スペースが入っていました。 見易さのために入れていましたが、ダメだったようですね・・・ 今回は、本当にありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A