Alors j'essaie d'exécuter ce code ...
Use of uninitialized value $filePath in string eq at program.pl line 19.
4 Réponses :
vide et non initialisé ne sont pas la même chose. Vous pouvez vérifier si une variable est initialisée avec l'opérateur Je suis à peu près sûr que vous vouliez dire ceci: p> défini code>, comme par exemple:
my $filePath = $ARGV[0];
Le '||' L'option n'est pas 100% la même. Il traitera le nom de fichier parfaitement légal "0" comme manquant et fournira la valeur par défaut.
J'aime: si (! DÉFINIMENT $ FILEPATH ||! Longueur $ FilePath) Code>
Edit: Comme @Andrew a souligné, ce n'est pas la même chose, car il échouera avec le nom de fichier "0" p>
aussi, au lieu de p>
si ((! défini défini $ filepath) || ($ filepath eq "")) {... p> blockQuote>
comme @mat a écrit. Vous pouvez utiliser plus simple p>
Si (! $ $ filepath) {... p> blockQuote>
qui fait exactement le même p>
Pas 100% le même. Cela traitera le nom de fichier parfaitement légal "0" comme faux.
Vérifiez simplement pour voir si $ argv [0] est défini ceci imprimera "pas de filepath spécifié! \ n" s'il n'y avait aucune ligne de commande passée. p> Le problème que vous rencontrez, est que vous définissez $ Filpath à une valeur non définie. Les avertissements se plaignent parce que vous avez ensuite essayé de comparer une valeur indéfinie à "". Les avertissements pensent que cela vaut la peine de vous dire. P> J'ai utilisé mon exemple pour montrer un moyen propre de vérifier si quelque chose est défini, mais techniquement pour cela, vous pouvez également faire: P> if(!@ARGV){
print "No FilePath Specified!\n";
}
Réponse alternative consiste à définir une valeur par défaut si elle n'est pas définie:
my $filePath = $ARGV[0] // '';
Qu'est-ce qu'il y a avec
' code> autour de l'index du tableau?