Si tu avais utilise les directives
use strict;
use warnings;
en tête de fichier, tu en aurais une idée.
"C:\temp"
on trouve un \t dans la chaine qui va être interprété comme un tab car c'est entre double quotes.
Il va falloir faire
'C:\temp'
avec des simples quotes, ou
"C:\\temp"
avec des doubles quotes et un \ doublé pour être interprété comme un \
Une fois ceci fait, tu vas avoir comme résultat 0...
Parce que si tu lis la doc, tu vois que quand on a un nom de répertoire, on ne peut pas l'utiliser directement avec les fonctions -s, -e, etc, contrairement aux noms de fichier.
Donc le test renvoie faux, ie 0.
La doc dit qu'il faut lui passer un dirhandle.
on le fait donc:
use strict;
use warnings;
my $file = 'C:\Temp';
opendir(my $dh, $file) || die "can't opendir $file: $!";
my $taille = -s $dh;
closedir($dh);
print $taille;
et la on a comme résultat
> The dirfd function is unimplemented at dsiz.pl line 7.
Bref -s n'est pas implémentée pour renvoyer la taille des répertoires (au moins sous win32) et donc cette approche ne marche pas.
Donc on fait a la main le parcours récursif du répertoire et on incrémente la taille avec celle de chaque fichier trouvé:
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
my $dir = 'C:\Temp';
my $size = 0;
find( sub { $size += -f $_ ? -s _ : 0 }, $dir );
print $size, "\n";
find (du module File::Find) fait ceci avec l'appel find( sub { $size += -f $_ ? -s _ : 0 }, $dir):
On part de $dir et on parcourt récursivement le répertoire.
Pour chaque fichier ou répertoire trouvé, on appelle sub { $size += -f $_ ? -s _ : 0 } dessus (le nom du fichier ou répertoire est passé dans la variable $_ par find)
-f $_ ? -s _ : 0, c'est la même chose que -f $_ ? -s $_ : 0, ça teste si on a un fichier (-f), si oui, ça renvoie sa taille (-s), et 0 sinon.
donc $size += -f $_ ? -s _ : 0 va ajouter la taille du fichier courant (si c'est un fichier) lors du parcours récursif
Et donc le tout somme les tailles de tous les fichiers rencontrés lors du parcours récursif.
Autre méthode, si on est sous Windows (et qu'on utilise pas le script sous un autre OS), utiliser le module Win32::DirSize
A+,
---------------
There's more than what can be linked! -- Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻