J'utilise Utilisez strict; code> en Perl et avec qui j'utilise l'instruction suivante. Global symbol "$x" requires explicit package name at *********** in line 15.
8 Réponses :
le strict code> pragma a trois parties: références strictes, strict variables et sous-marins stricts. Celui que vous rencontrez est
strict vars h3>
Ceci génère une erreur de compilation si vous accédez à une variable qui n'a pas été déclarée via
Nos code> ouutilisent vars code>, localisé viamon code> , ou n'a pas été pleinement qualifié. Comme il s'agit d'éviter des problèmes de suicide variable et des problèmes de cadrage dynamiques subtils, une variable code> locale locale n'est pas suffisamment bonne. p> blockQuote>Parce qu'il génère des erreurs de temps de compilation, votre code non-code> commencer code> au code n'a même pas de chance de courir. Vous pouvez autoriser temporairement des variables non strictes à l'intérieur d'un bloc comme dans p>
xxx pré> mais note que l'opérateur
défini par Perl est défini code> indique si une valeur est définie, non Si une variable a été déclarée. P>nous en dire plus sur votre application et nous pouvons vous donner de meilleurs conseils sur la façon de le gérer. p> p>
La partie importante est la distinction entre non déclaré et non définie.
# use strict; print "Not defined" if !defined($x);
Vous ne pouvez même pas se référer em> à une variable à moins que cela ne soit déclaré. Lorsque vous demandez my $h = peek_my (0);
exists $h->{x};
Je pense que vous mélangez des concepts "définis" et "déclarés" et "déclara".
Vous demandez "Comment vérifier si la variable est déclarée dans Perl" mais vous vérifiez si une variable est définie. Ce sont deux concepts différents. P>
en Perl si vous utilisez 'user strict' em> Vous vérifiez automatiquement toute variable Donc, dans votre test, il vous manque une déclaration préalable avant de tester la définition p> my ($x,$y, $z);
$w; # not declared (use strict will catch it and die)
$x = 0; # declared and defined BUT if you make a logic test like 'if ($x) {}' then it will be FALSE, so don't confuse testing for **'$x'** and testing for **'defined $x'**
$y = undef; # declared but not defined
$z = 1; # declared, defined, and logial test TRUE
Normalement, ce type de code ne doit pas être requis pour un programme sérieux, mais pourquoi non seulement pour le plaisir: (supposant que l'utilisation soit stricte)
#!/usr/bin/perl -l
use strict;
# if string below commented out, prints 'lol' , if the string enabled, prints 'eeeeeeeee'
#my $lol = 'eeeeeeeeeee' ;
# no errors or warnings at any case, despite of 'strict'
our $lol = eval {$lol} || 'lol' ;
print $lol;
Ma solution est
#! / usr / bin / perl -l
Vous pouvez utiliser sauf si code> , comme ceci:
use 'strict';
my $var = 'defined';
unless (defined($var)) {
print "not defined\n";
}
$var = undef;
unless (defined($var)) {
print "not defined\n";
}
Pourquoi voudriez-vous faire cela? Le code doit être déjà conscient de quelles variables et espaces de noms qu'il dispose - il ne devrait pas y avoir besoin de vérifier.
@ETher Il y a beaucoup de raisons. Il est similaire à #define <> in C. Vous voulez dire filtrer les relevés d'impression de débogage dans votre code