2017-02-23 1 views
0

J'essaie de vérifier si un répertoire existe dans un système UNIX avec Perl.Vérifier si un répertoire existe avec Perl

while (my @row = $sth->fetchrow_array) { 
    my $id = $row[0]; 
    my $hash = $row[1]; 
    my $direction = '/home/users/' . $hash 

    if(-d $direction){ 
     print "$direction exists"; 
    } 

} 

Mais je reçois cette erreur:

Global symbol "$direction" requires explicit package name at Perl.pl line 31. syntax error at Perl.pl line 31, near "){" syntax error at Perl.pl line 35, near "}" Execution of Perl.pl aborted due to compilation errors.

ligne 31 dans ce cas est la suivante:

if(-d $direction) 

Toutes les idées?

+4

Bon travail en utilisant 'strict'! :) – simbabque

Répondre

5
my $direction = '/home/users/' . $hash 

Il manque un point-virgule à cette ligne, provoquant une erreur de compilation.

4

Si vous obtenez une erreur de syntaxe au début du bloc (near ") {") d'un if, unless, while, until, for, foreach ou déclaration when, vérifier si la déclaration précédente manque son point-virgule (;).

De même, si vous obtenez une erreur de syntaxe au point-virgule (near "<something>;") d'un style C pour la déclaration (for (...; ...; ...;) { ... }), vérifier si la déclaration précédente manque son point-virgule (;).


Si vous voulez dire écrire

f(); 
if (g()) { h() } 

mais vous écrivez

f() 
if (g()) { h() } 

Perl pense que vous manquez un point-virgule avant le bloc

f() 
if (g()) HERE { h() } 

parce que ce qui suit est valide Perl:

f() if (g())