Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. ファイル操作
  3. here

OSに依存しないファイル名の作成

OSに依存しないファイル名を作成するにはFile::Specモジュールのcatfileメソッドを使用します。

use File::Spec;
my $file_name = File::Spec->catfile('t', 'test1.t');

ファイル名の規則は、OSによって異なります。/ や \ を使ってファイル名を構成してしまうと、OS間での移植性が損なわれます。File::Specモジュールを使えば、実行しているOSに応じたファイル名の規則にしたがって、ファイル名が作成されるので、異なるOSに移植しても、手直しが発生しません。

updirメソッドを使用するとOSに依存しない「1階層上のディレクトリ」を表現することができます。

File::Spec->updir

UnixでもWindowでも、1階層上のディレクトリの表現は、 .. ですが、もしかしたら、他のOSでは、表現が異なるかもしれません。

サンプル

OSに依存しないファイル名を作成するサンプルです。

use strict;
use warnings;

# OSに依存しないファイル名を作成する

use File::Spec;

print "1: OSに依存しないファイル名を作成する。\n";
# Unix では  、lib/test1.t となり、
# Windowsでは、lib\test1.t となる。
my $file_name = File::Spec->catfile( 't', 'test1.t' );
print "\$file_name = $file_name\n\n";

print "2: OSに依存しない「1階層上のディレクトリ」を表\現する。\n";
my $up_dir = File::Spec->updir;
print "\$up_dir = $up_dir\n\n";

print "3: このスクリプトの、1階層上の、lib というディレクトリ名を作成する。\n";
use FindBin;
my $lib_dir = File::Spec->catfile($FindBin::Bin, File::Spec->updir, 'lib');
print "\$lib_dir = $lib_dir\n\n";

(参考)FindBin

  • Perlとはテキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。
  • Linuxサーバーでのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意
  • Perlはgitopensslなど広く普及したUnix/Linuxミドルウェアの補助ツールとして採用実績あり。後方互換性とポータビリティの高さがひとつの理由と推測。
  • 大量のテキストを扱うWeb開発も得意。ロングテールSEOを意識したWebサイト、アドテクやソーシャルゲームでの50ms以内のJSONの生成など。