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

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

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

標準入出力とリダイレクト

Perl › ファイル入出力 › here リダイレクトとは、標準入力の入力元、標準出力、標準エラー出力の出力先を切り替えるOSの機能のことです。現代的なOSは基本的なリダイレクトの機能を備えています。 リダイレクトの中でも覚えておかなければならないのは、標…

標準入力 標準出力 標準エラー出力

Perl › ファイル入出力 › here 標準入力、標準出力、標準エラー出力について書きます。 標準入力 標準出力 標準エラー出力 1.標準入力 標準入力の読込先はキーボードです。標準入力を利用すると、キーボードから入力を受け取っることができます。キーボード…

csvファイルを読み込んでPerlのハッシュの配列に変換する

Perl › ファイル入出力 › here csv形式のファイルを読み込んで、ハッシュの配列に変換するサンプルです。 ハッシュスライスという機能を積極的に使っているので、可読性はちょっと低いです。Perlをしばらく使って慣れていないと暗号に見えるかもしれません。…

csvファイルを読み込んで配列の配列に変換に変換する

Perl › ファイル入出力 › here 実際にcsvファイルを読み込んで、Perlのデータ型(配列の配列)に変換して、標準出力に書き出すサンプルです。csvから配列の配列への変換はサブルーチンを使って行っています。何らかのファイルを読み込んで編集するといった場合…

標準出力をリダイレクトしてファイルに書き込む

.bread { padding:0; margin:0; } .bread li { display:inline-block; list-style-type:none; font-size:14px; } .bread a { padding:3px 5px; width:100%; background:#3cb371; color:white; border-radius:3px; text-decoration:none; } .bread a:hover { …

getc関数 - ファイルから一文字ずつ読み込む

Perl › 関数 › here getc関数を使って1文字づつ読み込むこともできます。 my $c = getc $fh; サンプル 以下は、1文字読み込みのサンプルです。 use strict; use warnings; # 1文字読み込み # 読み込みたいファイル名 my $file = shift; print "1: 1文字ずつ…

行入力演算子「<>」 - ファイルから一行読み込む

Perl › 演算子 › here ファイルを一行づつ読み込むには行入力演算子「<>」を使用します。読み込む行がなくなると、undefを返却します。 my $line = <$fh>; 他の演算子と異なり「」の間にファイルハンドルを記述することに注意してください。 通常は、while関…

ファイルハンドルの概念を理解する

Perl › ファイル入出力 › here Perlにおけるファイルハンドルの概念はややこしいので、解説しておきます。 ファイルハンドルは実体ではなくて概念的なもの Perlでファイルハンドルといった場合は、Perlがファイルハンドルとして認識する複数の実体のことをい…

open関数 - ファイルをオープンする

Perl › 関数 › here ファイルをオープンするには、open関数を使用します。第一引数は、取得したファイルハンドルを代入するための変数、第二引数はオープンモード、第三引数は、ファイル名です。ファイルのオープンが成功したときは、真が、失敗したときは偽…

サブルーチンの動的な生成

Perl › サブルーチン › here Perlでは、サブルーチンを動的に生成することもできます。 関数ジェネレータ 関数ジェネレータとは、サブルーチンを生成するためのサブルーチンのことです。関数ジェネレータは、動的にサブルーチンを生成したいときに用いられる…

クロージャーを作成する方法

Perl › サブルーチン › here Perlで「クロージャー」を作成する方法を解説します。 クロージャの定義 クロージャの定義をコードを使って解説します。 use strict; use warnings; # もっともシンプルなクロージャ { # 変数の生成 my $var = 5; sub var { retu…

AUTOLOAD - サブルーチンのオートロード

Perl › 構文 › オートロード Perlではサブルーチンが存在しなかった場合に呼び出されるAUTOLOADというサブルーチンを定義することができます。これをサブルーチンのオートロードと呼びます。 package MyModule; aaaaiiiii( 1, 2 ); our $AUTOLOAD; sub AUTOL…

コマンドプロンプトでUTF-8の文字を表示する

.bread { padding:0; margin:0; } .bread li { display:inline-block; list-style-type:none; font-size:14px; } .bread a { padding:3px 5px; width:100%; background:#3cb371; color:white; border-radius:3px; text-decoration:none; } .bread a:hover { …

サブルーチンのリファレンス

Perl › サブルーチン › here サブルーチンのリファレンスとは、サブルーチンを指し示すもののことです。 # リファレンスを作成 my $twice_ref = \&twice; # デリファレンスして呼び出し my $twice_num = $twice_ref->($num); sub twice { return $_[0] * 2; …

Hash::Util - ハッシュのキーの追加を禁止する

Perl › モジュール › here Hash::Utilモジュールを使ってハッシュのキーの追加を禁止することができます。 use Hash::Util; # 制限 Hash::Util::lock_keys(%hash); # 解除 Hash::Util::unlock_keys(%hash); Hash::Util::lock_keysを使えば、ハッシュのキーを…

sqrt関数 - 正の平方根を求める

Perl › 関数 › here sqrt関数を使用すると正の平方根を求めることができます。平方根とは、2乗すると元の数になる数のことを言い、正と負の値があります。( 例: 4の平方根は、2と-2 )負の平方根がほしいときは、sqrtの結果の符合を変えるだけです。 my $root…

べき乗演算子 - **

Perl › 演算子 › 算術演算子 › here べき乗を求めるにはべき乗演算子「**」を使用します。 my $two_power_num = 4 ** 2; べき乗を求めるには、** 演算子を使います。べき乗とは、同じ数を複数回かける演算のことです。 サンプルプログラム べき乗を求めるサ…

サブルーチンの演習問題

Perl › サブルーチン › here サブルーチンの具体的な例を使って学ぶために、いくつかの例を挙げて、解説します。 csv形式の文字列を配列の配列に変換する csv形式の文字列を配列の配列に変換するサンプルです。 use strict; use warnings; # 名前,年齢,出身 …

ヒアドキュメント - 複数行の文字列を簡単に作成

Perl › 演算子 › here ヒアドキュメントを用いれば複数の文字列をわかりやすく記述することができます。 my $text = <<'EOS'; aaaa iiii uuuu EOS ヒアドキュメントを用いれば、セミコロンの位置に注意しましょう。最後のEOSのあとには、セミコロンはなくて…

よいサブルーチンを作成するための心がけ

Perl › サブルーチン › here サブルーチン作成に関するわたしの考えを殴り書きしました。 見出し 引数と戻り値について理解する。 小さなサブルーチンを作成する。 サブルーチンに柔軟性を持たせる。 呼び出しの階層を浅く保つ。 機能を実現するサブルーチン…

Perlのサブルーチンの柔軟性をC言語と比較してみる

Perl › サブルーチン › here Perlのサブルーチンの特徴をまとめておきます。C言語と比較してみました。Perlの言語としての柔軟性が理解できると思います。※1 Perlのサブルーチンの特徴 Perl C言語 1 サブルーチンの定義はどこで行っても良い 一般的に、関数…

型グロブを理解する

Perl › モジュール作成 型グロブは、シンボルテーブルのエントリーを表現します。 *main::num # $main::{num} とほぼ同じ意味。 *num # パッケージ名を省略することもできます。 シンボルテーブル上の、 $main::{num} には、'*main::num' という文字列が代入…

シンボルテーブルの中身を覗いてみる

Perl › モジュール作成 › here Perlは、シンボルテーブルというものを持ち、プログラマーが、それを参照したり、変更を加えたりすることができます。Perlは、他の言語に比べて、柔軟で、高い適応力を持ちますが、その力をを生み出している機能のひとつがシン…

サブルーチンの定義はスコープの影響を受けない

Perl › サブルーチン › here サブルーチンの定義は、スコープの影響を受けません。 { sub func { return 2; } } my $ret = func(); サブルーチンは、スコープの影響を受けません。一見すると、funcは、スコープの外では、見えないものと思ってしまいがちです…

wantarray関数 - スカラかリストをコンテキストに応じて返却

Perl › 関数 › here Perlではコンテキストという概念があるので、スカラあるいはリストをコンテキストに応じて返却することができます。 sub func_name{ # 処理 ... return wantarray ? リスト : スカラ; } wantarrayを使えば、リストコンテキストの場合とス…

Perlのコンテキストを理解しよう

Perl › 構文 › here Perlにはコンテキストと呼ばれる概念があります。コンテキストとは文脈という意味で、次の二つのコンテキストがあります。 スカラコンテキスト リストコンテキスト スカラとして評価される文脈をスカラコンテキスト、リストとして評価さ…

Perlを実行するためのコマンドプロンプト入門

Perl › here Perlのプログラミングは、コマンドと呼ばれるテキストを入力して実行します。まず最初にWindowsにおけるコマンド実行ツールであるコマンドプロンプトについて解説したいと思います。 コマンドプロンプトとは コマンドプロンプトとは、Windows環…

ActivePerlをWindowsにインストールする

Perl › インストール ActivePerlをWindowsにインストールしてPerlを使えるようにしましょう。ActivePerl | ActiveStateActivePerlはActiveState社によって無償で提供されているPerlディストリビューションの一つです。特徴は Windows関連のモジュールが多く…

複数階層のディレクトリを再帰的にコピー

Perl › ファイル操作 › here 複数階層のディレクトリを再帰的にコピーするにはFile::Findモジュールを使用します。 use strict; use warnings; use File::Path 'mkpath'; use Fcntl; use File::Find 'find'; use File::Copy 'copy'; use Cwd 'getcwd'; # 準…