Frage

eine weitere Frage auf die Erforschung Ich stellte fest, dass die stat Funktion in Perl ein DIRHANDLE als Argument nehmen kann (anstelle eines Dateihandle oder Dateiname).

Allerdings kann ich keine Beispiele für eine richtige Verwendung dieses finden - es gibt keine in dem Perl-Handbuch

.

Kann jemand ein Beispiel zeigen, wie es zu benutzen?

War es hilfreich?

Lösung

Sie verwenden es auf die gleiche Art und Weise Sie für eine Datei oder Dateihandle zu tun:

#!/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";

Die Fähigkeit, stat auf Verzeichnis Griffe zu verwenden, wurde nur hinzugefügt um Perl 5.10, so sollte es vermieden werden, wenn Sie Portabilität kümmern.

Andere Tipps

Sie es einfach verwenden, wie Sie auf einem Dateihandle stat würde:

<~> $ 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

(Persönlich Ich mag mit File::stat schön genannt Accessoren zu bekommen, so dass ich (oder Lookup nicht merken müssen), dass das fünfte Element ist die UID ...)

Seien Sie sich bewusst sein, dass ein, wenn ein Griff je als Dateikennung sowie eine DIRHANDLE verwendet wurde, wird die Statistik in die Datei gilt, nicht das Verzeichnis:

$ 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?)

Ich benutze Perl 5.10.1 auf Windows (ActivePerl) und auf einem DIRHANDLE stat tun funktioniert nicht. Aber dabei eine Statistik über die Pfadzeichenfolge des Verzeichnisses funktioniert.

funktioniert

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

dies nicht ( "The dirfd Funktion ist nicht implementiert ...")

  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";
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top