Unknown Region

プログラムでハマったエラーとその解決方法についての備忘録メモ

【Perl】FindBinを使う

以下はファイルの一覧を出力するプログラムです。

用途としては、このプログラムと同階層にあるファイルの一覧を出力したいとします。

プログラム例1(/tmp/example/hoge.pl) :

#/usr/bin/perl
  
use strict;
use warnings;
use utf8;

my @files = glob("./*");
foreach my $file (@files) {
  print($file);
  print("\n");
}

このプログラムには問題があります。

このプログラム内では相対パスを使用しているので、プログラムをどこから実行したかを考慮しなければいけません。

プログラムと同階層のファイル一覧を取得したいのに、実行した場所にあるファイル一覧が取得されてしまいますね。

 

解決方法としては、相対パスをやめて絶対パスを使うのが一番確実です。

でも配置場所が明確に決まっていないために絶対パスを記載するわけには行かないという場合も存在しますよね?

そういう時に便利なのが「FindBin」というモジュール。

これは、プログラム自体のパスを見つけてくれるものです。

先ほどのプログラムを以下の様に修正します。

プログラム例2(/tmp/example/fuga.pl) :

#/usr/bin/perl
  
use strict;
use warnings;
use utf8;
use FindBin;

my @files = glob($FindBin::Bin."/*");
foreach my $file (@files) {
  print($file);
  print("\n");
}

これでプログラムと同階層にあるファイルとディレクトリの一覧が取得できます。

ただこちらの場合は例1とは違い、出力されるファイル一覧も絶対パスになっているのでそれだけは注意しましょう。

主に設定ファイルやテンプレートファイルなどをプログラムと同階層に置きたい場合などに使えますよ!