FC2ブログ
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Perlのコンテキストを判断する基準
Perlというものには、コンテキストという概念があって、慣れるまでは非常にやっかいである。
コンテキストというものは何なのかということをPerlで考える前に、日本語で考えてみよう。

1 はしで食べる。
2 はしを渡る。

両者ともに「はし」という単語を使っているが、
1つ目の例は「箸」であることがわかるし、2つ目の例は「橋」であることがわかる。

これは、文脈によって、「はし」の違いを判別できたのである。
このようにPerlでも文脈により、プログラムを処理してくれるのだ。

次のソースを見ていただきたい。各行のコメントに左辺の値にどのような値が入るのか示してある。

  1 use strict;
  2 
  3 my $c    = (5,6,7);          # スカラーコンテキスト    7
  4 my @cs   = (5,6,7);          # リストコンテキスト      (5,6,7)
  5 
  6 my @ds   = (1,1,1,1);        # リストコンテキスト      (1,1,1,1)
  7 my $d    = @ds;              # スカラーコンテキスト    4
  8 
  9 my $e    = '1' + '1';        # +演算子が数値とみなし    2
 10 my $f    =  1  .  1;         # .演算子が文字列とみなし '11'

3行目であるが、この例が一番わかりにくいかもしれない。
これは左辺が$cであるため、(5,6,7)の一番最後の数字7が入っている。
7行目では、$dに配列の大きさが代入されている(こちらの方は、3行目よりやや理解しやすいであろう。

3行目、7行目ともにスカラーコンテキストなのであるが、それはどのように判断するのであろうか?

Perlでは$が頭につく変数は、スカラー変数である。
スカラーとはただ一つの値を持つものという意味である。
3行目と7行目はこのスカラー変数が左辺にきている。
つまり、この行の左辺は、ただ一つの値を欲しているのである。
3行目はただ一つの値として、7を、
7行目では、ただ一つの値として配列の大きさ 4を代入しているのである。

4行目と6行目はリストコンテキストである。左辺が配列になっているからだ。
配列には、複数の値を入れることができるので、右辺の内容が配列として保たれる。


このように、スカラーコンテキストであるのか、リストコンテキストであるのかは、その文が、「ただ一つの値」を欲しているのか、「複数の値」を欲しているのかで判断がつく。

また、9行目と10行目であるが、これは演算子が文脈を判断して処理を行っている例である。
Perlでは、

+演算子は数値を加算するもの。
.演算子は文字列を連結するもの。

と決まっているので、上記ソースのように処理が行われるのである。



ただ、
whileとforの条件部分のように、
パッと見では、判断しづらいコンテキストも存在する。
http://bingobingobingo.blog49.fc2.com/blog-entry-805.html
スポンサーサイト
コメントを投稿する
Name:
URL:
Comment:

秘密:管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL
この記事にトラックバックする(FC2ブログユーザー)
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

08 | 2018/09 | 10
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -

ブロとも申請フォーム

この人とブロともになる

| ホーム |
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。