Comment puis-je définir une valeur par défaut pour une variable Perl?
Je suis complètement nouveau pour Perl. J'avais besoin d'utiliser un module externe HTTP::BrowserDetect. J'ai été le tester un peu de code et essayé d'obtenir le nom du système d'exploitation de os_string méthode. Donc, j'ai simplement initialisé l'objet et créé une variable pour stocker la valeur renvoyée.
my $ua = HTTP::BrowserDetect->new($user_agent);
my $os_name = $ua->os_string();
print "$user_agent $os_name\n";
il y a certains agents utilisateurs qui ne sont pas de l'utilisateur du navigateur agents afin qu'ils ne pas obtenir n'importe quelle valeur de os_string. J'obtiens une erreur Use of uninitialized value $os_name in concatenation (.) or string
Comment dois-je traiter de tels cas, lorsque l' $nom_système_exploitation n'est pas initialisé, car la méthode os_string retourne undef (c'est ce que je pense qui se passe à partir de la lecture du module code source). Je suppose qu'il doit être un moyen de donner une valeur par défaut de la chaîne, par exemple, Pas d'OS dans ces cas.
OriginalL'auteur sfactor | 2010-10-18
Vous devez vous connecter pour publier un commentaire.
Si
$ua->os_string()
est falsy (ie:undef
, zéro, ou la chaîne vide), puis la deuxième partie de la||
expression sera évaluée (et sera la valeur de l'expression).OriginalL'auteur cHao
Veuillez noter: l'original de la réplique de l'approche (
$var = EXPRESSION || $default_value
) permettrait de produire de la valeur par défaut pour TOUT "Perl fausses valeurs" retourné à partir de l'expression, par exemple, si l'expression est une chaîne vide, vous utilisez la valeur par défaut à la place.Dans votre exemple, c'est probablement la bonne chose à faire (nom du système d'exploitation ne doit pas être une chaîne vide), mais dans le cas général, il peut être un bug, si ce que tu voulais, c'était uniquement utiliser la valeur par défaut au lieu de
undef
.Si vous veux seulement éviter
undef
valeurs, mais pas la chaîne vide ou des zéros, vous pouvez le faire:Perl 5.10 et plus tard: utiliser le "défini-ou de l'exploitant" (
//
):Perl 5.8 et antérieures: l'utilisation d'un opérateur conditionnel parce que définis-ou n'était pas encore disponible:
Beaucoup plus de regard en profondeur sur le sujet (y compris des détails sur
//
) sont de brian d foy post ici: http://www.effectiveperlprogramming.com/2010/10/set-default-values-with-the-defined-or-operator/||
approche. Trouvé le problème avant ce post, mais ne savent pas à propos de la "définies " ou" opérateur. Apprendre quelque chose de nouveau avec Perl tous les jours.OriginalL'auteur DVK
Vous êtes à la recherche pour
défini
?OriginalL'auteur dvhh