100までの整数から素数を列挙せよ

流行のお題に挑戦してみます。他の方の回答を見ずに、自分で書いてみました。配列を使って、エラトステネスの篩をかけています。恐らく定番の方法だとは思いますが、自分で思いつく一番“Perl っぽい”回答です。(^_^) use strict; sub find_primes($) { my ($…

入出力(1) ファイルハンドル

今まで書いてきたプログラムは入力が無く、出力だけを行なうプログラムでした。さすがにこれだけでは面白くない上に実用的なプログラムが書けそうにないので、そろそろ入出力の仕方を勉強します。 print 関数を使うと標準出力に文字列を出力する事ができまし…

入出力(2) ファイルの読み書き・基礎

ファイルハンドルの事を勉強したので、次はファイルの読み書きを勉強します。ファイルの内容を読み書きするには、以下のような流れになります。 ファイルを開いて、ファイルハンドルに関連付ける(open) ファイルハンドルを通じて、内容を読み書きする(pri…

「何事も経験」は正しい

ここ数日、日記をお休みしていました。(^_^;) 言い訳をさせて頂くと、「忙しかった」というのもあるのですが、一番の理由は「他の言語でプログラムを書く必要があったから」ですね。プログラミング言語の勉強日記をやっていて困るのがこういう時。やはり、混…

スーパーpre記法が拡張

はてなグループにおけるスーパーpre記法の拡張について - はてなグループ日記 - 機能変更、お知らせなど 本日、入力したコードやはてな記法をそのまま表示するスーパーpre記法の拡張を行い、ソースコードや html などのシンタックス・ハイライトを行う機能を…

結論 map と grep の不思議

id:bsheep さんに返事の返事を頂きました♪ 黒羊がだらだらとPerlとLinuxを勉強してる記録 - 教えて、perldoc先生 失礼ながらこれはとっても尊敬すべきことのように思えます。ぜひ見習いたいものです。 あまりオススメできません。(^_^;) この一連の不思議の…

続・map と grepの不思議

id:bsheep さんから先日の疑問について言及をいただきました。ありがとうございます。(^_^) 黒羊がだらだらとPerlとLinuxを勉強してる記録 - grepの不思議? つまり、 use strict; $_ = "abc"; my @out = grep /c$/, qw(abc vds bca sfc skc); print "$_\n" …

関数プロトタイプ 基礎

というわけで、関数のプロトタイプを勉強します。 関数の定義の仕方を勉強している時に、引数の受け取り方も勉強しました。Perl では「可変長引数」(渡せる引数の数が決まっていない)がデフォルトで、引数はデフォルト配列 @_ で受け取るようになっている…

map と grep の不思議

map と grep の第一引数には「式」もしくは「ブロック」が渡せる事を勉強した時に、以下のような疑問を持ちました。 ところで、『grep に「式」を渡す時、以下のように書ける』と書きましたが use strict; my @fruits = qw(pine banana apple lemon grape ma…

高度なリスト操作 map

次は grep とよく似ている map を勉強します。 map も grep と同じく、第一引数に「式」もしくは「ブロック」をとり、第二引数に「リスト」をとります。そして、やはり grep と同じように、渡したリストの各要素を $_ にセットしながら、第一引数の式・ブロ…

高度なリスト操作 grep

今度は少し高度なリスト操作を行なう関数を勉強してみます。Perl のトリッキーなコードには必ず出てくるのが、このリスト操作関数の類。grep や map などです。意味は文脈から何となく想像していたのですが、ちゃんと勉強したいと思います♪ 手始めは「grep」…

tr/// 用オプション /c

昨日勉強したtr/// 演算子用のオプションを勉強します。まずは「/c」。c は complement (補集合)の略です。「補集合」とは、数学の集合に出てくる概念で、簡単に言えば「ある集合に含まれないモノの集合」を意味します*1。 tr/// 演算子には「変換する文字…

tr/// 用オプション /d

検索リストに対して置換リストが少ない時(検索リストの文字に対応する文字がない時)、リストの最後の文字が使われる、という事は昨日勉強しました。 「/d」オプションを付けると、対応する文字が見つからない時は「削除」されます。 use strict; my $text …

tr/// 用オプション /s

「/s」オプションを付けると、tr/// によって1文字ずつスキャンし変換した結果、その文字が連続で続いていたら「1文字」にします。これはちょっと言葉では説明しづらいですね。 例えば、さきほど使ったコードを少し変えてみます。 use strict; my $text1 = "…

正規表現(10) 置換オプション /e

置換演算子 s/// 専用のオプションとして「/e」修飾子があります。この「/e」オプションが Perl の正規表現置換をより強力なモノにしている一因ではないでしょうか。 「/e」オプションを付けると、置換後の文字列を「Perl の式として評価して」「評価した結…

変換演算子 tr///

変換演算子 tr/// は、文字列を対象に「ある文字からある文字へ」と変換する時に利用する演算子です。検索や置換と同じように文字列に対して =~ 演算子を使って適用します。 tr/// 演算子には2つの「文字のリスト」をスラッシュ(区切り文字は変更可能)で区…

フィボナッチ数列と黄金比

遅ればせながらダ・ヴィンチ・コードを読んでいます。映画は観てませんけど。(^_^) まだ上巻の途中ですが、途中で登場したフィボナッチ数列のと黄金比の関係にビックリ。 ダ・ヴィンチ・コード〈上〉 p171-172 より引用 スライド映写の準備を進めながら、ラ…

正規表現(9) 置換演算子 s///

$text =~ m//; は $text に対する検索でしたが、検索といえば次に来るのが置換です。検索してマッチした文字列を、他の文字列に置き換えます。正規表現による置換はとても強力で、僕もよくお世話になります。(^_^) Perl の正規表現による置換は s/// 演算子…

ヒアドキュメント

昨日の日記で「後述」と書いておきながら、忘れていました。(^_^;) 「ヒアドキュメント」(Here Document)は、複数行のリテラルな文字列をコード中に埋め込むのに良く使われる構文です。「リテラルな文字列」というと普通は「"」(ダブルクォート)や「'」…

正規表現(8) 検索オプション /g

Perl での正規表現の勉強を続けます。検索オプションは、これまでに /i と /m について勉強しましたが、まだまだあります。 普通、パターンマッチングというのは文字列中で一番最初にマッチした結果を返します。これはつまり、同じ文字列に対して同じパター…

お休みしてました

ここ二日間、風邪をひいてダウンしてました。(x_x;) 最近の天気は移り変わりが激しく、傘を忘れて雨に打たれたのが良くなかったようです*1。皆さんもお気をつけください。それにしても、「五月晴れ」は一体どこにいっちゃったのでしょうね……。 ではでは、勉…

はてなダイアリー市民

気がついたら、この「ぱるも日記」を書き始めて一ヶ月経っていたようです。 すると、はてなからメールが。 本日より、palmoさんは「はてなダイアリー市民」になられましたのでお知らせいたします。 というわけで、はてなダイアリーの市民権を獲得したようで…

undefを含むリスト代入とlocaltime

先日勉強したリスト代入と左辺値に関して、H.I.さんよりコメントを頂きました。ありがとうございます。 H.I. 『リスト代入の左辺リストが 「要素が全て有効な左辺値でなければならない」こと の例外として、リスト代入の要素にはundefを指定することができま…

スライス

配列の添え字に「@arr[1,2,3]」のようにカンマ区切りで複数の数字を書くと、その配列の1番目、2番目、3番目の要素が入った新しい配列を得る事ができます。これを「スライス」と呼ぶそうです。「$arr[1]」と書く場合とは違い、返ってくるのが配列なので「@arr…

代入文の返り値

昨日の日記で「リスト代入」について調べましたが、そういえば「代入文」自体の「返り値」について勉強するのを忘れていました。 Perl の代入文は、代入を行なった後の「左辺」を返します。 例えば、以下のような時に便利です。 use strict; my ($x, $y, $z)…

正規表現(6) m// の返り値(キャプチャなし)

反応が頂けてとても楽しかったですが、そろそろ Perl の勉強に戻りたいと思います。(^_^)"text" =~ m/pattern/; で検索できますが、この文の返り値はマッチすれば真、マッチしなければ偽と書きました。確かにその通りのようなのですが、もう少し詳しく調べて…

正規表現(7) m// の返り値(キャプチャあり)

ここまでは、「キャプチャしない場合」のお話でした。つまり、正規表現にキャプチャの為の () カッコが含まれていない場合です。キャプチャが含まれていると、返り値としてキャプチャした文字列がリストになって返ってくるそうです。 どういう事か、スクリプ…

リスト代入と左辺値

1つ前のエントリで、「リストへリストを代入」というコードを書きました。先ほどのコードでは正規表現が入ってわかりにくいので、省略して書くと、以下のようなコードです。 ($ye, $mo, $da, $ho, $mi) = (2006, 5, 26, 15, 0); この時、$ye は 2006 に、$mo…

「ブログで勉強日記」の反応の反応

あなたがブログで勉強日記をつけるべき6つの理由 について、はてなブックマークを始めとする各所で反応を頂きました。ありがとうございます♪ 以下、反応の反応。 勉強日記というもの - Unknown::Programming 僕自身ももっとアグレッシブになんかやってみたい…

正規表現(5) キャプチャ

正規表現の中でカッコ ( ) を使うと、マッチした文字列の一部をキャプチャ(捕獲)して後で使う事ができます。これは、正規表現を使う上でとっても重要なテクニックです。 例えば m/aaa(bbb)ccc/ というパターンがあるとします。この検索パターンは「aaabbbc…