Я не наблюдаю проблему. Однако тот факт, что вы используете system
(который запускает другую оболочку для выполнения команды и, следовательно, действительно не меняет ваш каталог), может быть тем, что мешает. В противном случае консоль может остаться в неопределенном состоянии, если вы используете CTRL-C для выхода из сценария.
Вот лучший способ выполнить то, что вы хотите:
#!/usr/bin/perl
use Cwd;
use File::Spec::Functions qw( catfile canonpath );
use Win32::Console::ANSI;
use Term::ANSIColor;
local $SIG{INT} = sub { print color('reset') };
my $top = cwd;
print_contents($top);
sub print_contents {
my ($dir) = @_;
opendir my $dir_h, $dir
or die "Cannot open directory: '$dir': $!";
while ( defined (my $entry = readdir $dir_h) ) {
next if $entry =~ /^[.][.]?\z/;
my $path = canonpath catfile $dir => $entry;
if ( -f $path ) {
print "$path\n";
}
elsif ( -d $path ) {
print color('green'), $path, color('reset'), "\n";
print_contents($path);
}
}
closedir $dir_h
or die "Cannot close directory: '$dir': $!";
}