2008-08-01から1ヶ月間の記事一覧

文字列が整数を表現しているかを判定する

Perl › 数値 › here 文字列が整数を表現しているかを判定するには、正規表現を利用します。正規表現で最初から終わりまで数字でできているかどうかを判定します。 /^[0-9]+$/ 整数であるかどうかを判定するには上記の正規表現に、先頭に+か-が指定されてもか…

数値と文字列の自動変換

Perl › 数値 › 数値と文字列の自動変換 Perlでは、文字列と数値の自動変換が暗黙的に行われます。C言語やJavaのように明示的に文字列と数値の変換を行う必要がないので、スクリプトの記述が非常に楽です。 my $num1_str = "100"; my $num1 = 100; my $num1_t…

数値と誤差

Perl › 数値 › 誤差 小数をコンピュータで表現するには誤差が問題になります。2進数で表現できない小数は誤差が発生します。コンピュータは数値を内部的には2進数としてしか表現できません。整数についてはどんな数でも2進数として表現できます。問題になる…

2進数、8進数、16進数での数値表現

Perl › 数値 › here 2進数、8進数、16進数での数値の表現を解説します。 2進数 0b を先頭につけると2進数で数値を指定できます。 my $num_bin = 0b1111; 8進数 0を先頭につけると8進数で数値を指定できる。 my $num_oct = 0777; 16進数 0x を先頭につけると1…

数値リテラル - ソースコード上での数値の表現

Perl › 構文 › here ソースコード上での数値の表現を数値リテラルといいます。数値リテラルは次の表記が可能です。 整数 クオートやダブルクオートで囲まれていない数字は、Perlによって数値リテラルとして解釈されます。 my $num1 = 1; # 負の数 my $num2 =…

umask関数 - ビットマスクでパーミッションを制限する

Perl › 関数 › here ビットマスクを指定するにはumask関数を使用します。 # 8進数で指定 umask 0022; ビットマスクを指定するには、umask関数を使います。パーミッションの指定は3桁の8進数で行います。Perlでは先頭に0をつけることで8進数をあらわすことが…

パーミッションについて理解しよう

Perl › ファイル操作 UNIX系のOSでは、ファイルパーミッションという仕組みがあります。(このサイトでは便宜のため、UNIX系OSというのはUNIX系OSとLinux系OSの両方を指すことにします。)Perlは、WindowでもUnixでも実行できるマルチプラットフォームな言語で…

chmod関数 - ファイルパーミッションを変更する

Perl › 関数 › here ファイルのパーミッションを変更するにはchmod関数を使います。 chmod 0666, $file; パーミッションを変更するには、chmod関数を使います。第1引数は、8進数でパーミッションを指定します。Perlで8進数を表現するには、数字の先頭に0をつ…

ロック用のファイルを使ってファイルロックする

Perl › ファイル入出力 › here ロック用のファイルを作ってそれにロックを掛けることもできます。ファイルロック用のファイルを作って排他制御を行う利点は、更新対象のファイルを削除したり、リネームしたりできることです。 以下のサンプルは前回のサンプ…

flock関数 - ファイルの排他制御

Perl › 関数 › here flock関数を使用すれば、ファイルの排他制御を行うことができます。今回は、flock関数を実際に使って順番を守ってファイルに読み書きを行います。(一般的には、排他処理と呼びます。) 以下は、実際に順番を守って読み書きしているとこと…

ファイルロックとは

Perl › ファイル入出力 › here ひとつのファイルに対して複数人で同時に書き込みを行うとファイルは破損します。複数のプロセスがひとつのファイルに対して並行して書き込み行う場合は、それぞれのプロセスが順番を守る必要があります。ファイルロック機構を…

バッファリングを無効にする

Perl › ファイル入出力 › here ブロックバッファリングは、出力を書き込みバッファに貯めて、蓄積した分を一度に書き出すのでパフォーマンス面では非常に効率的でした。ローカルのファイルに書き出す場合はこれで問題になることはまずありません。問題が発生…

バッファリングとは

Perl › ファイル入出力 › here Perlの出力関数であるprint関数は、バッファリングを行います。バッファリングとは「データを貯めておく」という意味です。Perlのprint関数は実際に呼び出されても、即座にファイルに内容を書き出しません。書き込み内容をバッ…

ランダムアクセスを使って読み書きする

Perl › ファイル入出力 › here 変更したい箇所だけをピンポイントで指定して、変更して書き戻すランダムアクセスのサンプルです。ランダムアクセスというのは一般的に固定長のバイナリファイルに対して使われますが、簡便のためここでは固定長テキストファイ…

安全にファイルを読み書きする

Perl › ファイル入出力 › here ファイルを読み込んで同じファイルに書き込むときは、読み書きできるオープンモード "+安全に書き込みを行うためには、いったん新しいファイルに書き込んでから、ファイル名を元のファイル名に変更することで上書きするように…

シーケンシャルアクセスとランダムアクセス

Perl › ファイル入出力 › here ファイルにアクセスする方法には、シーケンシャルアクセスとランダムアクセスという2種類の方法があります。 シーケンシャルアクセスとは、ファイルを先頭から順番に読み込んでいくアクセスのことで、ランダムアクセスとは、フ…

ビット演算子 - ビット単位で演算を行う

Perl › 演算子 › ビット演算 ビット演算とは、ビット単位の論理和、論理積を求める演算のことです。ビット演算を使用する機会は少ないですが、sysopenなどC言語のライブラリを直接利用した関数を使う場合に、ビット演算を行うことがあります。またビット単位…

sysopen関数 - オープンモードを詳細に指定

Perl › 関数 › here sysopen関数を使用すればオープンモードを詳細に指定することができます。open関数のオープンモード以上のことを行いたい場合に利用できます。 sysopen(my $fh, $file, O_WRONLY | O_EXCL | O_CREAT) Perlのsysopenは、C言語のfopenと同…

オプションを指定できるフィルタプログラムを書く

Perl › ファイル入出力 › here コマンドライン引数で、オプションを指定できるフィルタプログラムを書いてみます。オプションに指定できるのは、切り出す列の位置と区切り文字です。 use strict; use warnings; # コマンドラインオプションを扱うためのモジ…

Unix風のフィルタプログラミングを書く

Perl › ファイル入出力 › here Unix風フィルタプログラミングと呼ぶべき種類のプログラミングがあります。特徴を述べると ファイルを引数で渡すか標準入力で渡すかをユーザが選択できる。 条件はオプションとして指定(-s10のような記述)する。 ということで…

パイプの仕組みを理解する

Perl › ファイル入出力 › here 現代的なOSでは、「あるプログラムの標準出力」を「別のプログラムの標準入力」に渡すことが可能です。このOSの機能をパイプと呼びます。 パイプという機能は非常に便利な機能です。標準入力からデータを受け取り、標準出力に…