範囲演算子『..』と『...』の違い?

Perl初心者のためのPerlノートです!

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo

◆ はじめに

本ページは、私がPerlを習得した時(いや習得中)のノートです。

ごく普通の言語(COBOL,C,Java,VB等)を知っている人が、Perlをやり始めるといろいろと悩むことがあります。

それは、

です。

本ページは、そのようなハードルを一つ一つクリアにしていけたらと思います。

そして、本ページが何かのお役に立てれば幸いです。では、ごゆっくりご覧ください。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

◆ サイト最新情報

◆ コンテンツ

2008-07-21 範囲演算子『..』と『...』の違い?

ここ数日、『..』と『...』が、どう違うのかを悩んでいます。

とりあえず、現状でわかっている範囲演算子について述べてみます。


リストコンテキストでは、超簡単で、範囲のリストを生成します。

例えば、(1 .. 5)は、(1,2,3,4,5)と等価です。


スカラーコンテキストでは、わかっているところを書いてみます。

以下の例では、標準入力からWebページのテキストファイルを読み込んでいます。

そして、1行目から10行目を表示し、また、Webページ内のhtmlのbody要素を表示します。

while (<>) {
    if ( 1 .. 10 ) { print; }
    if ( /<body>/ .. /<\/body>/ ) { print; }
}

範囲は、標準入力のときには、現在の入力行を示す特殊変数『$.』と比較されます。


そして、以下の『"..." と ".."』の違いがわからないのです。

また、その違いは、sedとawkのコンマ演算子の違いだと書いてあるみたいなのですが、sedとawkでテストをしても違わず同じ結果になるのです。

スカラコンテキストで使われたときには、".." は真偽値を返します。この演算子は、フリップフロップのように 2 値安定で、 sed や awk や多くのエディタでの行範囲 (コンマ) 演算子をエミュレートするものとなります。各々の ".." 演算子がそれぞれに独立して自分の真偽状態を管理します。はじめは、左被演算子が偽である間、演算全体も偽となっています。範囲演算子は、いったん左被演算子が真になると、右被演算子が真である間、真を返すようになります。右被演算子が偽になると、演算子も偽を返すようになります。 (次に範囲演算子が評価されるまでは、偽とはなりません。 (awk でのように) 真となった、その評価の中で右被演算子をテストし、偽とすることができますが、1 度は真を返すことになります。 sed でのように、次に評価されるまで右被演算子をテストしたくなければ、 2 個のドットの代わりに 3 つのドット ("...") を使ってください。その他の点では、"..." は ".." と同様に振舞います.

http://perldoc.jp/docs/perl/5.6.1/perlop.pod

あと、以下のくだりも理解できない。なにを言っているのだろうか・・・。

偽としては空文字列が返され、真としては (1 から始まる) 順に並んだ数値が返されます。この通し番号は、新たに範囲が始まるごとにリセットされます。範囲の最後の数字には、文字列 "E0" がお尻につけられます。これは、数値としては何の影響もありませんが、範囲の終わりで何か特別なことをしたい場合に、目印として使うことができます。範囲の始まりで何かしたい場合には、通し番号が 1 よりも大きくなるのを待っていればよいでしょう。

http://perldoc.jp/docs/perl/5.6.1/perlop.pod

誰か、わかる方、教えてください。

◆ おすすめ Perl本

■ 続・初めてのPerl 改訂版

『初めてのPerl』の次ぎに読むと吉です。

結構いいですが・・・、初心者にはちょっと難しいかもです。

■ 結城浩のPerlクイズ

この本には、ちゃいちゃんパパの小話しが載っています(謎)。

ある程度、Perlを理解している人には、たまらない内容になっています。さすが結城先生だな!

結城浩のPerlクイズ

■ 新版Perl言語プログラミングレッスン入門編

実は、私はまだ読んでいませんが、結城先生の本なので良くないはずがありません。

新版Perl言語プログラミングレッスン入門編

■ CGI&Perlポケットリファレンス (Pocket reference)

この本は、非常に役に立ちます。ちょっと調べるのに最適です。サンプルも説明も的を射ています。

CGI&Perlポケットリファレンス (Pocket reference)

■ Perlベストプラクティス

一読の価値有りだと思います。

Perlベストプラクティス

■ プログラミングPerl〈VOLUME1〉

ご存知、Perl本の聖書、ラクダ本(上)です。

■ プログラミングPerl〈VOLUME2〉

ご存知、Perl本の聖書、ラクダ本(下)です。

◆ おわりに

最後に、本ページが、何かのお役に立てれば幸いです。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo

人のよいところをどんどん見つけよう