web-dev-qa-db-fra.com

Imprimer le répertoire courant en utilisant Perl

J'ai ce code pour imprimer le répertoire actuel en utilisant Perl:

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

Mais il affiche le nom du fichier de mon script avec le répertoire. 

Comme ça:

C:\Perl\duration.pl

Je veux seulement afficher C:\Perl\.

Comment puis-je le faire?

16
mac

Chacun des extraits suivants obtient le répertoire du script, qui est différent du répertoire actuel. On ne sait pas lequel vous voulez.

use FindBin qw( $RealBin );

say $RealBin;

ou

use Cwd            qw( abs_path );
use File::Basename qw( dirname );

say dirname(abs_path($0));

ou

use Cwd         qw( abs_path );
use Path::Class qw( file );

say file(abs_path($0))->dir;
14
ikegami

Pour obtenir le répertoire de travail actuel (pwd sur de nombreux systèmes), vous pouvez utiliser cwd() au lieu de abs_path:

use Cwd qw();
my $path = Cwd::cwd();
print "$path\n";

Ou abs_path sans argument:

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

Voir le Cwd docs pour plus de détails.

Pour obtenir le répertoire dans lequel se trouve votre fichier Perl, procédez comme suit:

use File::Basename qw();
my ($name, $path, $suffix) = File::Basename::fileparse($0);
print "$path\n";

Voir le File :: Basename docs pour plus de détails.

39
justkt

Utilisation:

print($ENV{'PWD'});

Mais je pense que ça ne marche pas sous Windows ...

5
Weeb

Il suffit de retirer le '$ 0'

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

Voici une solution simple:

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

J'espère que cela aidera.

2
Ashish Mishra

Vous pouvez utiliser FindBin:

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

FindBin est un module standard installé lorsque vous installez Perl. Pour obtenir une liste des pragmatiques et modules standard, voir perldoc perlmodlib.

1
shawnhcorey

J'ai utilisé mon script dans des répertoires avec des liens symboliques . Le script analyse le chemin et exécute les commandes en fonction du chemin .. .. J'ai été confronté à la détermination correcte du chemin actuel.

Voici un exemple:

root@srv Apache # pwd
/services/Apache

root@srv Apache # readlink -f .
/services/Apache2225

Chemin des divulgations de module Cwd (analogue de readlink -f) http://perldoc.Perl.org/Cwd.html

root@server Apache # Perl -e 'use Cwd; print cwd . "\n";'
/services/Apache2225

Si vous devez obtenir le chemin actuel comme pwd, vous pouvez utiliser $ ENV {'PWD'}

root@srv Apache # Perl -e 'use Cwd; print $ENV{'PWD'}."\n";'
/services/Apache

Je vous remercie.

0
Alex Ivanchenko