it-swarm.dev

Stampa la directory corrente usando Perl

Ho questo codice per stampare la directory corrente usando Perl:

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

Ma sta visualizzando il nome del file del mio script insieme alla directory. 

Come questo:

C:\Perl\duration.pl

Voglio solo visualizzare C:\Perl\.

Come posso farlo?

16
mac

Ciascuno dei seguenti frammenti ottiene la directory dello script, che non è la stessa della directory corrente. Non è chiaro quale vuoi.

use FindBin qw( $RealBin );

say $RealBin;

o

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

say dirname(abs_path($0));

o

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

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

Per ottenere la directory di lavoro corrente (pwd su molti sistemi), è possibile utilizzare cwd() anziché abs_path:

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

O abs_path senza argomento:

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

Vedi i documenti Cwd per i dettagli.

Per ottenere la directory, il tuo file Perl si trova dall'esterno della directory:

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

Vedi il File :: Basename doc per maggiori dettagli.

39
justkt

Uso:

print($ENV{'PWD'});

Ma penso che non funzioni su Windows ...

5
Weeb

Basta rimuovere "$ 0"

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

Ecco una soluzione semplice:

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

Spero che questo ti possa aiutare.

2
Ashish Mishra

Potresti usare FindBin:

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

FindBin è un modulo standard che viene installato quando installi Perl. Per ottenere un elenco di pragmatica e moduli standard, vedere perldoc perlmodlib.

1
shawnhcorey

Ho usato il mio script in dirs con collegamenti simbolici. Lo script analizza il percorso ed esegue i comandi a seconda del percorso. Mi sono trovato di fronte alla corretta determinazione del percorso corrente.

Ecco un esempio:

[email protected] Apache # pwd
/services/Apache

[email protected] Apache # readlink -f .
/services/Apache2225

Percorso di divulgazione dei moduli Cwd (analogo a readlink -f) http://perldoc.Perl.org/Cwd.html

[email protected] Apache # Perl -e 'use Cwd; print cwd . "\n";'
/services/Apache2225

Se hai bisogno di ottenere il percorso corrente come pwd, puoi usare $ ENV {'PWD'}

[email protected] Apache # Perl -e 'use Cwd; print $ENV{'PWD'}."\n";'
/services/Apache

Grazie.

0
Alex Ivanchenko