2006-06-01から1ヶ月間の記事一覧

ちょっと休憩

ぱるも日記を始めて、気が付くと 50 日を過ぎていました。 最近、家に帰るのが遅くなってしまって、日記を書いていると0時を過ぎてしまう事が多く、「昨日の日記を書いている」状態になってしまいます。良くない良くないと思いつつ、やはり今日も0時過ぎ更新…

eval 関数を評価する

昨日作った簡単な grep コマンドの中で eval と $@ による例外処理を勉強しましたが、eval 関数について詳しく勉強してみます。 僕の知っている Lightweight Language(JavaScript、Python、Ruby、PHP など)のほとんど(全部?)に「eval」関数が存在します…

glob 関数でファイルの列挙

昨日は opendir 関数を使ったファイルの列挙を勉強しましたが、今度は glob 関数を使った方法を勉強します。 Windows を使っていてアプリケーションからファイルを開いたり保存したりする時に出てくる画面(ダイアログ)があります。あの画面に「ファイルの…

簡単な grep コマンドを作ってみる

ファイル名の列挙やファイルの読み書きの仕方を勉強したので、復習のために簡単なプログラムを作ってみます。お題は「grep コマンド」。1つのファイル、もしくはフォルダ中のファイルから、検索パターンにマッチする行を表示します。といっても、オプション…

opendir 関数でファイルの列挙

Perl で実用的なスクリプトを書くときに、「あるフォルダの中に存在するファイルを全て列挙したい」という場合は多いと思います。フォルダの中にあるファイルを全て処理したい場合などがそうですね。 Perl では、こういった事をやりたい場合、実現する方法が…

入出力(6) 改行コードとbinmode

Perl はテキスト処理に長けた言語、という印象がありましたが、バイナリを扱う事も可能です。 ただ、バイナリファイルに関連付けられたファイルハンドルからバイナリを読み込む場合や、ファイルハンドルに対してバイナリを出力する場合、注意しなくてはいけ…

入出力(5) 特殊ファイルハンドル ARGV

昨日勉強した @ARGV はコマンドライン引数のリストを格納していましたが、ARGV ファイルハンドルはまた別のものです。Perl は同じ名前でも型が違えば全く別の変数として扱うのでしたね。 引数として「ファイル名のリスト」を渡された場合、ARGV はそのファイ…

入出力(4) @ARGV 変数で引数処理

プログラムを起動する際に渡す引数を、「コマンドライン引数」「パラメータ」もしくは単に「引数」などと呼びますが、Perl のスクリプトを実行する際にもこの引数を渡す事ができます。 スクリプトを実行する際に渡された引数は、コードの中では特殊変数 @ARG…

特殊ファイルハンドル DATA

Perl コンパイラがコードを解釈する段階で、「__END__」もしくは「__DATA__」という行(トークン)を見つけると、それ以降からファイルの終わりまでコードとして解釈されなくなります。コメントのように、何を書いてもコードとしては実行されませんが、これ…

入出力(3) CSVファイルを表として表示

昨日、ファイルの読み書きの基礎を勉強したので、今度は少し応用的な事をやってみます。具体的には CSV ファイルの読み込みです。 CSV とは「Commma Separated Values」の略で、データを「,」(カンマ)区切りで行列として並べたものです。例えば、次のよう…

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)は、複数行のリテラルな文字列をコード中に埋め込むのに良く使われる構文です。「リテラルな文字列」というと普通は「"」(ダブルクォート)や「'」…