Perlゼミ

  1. Perl
  2. モジュール
  3. here

File::Spec - OSに依存しないファイル名を作成

File::Specモジュールを使用すると、ファイル名に対して移植性のある処理を行うことができます。たとえばOS固有のファイル名の区切り文字を使ってファイル名を作成したりすることができます。

# モジュールの読み込み
use File::Spec;

File::Specのメソッドはクラスメソッドとして実装されており次の形式で呼び出します。

# クラスメソッド呼び出し
File::Spec->$method;

メソッド

catfile

個々のパーツからファイル名を作成するにはcatfileを使用します。$fileはWindowsの場合は「xxx\yyy\zzz」、Unixの場合は「xxx/yyy/zzz」になります。OS固有の区切り文字がファイル名の作成に使用されます。

# ファイル名の作成
my $file = File::Spec->catfile('xxx', 'yyy', 'zzz');

またディレクトリ名とファイル名を連結するのに利用できます。ディレクトリ名の末尾に「/」や「\」などの区切り文字が存在しているかどうかを意識する必要がありません。

# ディレクトリ名とファイル名を連結
my $dir = 'xxx/yyy/';
my $file = 'zzz';

my $file_abs = File::Spec->catfile($dir, $file);

splitdir

ファイル名を個々のパーツに分解するにはsplitdirを使用します。@partsは('xxx', 'yyy', 'zzz')になります。

# ファイル名を分解
my @parts = File::Spec->splitdir('xxx/yyy/zzz');

File::Specのテクニック

Windows上でも区切り文字「/」でファイル名を作成したい場合があります。これを実現するにはFile::Spec::UnixをFile::Specの代わりに使用します。

# ファイル名を「/」で連結
use File::Spec::Unix;
my $file = File::Spec::Unix->catfile('xxx', 'yyy', 'zzz');

補足

標準関数のopen関数等はUnixの区切り文字「/」でも、Windowsの区切り文字「\」でも正しく動作します。ですので単にファイルオープンをすることが目的であればUnixの区切り文字をWindowsの区切り文字に変換する必要はありません。

関連記事

Perlの書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「今日も元気だ、Perlで元気。
ゆとりあるITエンジニアライフのために
Perl情報を前向きに発信中!」

Twitter
フォロー、いいね、リツート、コメント歓迎

Youtube

チャンネル登録、いいね、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

木本システム株式会社
ご紹介キャンペーン実施中です。契約金額の10%をご紹介料としてお支払い。

(例)30万円のシステム開発委託契約が、1年続いたら、36万円がもらえる!!!