web-dev-qa-db-ja.com

Perlを使用して現在のディレクトリを印刷する

Perlを使用して現在のディレクトリを印刷する次のコードがあります。

use Cwd qw(abs_path);
my $path = abs_path($0);
print "$path\n";

しかし、ディレクトリとともにスクリプトのファイル名を表示しています。

このような:

C:\ Perl\duration.pl

C:\Perl\のみを表示したい。

どうすればできますか?

19
mac

次の各スニペットは、スクリプトのディレクトリを取得しますが、現在のディレクトリとは異なります。どちらが欲しいかは明確ではありません。

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;
16
ikegami

現在の作業ディレクトリ(多くのシステムで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 のドキュメントを参照してください。

42
justkt

使用する:

print($ENV{'PWD'});

しかし、私はそれがWindowsで動作しないと思う...

5
Weeb

「$ 0」を削除するだけです

use Cwd qw(abs_path);
my $path = abs_path();
print "$path\n";
3
Ashric

簡単な解決策の1つを次に示します。

    use Cwd;
    my $cwd = cwd();
    print "Current working directory: '$cwd()'";

これが役立つことを願っています。

2
Ashish Mishra

FindBinを使用できます:

use FindBin '$RealBin';
print "$RealBin\n";

FindBinは、Perlのインストール時にインストールされる標準モジュールです。標準のプラグマティクスとモジュールのリストを取得するには、perldoc perlmodlib

1
shawnhcorey

シンボリックリンクを使用して、スクリプトを使用しました。スクリプトはパスを解析し、パスに応じてコマンドを実行します。私は、現在のパスの正しい決定に直面しました。

以下に例を示します。

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

ありがとうございました。

0
Alex Ivanchenko