Pergunta

Em pesquisando outra pergunta que eu observou que a função stat em Perl pode tomar um dirhandle como seu argumento (em vez de um filehandle ou nome de arquivo).

No entanto não consigo encontrar qualquer exemplos de uso correto deste -. Não há nenhum no manual Perl

Alguém pode mostrar um exemplo de como usá-lo?

Foi útil?

Solução

Você usá-lo da mesma forma que você faz para um arquivo ou filehandle:

#!/usr/bin/perl
use strict;

my $dir = shift;
opendir(DIR, $dir) or die "Failed to open $dir: $!\n";
my @stats = stat DIR;
closedir(DIR);
my $atime = scalar localtime $stats[8];

print "Last access time on $dir: $atime\n";

A capacidade de utilização de estatísticas em alças de diretório acabou de ser adicionado ao redor Perl 5.10 por isso deve ser evitado se você se preocupa com a portabilidade.

Outras dicas

Você usá-lo apenas como você stat em um filehandle:

<~> $ mkdir -v foo ; perl -e 'opendir($dh , "./foo"); @s = stat $dh; print "@s"'
mkdir: created directory `foo'
2049 11681802 16877 2 1001 1001 0 4096 1228059876 1228059876 1228059876 4096 8

(Pessoalmente, eu gosto de usar File::stat conseguir boas nomeados assessores, para que eu não tenho a lembrar (ou lookup) que o quinto elemento é o UID ...)

Esteja ciente de que um se um identificador já foi usado como um filehandle, bem como um dirhandle, o status será aplicado ao arquivo, não o diretório:

$ perl -wl
opendir $h, "." or die;
open $h, "/etc/services" or die;
print "dir:".readdir($h);
print "file:".readline($h);
print stat("/etc/services");
print stat(".");
print stat($h);
close($h);
print stat($h);
__END__
dir:.
file:# Network services, Internet style

205527886633188100018274122800783211967194861209994037409640
20551515522168777410001000020480122803711512280371021228037102409640
205527886633188100018274122800783211967194861209994037409640
stat() on closed filehandle $h at - line 1.
    (Are you trying to call stat() on dirhandle $h?)

Eu uso Perl 5.10.1 no Windows (ActivePerl) e fazer estatísticas sobre um dirhandle não funciona. Mas fazer uma estatística sobre a cadeia de caminho das obras de diretório.

funciona

  my $mtime = (stat( $directory ))[ 9 ];
  print "D $directory $mtime\n";

isso não ( "A função dirfd está por implementar ...")

  my $dh;
  if( opendir( $dh, $directory ) == 0 ) {
    print "ERROR: can't open directory '$directory': $!\n";
    return;
  }
  $mtime = (stat( $dh ))[ 9 ];
  print "D $directory $mtime\n";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top