Affichage des propriétés des fichiers

youllla Messages postés 25 Statut Membre -  
youllla Messages postés 25 Statut Membre -
Bonjour,
Dans le but d'afficher les propriétés des fichiers contenus dans un répertoire, j'ai essayé le script suivant avec Perl:

#!/bin/perl
#use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
my $dir='../../../../home/spool/messagerie/forward';
chomp $dir;
opendir(DIR,$dir) || die "cannot open $dir $!";
while((my $filename=readdir(DIR)))
{
print("$filename\n");
my @Info = stat($filename);
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Sortie du test</title></head><body><pre>\n";
print "<b>Fichier:</b> $filename\n";
print "<b>Num\351ro de p\351riph\351rique:</b> $Info[0]\n";
print "<b>Num\351ro Inode:</b> $Info[1]\n";
printf "<b>Droits d'acc\350s:</b> %o\n", $Info[2];
print "<b>Nombre de liens au fichier:</b> $Info[3]\n";
print "<b>User-ID du propri\351taire:</b> $Info[4]\n";
print "<b>Group-ID du propri\351taire:</b> $Info[5]\n";
print "<b>Num\351ro brut du p\351riph\351rique:</b> $Info[6]\n";
print "<b>Taille du fichier:</b> $Info[7]\n";
print "<b>Date du dernier acc\350s:</b> $Info[8]\n";
print "<b>Date de la derni\350re modification:</b> $Info[9]\n";
print "<b>Date de la modification Inode:</b> $Info[10]\n";
print "<b>Taille de bloc id\351ale:</b> $Info[11]\n";
print "<b>Nombre de blocs occup\351s:</b> $Info[12]\n";
print "</pre></body></html>\n";

}
closedir(DIR);

Plusieurs erreurs de ce genre s'affichent quand je lance l'exécution :
[Wed Jun 24 10:52:33 2009] opendir.pl: Use of uninitialized value in concatenation (.) or string at opendir.pl line 22.
<b>Numéro brut du périphérique:</b>
[Wed Jun 24 10:52:33 2009] opendir.pl: Use of uninitialized value in concatenation (.) or string at opendir.pl line 23.
<b>Taille du fichier:</b>

pouvez vous m'aider pour résoudre ce problème !?!
Merci
A voir également:

4 réponses

lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

Essaie
while(defined(my $filename=readdir(DIR)))
ou
while((my $filename=readdir(DIR))) 
{ 
if ($filename){
print("$filename\n"); 
my @Info = stat($filename); 
print "Content-type: text/html\n\n"; 
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; 
print "<html><head><title>Sortie du test</title></head><body><pre>\n"; 
print "<b>Fichier:</b> $filename\n"; 
print "<b>Num\351ro de p\351riph\351rique:</b> $Info[0]\n"; 
print "<b>Num\351ro Inode:</b> $Info[1]\n"; 
printf "<b>Droits d'acc\350s:</b> %o\n", $Info[2]; 
print "<b>Nombre de liens au fichier:</b> $Info[3]\n"; 
print "<b>User-ID du propri\351taire:</b> $Info[4]\n"; 
print "<b>Group-ID du propri\351taire:</b> $Info[5]\n"; 
print "<b>Num\351ro brut du p\351riph\351rique:</b> $Info[6]\n"; 
print "<b>Taille du fichier:</b> $Info[7]\n"; 
print "<b>Date du dernier acc\350s:</b> $Info[8]\n"; 
print "<b>Date de la derni\350re modification:</b> $Info[9]\n"; 
print "<b>Date de la modification Inode:</b> $Info[10]\n"; 
print "<b>Taille de bloc id\351ale:</b> $Info[11]\n"; 
print "<b>Nombre de blocs occup\351s:</b> $Info[12]\n"; 
print "</pre></body></html>\n"; 
}
} 
--
106485010510997108
0
youllla Messages postés 25 Statut Membre
 
mercii pour votre aide, j'avais fait un autre script :

#!/bin/perl
#use warnings;
use CGI::Carp qw(fatalsToBrowser);
my $filename;
my $dir='/home/spool/messagerie/forward';
chomp $dir;
opendir(DIR,$dir) || die "cannot open $dir $!";
while((my $filename=readdir(DIR)))
{
print("\n[ $filename ]\n");
my @stats = stat("$dir/$filename");
if(scalar(@stats) == 0) {
print "\tAucune info\n";
}
else {
print "\t".join(' - ', @stats)."\n";
}

et ça marche :)
0
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Ok.

Pour l'info
if(scalar(@stats) == 0) {
Il suffit de faire le test
if( @stats == 0 ) { 

Pas besoin de la fonction scalar.
Pourquoi?

En faisant @stats==0 on traite le tableau dans un contexte scalaire.
Dans un contexte scalaire ça sera le nombre d'éléments qui sera envoyé et pas les éléments du tableau.

Tu peux même profiter de fait que 0 de point de vu boolean a la valaeur de vérité fausse.
Donc le test pourra être écrit comme ça (l'opérateur + permet le traitement dans le contexte scalaire)
if(@stats + 0) { # donc s'il y a un élément, c'est vrai
  print "\t".join(' - ', @stats)."\n"; 
}else { # sinon la valeur sera zéro, donc faux
  print "\tAucune info\n"; 
} 

0
youllla Messages postés 25 Statut Membre
 
ah oki je vois,
mercii pour les informations
0