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

スライス

リストスライス リストから複数の要素をまとめて取り出す。 my($day, $mon, $year) = (localtime)[3, 4, 5];リストの要素、リストを生成する式は必ずカッコで囲まないといけない。 配列スライス 配列の要素をまとめて取り出す。配列の場合はカッコで囲む必要…

mapを使ってリストを変換する

my @list = (3.45, 29, 1446, 453456, -34, 0.0004); print map { sprintf("%6g\n", $_) } @list; 3.45 29 1446 453456 -34 0.0004map演算子はリストの要素を$_に代入して、ブロック内のコードを実行し、その式の結果をリストの要素として返す。リストの要素…

grepを使ってリストから要素を読み出す

my @nums = grep { $_ % 2 } 1..1000;grep演算子は1番目の引数に$_を使ったコードのブロックを、2番目の引数に処理すべき要素のリストを受け取る。リストの要素を$_に代入して、ブロック内のコードを実行する。そして、真になった要素だけを結果のリストにし…

高度なソート

ソートサブルーチンを使うことで、任意の順番で文字列を並び替えることができる。 sub by_reverse_num { if ($a > $b) { -1 } elseif ($a < $b) { 1 } else { 0 } }これは数値として降順に並び替えるたソートサブルーチン。 ソートサブルーチンの引数は自動…

substrを使って部分文字列をいじる

substr(文字列, 開始位置, 文字数);substr関数は文字列の中から、一部を取り出す。文字数を省略した場合は、開始位置から末尾までを取り出す。開始位置に負の数を指定した場合は、後ろから○文字目を開始位置とする。 my $part = substr("abcdefg", 2, 3); # …

indexを使って部分文字列を探す

index(文字列, 部分文字列, 開始位置)index関数は文字列内で部分文字列が最初に現れる位置を返す。開始位置を指定すると、それより後ろから部分文字列を探す。 my $word = "abcdeabcde"; my $w1 = index($word, "a"); # $w1は0 my $w2 = index($word, "a", 3…

プロセスをファイルハンドルとして使う

逆クォートを使ってコマンドからの入力を読み込む場合は、子プロセスが終了するまで、Perlプロセスは待たなければならない。並立実行する子プロセスを起動するには、コマンドの前後どちらかに縦棒を付けたものを指定する。 open DATE, "date|"; # dateコマン…

逆クォートを使って出力を読み込む

コマンドの出力を文字列として取り込むには、コマンドを逆クォートで囲む。 my $date = `date`; print "$date\n";Mon Feb 13 01:49:43 2006逆クォートで囲まれた部分はダブルクォート文字列として扱われる。つまり、変数展開が行なわれる。また、標準入力を…

system関数

Perlで子プロセスを起動する方法の一つはsystem関数を使うこと。 system "ls"; lsのように単純なコマンドの場合は、Perlが直接そのコマンドを実行する。だが、文字列にシェルのメタキャラクタが含まれている場合は、Bourneシェルを起動する。*1 system "echo…

環境変数

%ENVには、親プロセス(通常はシェル)から受け継いだ環境変数が入っている。%ENVを変更すると、環境変数も変更される。そしてそれは子プロレスに受け継がれ、Perl自身でも使用することができる。 #!/usr/bin/perl use strict; use warnings; $ENV{'HOME'} =…

exec関数

exec関数はsystem関数とよく似ているが、system関数が子プロセスを起動するのに対し、exec関数は、Perlプロセス自体が要求した仕事を行なう。 system関数を使った場合、子プロセスが終了した後、Perlプロセスに戻って処理が続けられるが、exec関数を使った場…

簡単なモジュールを使う

モジュールとは、Perlに機能を追加する拡張機能のこと。モジュールを使うには、プログラムの先頭で、useディレクティブによってそれを宣言する。 use File::Basename;これでFile::Basenameモジュールが持つ関数を使えるようになる。 my $path = "/usr/bin/pe…

軽量画像Viewer-NkV

ダウンロード http://www.imasy.or.jp/~ferdia/nkv/ メニューバーもスクロールバーもない。表示されるのは画像だけ。今まで使っていたIrfanViewと比べると、格段に起動が早い。できることといったら、ズームと画像の切り替えぐらい。個人的にはこれだけでき…

軽量MP3プレイヤー-Billy

ダウンロード http://www.sheepfriends.com/?page=billy 日本語化パッチ http://www.geocities.co.jp/Bookend-Hemingway/1867/ 1.03だと日本語ファイルが文字化けしたので、1.04bをインストール。 基本的な操作はキーボードだけで可能。好きなキーを割り当て…

リンクとファイル

ファイルやディレクトリを扱う上で、Unixのファイルとディレクトリについて理解することが大切だということで、よくわかっていない部分もあるけど、とりあえずメモ。 Unix系のOSは、ファイルを実際のデータ領域とiノードにわけて管理しているらしい。iノード…

12章練習問題

問1 #!/usr/bin/perl use strict; use warnings; print "ディレクトリ名を入力してください。\n"; chomp(my $dir = <STDIN>); ($dir =~ /^\s*$/) ? chdir : chdir $dir or die "ディレクトリの移動に失敗しました。\n"; print "$_\n" for <*>;動作に問題はないけど</stdin>…

マウス使用率減少化計画-あふ

キーボードだけでWindowsを操作したい、ということで、キーボードで操作するファイラ、というかキーボードだけでしか操作できないファイラ、あふをインストールすることに。 二つのファイル表示画面とその下のメッセージウィンドウがあるだけのシンプルな画…

ディレクトリハンドル

グロブを使わずに、指定のディレクトリ内のファイル名を得るには、ディレクトリハンドルを使う。ディレクトリハンドルは、使い方も動作もファイルハンドルとよく似ている。ただし、読み出すのはファイルの中身ではなく、ディレクトリ内のファイルの名前。 #!…

グロブ

グロブとは、指定された全てのファイルパターンを、それにマッチするファイル名に展開する仕組みのこと。 $ perl hoge.pl *.txtこのようにすると、作業ディレクトリ内の全てのテキストファイル名が@ARGVにセットされる。 glob関数 同じことをPerlプログラム…

ディレクトリツリーの中を移動する

相対パスの起点となるディレクトリを作業ディレクトリという。ようするに今いるディレクトリのこと。例えば、hoge.txtを参照した場合、それは作業ディレクトリに内のhoge.txtを指す。 chdirディレクトリを使うと、作業ディレクトリを変えることができる。 ch…

11章練習問題

問1 #!/usr/bin/perl use strict; use warnings; my($input_file, $output_file, $pattern, $replace); sub get_response { print $_[0]; chomp(my $response = <STDIN>); $response; } $input_file = get_response "入力ファイル名を入力してください。\n"; $outpu</stdin>…

ソ能表

cygwinでソ能表の3文字が文字化けする。どうやら2バイト目が5cであることが原因らいしい。とりあえず、後ろに\を置くと、文字化けは回避される。