sironekotoroの日記

Perl で楽をしたい

プログラミングPerl 第2章 基本構成要素

欲張りな・・・といえば?

トークン(token)とは、意味を持つ文字の並びの事で
(中略)
トークンの認識は「欲張り」に行われる。つまり、ある時点で、Perlのパーサが短いトークンと長いトークンのどちらでも認識できるような場合には、長いトークンが選択される
(58p,59p)

my $str = "ABCABCABC";
if ( $str =~ /(A.*C)/ ) {
    print $1 , "\n"; # ABCABCABC と全部返ってくる
}

# ABCだけにマッチさせたい場合には 量指定子 `?` を追加する
if ( $str =~ /(A.*?C)/ ) {
    print $1, "\n"; # ABC
}
  • そういえば、IPv4のルーティングでも最長マッチ、ロンゲストマッチが適用されるよなぁ
  • 計算機世界の常識、公理みたいなものなのかな?
  • 最長マッチは1つか該当無しだけど、最短マッチは1つ、2つ以上、該当無しとなる可能性があるから、とか?

ここまでの感想

  • Perl聖典」ってことで気負いすぎたのかもしれないけど、今のところ座学っぽい?
  • 書いてある事をコードにして確かめる、という機会はごく少ない
  • ただ、今まで読んできたPerl本の知識が体系的に編み上げられていくような感覚がある
    • あぁ、あのPerl本の作者さんはここを抜き出して書いたんだなぁ、とか

たのしい

これはつまり、$foo@fooとは全く別の変数である事を意味する。先ほど紹介した規則も合わせると、$foo[1]は配列@fooの要素であって、スカラー変数$fooとは無関係だという事がわかる。ちょっと妙な話だと思うかもしれないけど、なあに気にする事は無い。なぜなら、本当に妙な話だからだ。
(63p)

  • 投げっぱなしかよ!
  • こんな感じで読んでて楽しい
  • ただ、これは今まで勉強してきた下積みがあればこそなのか、そうでないのか、自分ではもう判断がつかない、当事者だから
  • ついでに、これを妙に思うかというと、うちはそうは思わなくて、これは最初にモノにしたプログラム言語がPerlだからなのだなぁ、と
    • JavaScript書いた時は、スカラーか配列かハッシュか分からなくて変数名にs_hogehoge a_hugahuga とかつけてた
    • 郷に入って郷に従ってない

発見がある

  • あたりまえだけど、あたりまえでない

浮動小数点の制度は無限ではない事に注意しよう。これは重要な事なので覚えておいてほしい。なぜなら、その性で、(10 / 3 == 1/3 * 10)のような比較は(たいていの場合)うまく行かないからだ。

if (10 / 3 == 1/3*10){
    print "TRUE";
}else{
    print "FALSE"
}
# FALSE
  • 浮動小数点計算には気をつけなければならない、というのはどこかで見たんだけど、なるほどこういう事か