質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

3回答

4541閲覧

perlのif分で文字列が正しく評価出来ない

ustst

総合スコア31

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

1クリップ

投稿2018/01/18 12:28

perl

1#!/bin/perl 2 3$aaa=".0.1"; 4$bbb=".0.2"; 5 6if ( $aaa == $bbb ){ 7 print "[$aaa] & [$bbb] is equal\n"; 8}

結果:
[.0.1] & [.0.2] is equal

何故イコールとなるのかわかりません。
元々はipの比較をしていました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

==は数値比較演算子なので、それぞれを数値に変換してから比較します。先頭から数値として解釈できるのはどちらも".0"なので0 == 0で真になります。

文字列として比較したい場合は、文字列比較演算子eqを使ってください。

投稿2018/01/18 12:38

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ustst

2018/01/18 12:51

シェルで覚えていたので、すっかり勘違いしていました。 早速のご回答ありがとうございました。
guest

0

perlに於いて==は数値比較専用の演算子です。
$a==$bを評価する場合、perlは$a $bをそれぞれ数値に変換しようとします。
文字列を数値化する際、perlは文字列の左から数値として解釈可能な部分だけを見て、残りは切捨ててしまいます。

次のようにすれば何が起こっているか分かるでしょう。

perl

1#!/bin/perl 2 3$aaa=".0.1"; 4$bbb=".0.2"; 5 6print '$a is treated as ', $aaa+0, "\n"; 7print '$b is treated as ', $bbb+0, "\n"; 8 9if ( $aaa == $bbb ){ 10 print "[$aaa] & [$bbb] is equal\n"; 11}

".0.1" .2はもはや数値として解釈できないとして切捨てられるわけです。

投稿2018/01/18 12:42

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ustst

2018/01/18 12:51

シェルで覚えていたので、すっかり勘違いしていました。 早速のご回答ありがとうございました。
guest

0

Perlの==数値比較専用の演算子です。文字列比較にはeqを使ってください(perldoc)。

投稿2018/01/18 12:38

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ustst

2018/01/18 12:51

シェルで覚えていたので、すっかり勘違いしていました。 早速のご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問