2009-06-11 9 views
1

Que fait cette expression dans la programmation Perl?

$variable =~ /^\s*$/; 

Répondre

16

C'est la recherche d'un début de ligne (^), suivi de zéro ou plusieurs espaces (\ s *) caractères, suivi d'une fin de ligne ($).

Essentiellement à la recherche de lignes vides/vides.

Je me attends l'expression à utiliser quelque chose comme:

if ($v =~ /^\s*$/) { 
    # found a blank line 
} 

afin d'effectuer la vérification et une action suivante.

+0

L'expression "tout nombre" est un peu vague, je dirais zéro ou plusieurs espaces à la place. –

+0

J'ai modifié pour être un peu plus explicite –

1

Rien, puisque vous n'assignez pas le résultat de cette opération à une variable, et qu'il n'a aucun effet secondaire que vous êtes susceptible de tester.

Cependant, si vous avez dit

if ($variable =~ /^\s*$/) 
{ 
    print "something"; 
} 

Vous serait répondre à la question:

Est-ce que la valeur dans la variable consistent en une ligne vide ou une ligne composée de rien d'autre que des caractères non impression espaces blancs tels que espaces et onglets?

+0

true alex, l'instruction réelle est dans une boucle qui lit les données du fichier et a la condition next if ($ variable = ~/^ \ s * $ /); – swapnil

+0

Dans ce cas, cela signifie "sauter des lignes vides dans le fichier" –

+2

Alex, techniquement ce n'est pas tout à fait correct. La recherche Regex en Perl a un certain nombre d'effets secondaires, même si vous n'attribuez le résultat à aucune variable. Par exemple, la variable $ & détient la dernière correspondance, donc, on peut l'utiliser sur la ligne suivante, comme ceci: if (defined $ &) {...} –

1

=~ est un opérateur de correspondance.

L'instruction renvoie true si $ variable ne contient que des espaces ou est simplement vide.

Il vérifie simplement si la chaîne est vide ou non.

1
if ($variable =~ /^\s*$/) 

est le même que

unless ($variable =~ /\S/) 

ou

if ($variable !~ /\S/) 
Questions connexes