Perl Perl_0
Perl 「 比較演算子 」(0x0b)
Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x0b 回。
Perl の比較演算子について。
比較演算子
Perl には比較演算子 (Comparison operator) があります。
比較演算子は 2 つの値を比較するための演算子で、プログラム中の条件分岐で使います。
大抵のプログラミング言語にも同様の演算子はありますが、機能や約束事が微妙に違う場合がある様です。
比較演算子 : 数値
Perl では、数値を比較するための数値比較演算子 (Numeric comparison operator) が用意されています。
数値比較演算子は以下の様なものです。
< # より小さい
<= # より小さいか等しい
== # 等しい
>= # より大きいか等しい
> # より大きい
!= # 等しくない
普通、等しい意味の等号にはイコール (=) を使いますが、Perl を含めたほとんどのプログラミング言語で、イコールは、代入演算子として使われています。
このため、等しい意味を表すには、イコールを 2 つ並べたもの (==) 使います。
「より大きいか等しい」は「大なり」と「イコール」を続けた >= を使います。
記号の順番を入れ替えて => でもいい様に思いますが、 Perl の場合 => は別の意味 (ハッシュで利用) を持つ演算子に指定されているので、数値比較には使えません。
$num = 3;
if ( $num < 3 ) {
print "\$num は 3 より小さいです。\n";
}
if 文で条件分岐する上記の例では、print は実行されずに終了します。条件に $num が「3 より小さい場合」とあるからです。
比較演算子 : 文字列
Perl で文字列を比較する場合は、専用の文字列比較演算子 (String comparison operator) が用意されています。
lt # より小さい (less than)
le # より小さいか等しい (less than or equal to)
eq # 等しい (equal)
ge # より大きいか等しい (greater than or equal to)
gt # より大きい (greater than)
nq # 等しくない (not equal)
例えば、以下の様に比較が出来ます。
$str = "abc";
if ( 'abc' eq $str ) {
print "\$str の文字列は $str です。\n";
}
この例では、$str に「abc」の文字列が入っているので、if 文の中の print は実行されます。
次の例ではどうでしょう。
my $str0 = "\x{61}\x{62}\x{63}";
my $str1 = 'abc';
if ( $str0 eq $str1 ) {
print "\$str0 と\$str1 は同じ文字列です。\n";
$str0 と $str1 の値は見るからに違いますが、if 文での条件判定ではイコールと判断されて、print が実行されます。
なぜなら「\x{61}」という記述はコードポイントと呼ばれる値だからです。
これはコンピュータ内部で文字を表すコードの値を意味するので、文字列として比較出来ます。
「\x{61}」は a を、「\x{62}」は b を、「\x{63}」は c を指し示すので、コンピュータが内部で 「abc」と等価と判断する様です。おもしろいですね。
ちなみにこの値は、ASCII (アスキー) コードの 16 進数の値です。「ASCII コード表」等で検索すれば参考になる Web サイトを見つけられます。
比較演算子 : まとめ
数値と文字列の比較演算子をまとめると以下の様になります。
数値 文字列 比較
----------------------------------------------------------
== eq # 等しい (equal)
!= ne # 等しくない (not equal)
< lt # より小さい (less than)
> gt #より大きい (greater than)
<= le # より小さいか等しい (less than or equal to)
>= ge # より大きいか等しい (greater than or equal to)
0x0b-> 0x0c へ
数値のコードポイントと文字列の比較は、コンピュータの文字表現が、内部的にすべて数値 (バイトコード) で処理されていることで可能になっています。
しかしながら、バイトコードと、その対象となる文字の割り当てには、様々なパターンがあって一様ではありません。
これはいわゆる文字コード (JIS とか UTF とか EUC とか) の話になると思いますが、僕は文字コードの扱いがさっぱりです。
文字集合と符号化方式の区別もいまいちついていない状態なので、利用しているシステムのコードに合わせてテキストを書く、文字コードが合わないファイルがあれば変換する、程度のことしか出来ません。
なので、複雑なことは何もしていないにも関わらず、ちょっとした問題が起きると、解決するまでにとても時間がかかります。
Wikipedia には以下の様に書いてあります。
文字コード
多様な文字コードの存在は文字コードの互換性問題をひきおこす。文字コードの互換性問題とは、ある文字コードで記録されたデータを別の文字コードに変換しようとするとき、一方で定義されている文字がもう一方では定義されていない(あるいは用途によって2種類の文字に分けられている)という問題である。日本語では、これは特殊な漢字(苗字や団体名に使われる漢字)などが入ったデータベースを扱うときなどに問題となる。また文字コードの変換にかかるコストはばかにならないことが多い。
日本語 <-> 英語の脳内互換も、僕にとっては多大なコストではありますが、なにしろ、代表的な文字コードだけで 100 種類もあるというのだから、それはまあ、大変だなと思う他ありません。。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0x0c) へ続く。
過去記事 RSS
Perl には比較演算子 (Comparison operator) があります。
比較演算子は 2 つの値を比較するための演算子で、プログラム中の条件分岐で使います。
大抵のプログラミング言語にも同様の演算子はありますが、機能や約束事が微妙に違う場合がある様です。
比較演算子 : 数値
Perl では、数値を比較するための数値比較演算子 (Numeric comparison operator) が用意されています。
数値比較演算子は以下の様なものです。
< # より小さい
<= # より小さいか等しい
== # 等しい
>= # より大きいか等しい
> # より大きい
!= # 等しくない
普通、等しい意味の等号にはイコール (=) を使いますが、Perl を含めたほとんどのプログラミング言語で、イコールは、代入演算子として使われています。
このため、等しい意味を表すには、イコールを 2 つ並べたもの (==) 使います。
「より大きいか等しい」は「大なり」と「イコール」を続けた >= を使います。
記号の順番を入れ替えて => でもいい様に思いますが、 Perl の場合 => は別の意味 (ハッシュで利用) を持つ演算子に指定されているので、数値比較には使えません。
$num = 3;
if ( $num < 3 ) {
print "\$num は 3 より小さいです。\n";
}
if 文で条件分岐する上記の例では、print は実行されずに終了します。条件に $num が「3 より小さい場合」とあるからです。
比較演算子 : 文字列
Perl で文字列を比較する場合は、専用の文字列比較演算子 (String comparison operator) が用意されています。
lt # より小さい (less than)
le # より小さいか等しい (less than or equal to)
eq # 等しい (equal)
ge # より大きいか等しい (greater than or equal to)
gt # より大きい (greater than)
nq # 等しくない (not equal)
例えば、以下の様に比較が出来ます。
$str = "abc";
if ( 'abc' eq $str ) {
print "\$str の文字列は $str です。\n";
}
この例では、$str に「abc」の文字列が入っているので、if 文の中の print は実行されます。
次の例ではどうでしょう。
my $str0 = "\x{61}\x{62}\x{63}";
my $str1 = 'abc';
if ( $str0 eq $str1 ) {
print "\$str0 と\$str1 は同じ文字列です。\n";
$str0 と $str1 の値は見るからに違いますが、if 文での条件判定ではイコールと判断されて、print が実行されます。
なぜなら「\x{61}」という記述はコードポイントと呼ばれる値だからです。
これはコンピュータ内部で文字を表すコードの値を意味するので、文字列として比較出来ます。
「\x{61}」は a を、「\x{62}」は b を、「\x{63}」は c を指し示すので、コンピュータが内部で 「abc」と等価と判断する様です。おもしろいですね。
ちなみにこの値は、ASCII (アスキー) コードの 16 進数の値です。「ASCII コード表」等で検索すれば参考になる Web サイトを見つけられます。
比較演算子 : まとめ
数値と文字列の比較演算子をまとめると以下の様になります。
数値 文字列 比較
----------------------------------------------------------
== eq # 等しい (equal)
!= ne # 等しくない (not equal)
< lt # より小さい (less than)
> gt #より大きい (greater than)
<= le # より小さいか等しい (less than or equal to)
>= ge # より大きいか等しい (greater than or equal to)
0x0b-> 0x0c へ
数値のコードポイントと文字列の比較は、コンピュータの文字表現が、内部的にすべて数値 (バイトコード) で処理されていることで可能になっています。
しかしながら、バイトコードと、その対象となる文字の割り当てには、様々なパターンがあって一様ではありません。
これはいわゆる文字コード (JIS とか UTF とか EUC とか) の話になると思いますが、僕は文字コードの扱いがさっぱりです。
文字集合と符号化方式の区別もいまいちついていない状態なので、利用しているシステムのコードに合わせてテキストを書く、文字コードが合わないファイルがあれば変換する、程度のことしか出来ません。
なので、複雑なことは何もしていないにも関わらず、ちょっとした問題が起きると、解決するまでにとても時間がかかります。
Wikipedia には以下の様に書いてあります。
文字コード
多様な文字コードの存在は文字コードの互換性問題をひきおこす。文字コードの互換性問題とは、ある文字コードで記録されたデータを別の文字コードに変換しようとするとき、一方で定義されている文字がもう一方では定義されていない(あるいは用途によって2種類の文字に分けられている)という問題である。日本語では、これは特殊な漢字(苗字や団体名に使われる漢字)などが入ったデータベースを扱うときなどに問題となる。また文字コードの変換にかかるコストはばかにならないことが多い。
日本語 <-> 英語の脳内互換も、僕にとっては多大なコストではありますが、なにしろ、代表的な文字コードだけで 100 種類もあるというのだから、それはまあ、大変だなと思う他ありません。。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0x0c) へ続く。
過去記事 RSS
Perl では、数値を比較するための数値比較演算子 (Numeric comparison operator) が用意されています。
数値比較演算子は以下の様なものです。
< # より小さい
<= # より小さいか等しい
== # 等しい
>= # より大きいか等しい
> # より大きい
!= # 等しくない
普通、等しい意味の等号にはイコール (=) を使いますが、Perl を含めたほとんどのプログラミング言語で、イコールは、代入演算子として使われています。
このため、等しい意味を表すには、イコールを 2 つ並べたもの (==) 使います。
「より大きいか等しい」は「大なり」と「イコール」を続けた >= を使います。
記号の順番を入れ替えて => でもいい様に思いますが、 Perl の場合 => は別の意味 (ハッシュで利用) を持つ演算子に指定されているので、数値比較には使えません。
$num = 3;
if ( $num < 3 ) {
print "\$num は 3 より小さいです。\n";
}
if 文で条件分岐する上記の例では、print は実行されずに終了します。条件に $num が「3 より小さい場合」とあるからです。
比較演算子 : 文字列
Perl で文字列を比較する場合は、専用の文字列比較演算子 (String comparison operator) が用意されています。
lt # より小さい (less than)
le # より小さいか等しい (less than or equal to)
eq # 等しい (equal)
ge # より大きいか等しい (greater than or equal to)
gt # より大きい (greater than)
nq # 等しくない (not equal)
例えば、以下の様に比較が出来ます。
$str = "abc";
if ( 'abc' eq $str ) {
print "\$str の文字列は $str です。\n";
}
この例では、$str に「abc」の文字列が入っているので、if 文の中の print は実行されます。
次の例ではどうでしょう。
my $str0 = "\x{61}\x{62}\x{63}";
my $str1 = 'abc';
if ( $str0 eq $str1 ) {
print "\$str0 と\$str1 は同じ文字列です。\n";
$str0 と $str1 の値は見るからに違いますが、if 文での条件判定ではイコールと判断されて、print が実行されます。
なぜなら「\x{61}」という記述はコードポイントと呼ばれる値だからです。
これはコンピュータ内部で文字を表すコードの値を意味するので、文字列として比較出来ます。
「\x{61}」は a を、「\x{62}」は b を、「\x{63}」は c を指し示すので、コンピュータが内部で 「abc」と等価と判断する様です。おもしろいですね。
ちなみにこの値は、ASCII (アスキー) コードの 16 進数の値です。「ASCII コード表」等で検索すれば参考になる Web サイトを見つけられます。
比較演算子 : まとめ
数値と文字列の比較演算子をまとめると以下の様になります。
数値 文字列 比較
----------------------------------------------------------
== eq # 等しい (equal)
!= ne # 等しくない (not equal)
< lt # より小さい (less than)
> gt #より大きい (greater than)
<= le # より小さいか等しい (less than or equal to)
>= ge # より大きいか等しい (greater than or equal to)
0x0b-> 0x0c へ
数値のコードポイントと文字列の比較は、コンピュータの文字表現が、内部的にすべて数値 (バイトコード) で処理されていることで可能になっています。
しかしながら、バイトコードと、その対象となる文字の割り当てには、様々なパターンがあって一様ではありません。
これはいわゆる文字コード (JIS とか UTF とか EUC とか) の話になると思いますが、僕は文字コードの扱いがさっぱりです。
文字集合と符号化方式の区別もいまいちついていない状態なので、利用しているシステムのコードに合わせてテキストを書く、文字コードが合わないファイルがあれば変換する、程度のことしか出来ません。
なので、複雑なことは何もしていないにも関わらず、ちょっとした問題が起きると、解決するまでにとても時間がかかります。
Wikipedia には以下の様に書いてあります。
文字コード
多様な文字コードの存在は文字コードの互換性問題をひきおこす。文字コードの互換性問題とは、ある文字コードで記録されたデータを別の文字コードに変換しようとするとき、一方で定義されている文字がもう一方では定義されていない(あるいは用途によって2種類の文字に分けられている)という問題である。日本語では、これは特殊な漢字(苗字や団体名に使われる漢字)などが入ったデータベースを扱うときなどに問題となる。また文字コードの変換にかかるコストはばかにならないことが多い。
日本語 <-> 英語の脳内互換も、僕にとっては多大なコストではありますが、なにしろ、代表的な文字コードだけで 100 種類もあるというのだから、それはまあ、大変だなと思う他ありません。。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0x0c) へ続く。
過去記事 RSS
Perl で文字列を比較する場合は、専用の文字列比較演算子 (String comparison operator) が用意されています。
lt # より小さい (less than)
le # より小さいか等しい (less than or equal to)
eq # 等しい (equal)
ge # より大きいか等しい (greater than or equal to)
gt # より大きい (greater than)
nq # 等しくない (not equal)
例えば、以下の様に比較が出来ます。
$str = "abc";
if ( 'abc' eq $str ) {
print "\$str の文字列は $str です。\n";
}
この例では、$str に「abc」の文字列が入っているので、if 文の中の print は実行されます。
次の例ではどうでしょう。
my $str0 = "\x{61}\x{62}\x{63}";
my $str1 = 'abc';
if ( $str0 eq $str1 ) {
print "\$str0 と\$str1 は同じ文字列です。\n";
$str0 と $str1 の値は見るからに違いますが、if 文での条件判定ではイコールと判断されて、print が実行されます。
なぜなら「\x{61}」という記述はコードポイントと呼ばれる値だからです。
これはコンピュータ内部で文字を表すコードの値を意味するので、文字列として比較出来ます。
「\x{61}」は a を、「\x{62}」は b を、「\x{63}」は c を指し示すので、コンピュータが内部で 「abc」と等価と判断する様です。おもしろいですね。
ちなみにこの値は、ASCII (アスキー) コードの 16 進数の値です。「ASCII コード表」等で検索すれば参考になる Web サイトを見つけられます。
比較演算子 : まとめ
数値と文字列の比較演算子をまとめると以下の様になります。
数値 文字列 比較
----------------------------------------------------------
== eq # 等しい (equal)
!= ne # 等しくない (not equal)
< lt # より小さい (less than)
> gt #より大きい (greater than)
<= le # より小さいか等しい (less than or equal to)
>= ge # より大きいか等しい (greater than or equal to)
0x0b-> 0x0c へ
数値のコードポイントと文字列の比較は、コンピュータの文字表現が、内部的にすべて数値 (バイトコード) で処理されていることで可能になっています。
しかしながら、バイトコードと、その対象となる文字の割り当てには、様々なパターンがあって一様ではありません。
これはいわゆる文字コード (JIS とか UTF とか EUC とか) の話になると思いますが、僕は文字コードの扱いがさっぱりです。
文字集合と符号化方式の区別もいまいちついていない状態なので、利用しているシステムのコードに合わせてテキストを書く、文字コードが合わないファイルがあれば変換する、程度のことしか出来ません。
なので、複雑なことは何もしていないにも関わらず、ちょっとした問題が起きると、解決するまでにとても時間がかかります。
Wikipedia には以下の様に書いてあります。
文字コード
多様な文字コードの存在は文字コードの互換性問題をひきおこす。文字コードの互換性問題とは、ある文字コードで記録されたデータを別の文字コードに変換しようとするとき、一方で定義されている文字がもう一方では定義されていない(あるいは用途によって2種類の文字に分けられている)という問題である。日本語では、これは特殊な漢字(苗字や団体名に使われる漢字)などが入ったデータベースを扱うときなどに問題となる。また文字コードの変換にかかるコストはばかにならないことが多い。
日本語 <-> 英語の脳内互換も、僕にとっては多大なコストではありますが、なにしろ、代表的な文字コードだけで 100 種類もあるというのだから、それはまあ、大変だなと思う他ありません。。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0x0c) へ続く。
過去記事 RSS
数値と文字列の比較演算子をまとめると以下の様になります。
数値 文字列 比較
----------------------------------------------------------
== eq # 等しい (equal)
!= ne # 等しくない (not equal)
< lt # より小さい (less than)
> gt #より大きい (greater than)
<= le # より小さいか等しい (less than or equal to)
>= ge # より大きいか等しい (greater than or equal to)
0x0b-> 0x0c へ
数値のコードポイントと文字列の比較は、コンピュータの文字表現が、内部的にすべて数値 (バイトコード) で処理されていることで可能になっています。
しかしながら、バイトコードと、その対象となる文字の割り当てには、様々なパターンがあって一様ではありません。
これはいわゆる文字コード (JIS とか UTF とか EUC とか) の話になると思いますが、僕は文字コードの扱いがさっぱりです。
文字集合と符号化方式の区別もいまいちついていない状態なので、利用しているシステムのコードに合わせてテキストを書く、文字コードが合わないファイルがあれば変換する、程度のことしか出来ません。
なので、複雑なことは何もしていないにも関わらず、ちょっとした問題が起きると、解決するまでにとても時間がかかります。
Wikipedia には以下の様に書いてあります。
文字コード
多様な文字コードの存在は文字コードの互換性問題をひきおこす。文字コードの互換性問題とは、ある文字コードで記録されたデータを別の文字コードに変換しようとするとき、一方で定義されている文字がもう一方では定義されていない(あるいは用途によって2種類の文字に分けられている)という問題である。日本語では、これは特殊な漢字(苗字や団体名に使われる漢字)などが入ったデータベースを扱うときなどに問題となる。また文字コードの変換にかかるコストはばかにならないことが多い。
日本語 <-> 英語の脳内互換も、僕にとっては多大なコストではありますが、なにしろ、代表的な文字コードだけで 100 種類もあるというのだから、それはまあ、大変だなと思う他ありません。。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0x0c) へ続く。
過去記事 RSS
数値のコードポイントと文字列の比較は、コンピュータの文字表現が、内部的にすべて数値 (バイトコード) で処理されていることで可能になっています。
しかしながら、バイトコードと、その対象となる文字の割り当てには、様々なパターンがあって一様ではありません。
これはいわゆる文字コード (JIS とか UTF とか EUC とか) の話になると思いますが、僕は文字コードの扱いがさっぱりです。
文字集合と符号化方式の区別もいまいちついていない状態なので、利用しているシステムのコードに合わせてテキストを書く、文字コードが合わないファイルがあれば変換する、程度のことしか出来ません。
なので、複雑なことは何もしていないにも関わらず、ちょっとした問題が起きると、解決するまでにとても時間がかかります。
Wikipedia には以下の様に書いてあります。
文字コード
多様な文字コードの存在は文字コードの互換性問題をひきおこす。文字コードの互換性問題とは、ある文字コードで記録されたデータを別の文字コードに変換しようとするとき、一方で定義されている文字がもう一方では定義されていない(あるいは用途によって2種類の文字に分けられている)という問題である。日本語では、これは特殊な漢字(苗字や団体名に使われる漢字)などが入ったデータベースを扱うときなどに問題となる。また文字コードの変換にかかるコストはばかにならないことが多い。
日本語 <-> 英語の脳内互換も、僕にとっては多大なコストではありますが、なにしろ、代表的な文字コードだけで 100 種類もあるというのだから、それはまあ、大変だなと思う他ありません。。
参考情報は以下の書籍を中心に Wikipedia および各 Web サイト。それと詳しい先輩。
参考 :「Randal L. Schwartz, brian d foy, Tom Phoenix 共著 近藤 嘉雪 訳「初めての Perl 第 6 版」(オライリー・ジャパン発行 ISBN978-4-87311-567-2)」
次回 (0x0c) へ続く。
過去記事 RSS
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)