2008-01-01から1年間の記事一覧

三角関数を利用する

Perl › 数値 › here 三角関数を利用するための関数やモジュールを紹介します。 サイン サインを求めるには、sin関数を角度はπ(pi関数)を使って、弧度法で指定するのが簡単です。 use Math::Trig 'pi'; sin(pi/2); cos(pi/3); (参考)Math::Trig コサイン コサ…

角度をラジアンに変換

Perl › 数値 › here 度数法( 30°,90°など )で表された角度を、ラジアン( π/6, π/4 など )に変換するにはMath::Trigモジュールのdeg2rad関数を使用します。その逆を行うには、rad2deg関数を使用します。 use Math::Trig 'pi', 'deg2rad'; # 度数法の角度を弧…

円周率を取得する

Perl › 数値 › here 円周率を取得するにはMath::Trigモジュールのpi関数を使用します。 use Math::Trig 'pi'; pi; 円周率とは、円周(L)と直径(R)比率( L/R )のことです。円周率は無理数であり有限範囲の小数で表現することができません。piで取得する円周率…

abs関数 - 絶対値を求める

Perl › 関数 › here 絶対値を求めるにはabs関数を使います。 abs $num; 絶対値というのは、符号を考慮しない大きさのことで、常に正の値になります。0からどれくらい離れているかを表す数のことです。「3」の場合は「3」に、「-3」の場合は、「3」になります…

Perlの算術演算子

Perl › 演算子 › here Perlで四則演算を行うための算術演算子について解説します。 加算 足し算を行うには加算演算子「+」を使用します。 # 足し算 my $add = 1 + 1; 減算 引き算を行うには減算演算子「-」を使用します。 # 引き算 my $sub = 9 - 1; 乗算 掛…

Math::Random::MT - 自然乱数に近い擬似乱数を発生

Perl › モジュール › here 擬似乱数を発生させるよいアルゴリズムにメルセンヌ・ツイスタ法というものがあります。メルセンヌ・ツイスタ法によって擬似乱数を求めるモジュールがMath::Random::MTというモジュールです。CAPNから取得することができます。 use…

srand関数 - 再現性のある乱数を生成する

Perl › 関数 › here srand関数を使用すると再現性のある乱数を生成することができます。rand関数を呼び出す前に適当な数値をsrand関数に与えます。 # 乱数発生アルゴリズムを初期化 srand $seed; rand $num; コンピュータにおける乱数の生成とは コンピュー…

rand関数 - 乱数を生成する

Perl › 関数 › here 乱数を生成するにはrand関数を使用します。引数で指定した数より小さい0以上の数値がランダムで生成されます。 $ret = rand 10; 乱数とはランダムな数のことです。アプリケーションを作成するときは、時にランダムな数がほしいときがあり…

uc関数 - 小文字を大文字に変換する

Perl › 関数 › here uc関数を使用すると小文字から大文字へ変換することができます。uc関数は引数のそれぞれの文字を大文字に変換します。変換できない文字の場合は引数に与えた文字がそのまま返されます。 my $str = uc "aaa"; サンプルプログラム 小文字か…

2進数、8進数、16進数の進数変換

Perl › 進数変換 Perlで「進数変換」を行う方法を解説します。 10進数から2進数、8進数、16進数への変換 10進数から2進数、8進数、16進数に変換してみましょう。sprintf関数でフォーマット指定を使います。 # 2進文字列に変換 my $bit_str = sprintf("%b", $…

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

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のような記述)する。 ということで…