Continuando o artigo
Trabalhando com arquivos no Perl, aqui estarei mostrando como ler conteúdo de diretórios, remover árvores de diretórios em massa, copiar, renomear etc.
Vamos iniciar lendo o conteúdo de um arquivo local:
#!/usr/bin/perl
use File::Basename;
print "analisando local\n";
@list = <*>;
@list = glob("*");
foreach (@list) {
print "$_\n";
}
Pegamos dados do usuário:
print "Qual diretório deseja ver arquivos em perl \?\n";
chomp($arquivo=<STDIN>);
Abrindo um diretório e analisando seu conteúdo:
opendir(DIR, $arquivo);
Aqui pegamos os dados de dentro de um diretório de forma simples, se quisermos retirar apenas arquivos em "Perl", usaremos com uma regex simples "@files = grep { /\.pl$/ } readdir(DIR);", desta forma dentro do array ficarão apenas os arquivos com extensão ".pl", mas no exemplo vamos listar todos os elementos do diretório escolhido pelo usuário.
@files = readdir(DIR);
Usamos sort para organizar por ordem alfabética.
@alfa=sort(@files);
closedir(DIR);
foreach (@alfa) { print "$_\n"; }
Bacana, também podemos usar para renomear um array de arquivos inteiros:
foreach $file (@NAMES) {
my $newname = $file;
change $newname
rename($file, $newname) or warn "não foi possível renomear $file para $newname: $!\n";
}
Outra coisa interessante seria fazer o Perl nos dizer o que é diretório e o que não é usando basename:
use File::Basename;
$path = '/home/Cooler/ola.pl';
$file = basename($path);
$dir = dirname($path);
print "é diretório $dir, é arquivo $file\n";
Outra coisa bacana para se usar, por exemplo, você tem que remover um diretório e os arquivos dentro, tipo o comando do Unix "rm -r", só que em Perl. Daí podemos fazer:
#!/usr/bin/perl
use File::Find qw(finddepth);
print "Qual pasta a ser deletada todo conteúdo dela sera deletado também\n";
chomp($pasta=<STDIN>);
*name = *File::Find::name;
finddepth \&killer, $pasta;
sub killer {
if (!-l && -d _) {
print "rmdir $name\n";
rmdir($name) or warn "não foi possível remover diretório $name: $!";
}
else {
print "unlink $name";
unlink($name) or warn "não foi possível remover arquivo $name: $!";
}
}
Vamos para outro exemplo mais simples e com a mesma função do anterior (remover):
use File::Path;
print "Qual diretório para remover \?\n"; chomp($pasta=<STDIN>);
foreach $dir ($pasta) {
rmtree($dir);
}
Agora só faltou o copy, vou dar um exemplo de uso dele:
use File::Copy;
copy("datafile.dat", "datafile.bak") or die "falha na copia: $!";
move("datafile.new", "datafile.dat") or die "falha na copia: $!";
Ele apenas copia um arquivo, você também pode usar outras funções.
Bem fico com o tutorial por aqui, espero ter ajudado pessoal aí do boteco.
Nenhum comentário foi encontrado.