Perlを使用して現在のディレクトリを印刷する次のコードがあります。
use Cwd qw(abs_path);
my $path = abs_path($0);
print "$path\n";
しかし、ディレクトリとともにスクリプトのファイル名を表示しています。
このような:
C:\ Perl\duration.pl
C:\Perl\
のみを表示したい。
どうすればできますか?
次の各スニペットは、スクリプトのディレクトリを取得しますが、現在のディレクトリとは異なります。どちらが欲しいかは明確ではありません。
use FindBin qw( $RealBin );
say $RealBin;
または
use Cwd qw( abs_path );
use File::Basename qw( dirname );
say dirname(abs_path($0));
または
use Cwd qw( abs_path );
use Path::Class qw( file );
say file(abs_path($0))->dir;
現在の作業ディレクトリ(多くのシステムでpwd
)を取得するには、_abs_path
_の代わりにcwd()
を使用できます。
_use Cwd qw();
my $path = Cwd::cwd();
print "$path\n";
_
または、引数なしの_abs_path
_:
_use Cwd qw();
my $path = Cwd::abs_path();
print "$path\n";
_
詳細については、 Cwd docs を参照してください。
Perlファイルが入っているディレクトリをディレクトリの外部から取得するには:
_use File::Basename qw();
my ($name, $path, $suffix) = File::Basename::fileparse($0);
print "$path\n";
_
詳細については、 File :: Basename のドキュメントを参照してください。
使用する:
print($ENV{'PWD'});
しかし、私はそれがWindowsで動作しないと思う...
「$ 0」を削除するだけです
use Cwd qw(abs_path);
my $path = abs_path();
print "$path\n";
簡単な解決策の1つを次に示します。
use Cwd;
my $cwd = cwd();
print "Current working directory: '$cwd()'";
これが役立つことを願っています。
FindBin
を使用できます:
use FindBin '$RealBin';
print "$RealBin\n";
FindBin
は、Perlのインストール時にインストールされる標準モジュールです。標準のプラグマティクスとモジュールのリストを取得するには、perldoc perlmodlib
。
シンボリックリンクを使用して、スクリプトを使用しました。スクリプトはパスを解析し、パスに応じてコマンドを実行します。私は、現在のパスの正しい決定に直面しました。
以下に例を示します。
root@srv Apache # pwd
/services/Apache
root@srv Apache # readlink -f .
/services/Apache2225
Cwdモジュールの開示パス(readlink -fのアナログ) http://perldoc.Perl.org/Cwd.html
root@server Apache # Perl -e 'use Cwd; print cwd . "\n";'
/services/Apache2225
Pwdのような現在のパスを取得する必要がある場合は、$ ENV {'PWD'}を使用できます
root@srv Apache # Perl -e 'use Cwd; print $ENV{'PWD'}."\n";'
/services/Apache
ありがとうございました。