10
votes

Perl - Utilisation de la valeur non initialisée?

Alors j'essaie d'exécuter ce code ...

Use of uninitialized value $filePath in string eq at program.pl line 19.


1 commentaires

Qu'est-ce qu'il y a avec ' autour de l'index du tableau?


4 Réponses :


9
votes

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 défini code>, comme par exemple: xxx pré>

Je suis à peu près sûr que vous vouliez dire ceci: p>

my $filePath = $ARGV[0];


2 commentaires

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)



0
votes

Edit: Comme @Andrew a souligné, ce n'est pas la même chose, car il échouera avec le nom de fichier "0"

aussi, au lieu de

si ((! défini défini $ filepath) || ($ filepath eq "")) {...

comme @mat a écrit. Vous pouvez utiliser plus simple

Si (! $ $ filepath) {...

qui fait exactement le même


1 commentaires

Pas 100% le même. Cela traitera le nom de fichier parfaitement légal "0" comme faux.



18
votes

Vérifiez simplement pour voir si $ argv [0] est défini xxx pré>

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";
}


0 commentaires

3
votes

Réponse alternative consiste à définir une valeur par défaut si elle n'est pas définie:

my $filePath = $ARGV[0] // '';


0 commentaires