2012-05-01 30 views
8

Eventuali duplicati:
What does =~ do in Perl?Cosa significa = ~ significa in Perl

In un programma Perl sto esaminando (namly plutil.pl), vedo un sacco di =~ sul parser XML porzione. Ad esempio, qui è la funzione UnfixXMLString (linee 159 a 167 su 1,7 ($VERSION erroneamente dichiarati come "1.5"))

sub UnfixXMLString { 
    my ($s) = @_; 

    $s =~ s/&lt;/</g; 
    $s =~ s/&gt;/>/g; 
    $s =~ s/&amp;/&/g; 

    return $s; 
} 

Da quello che posso dire, il suo prototipo C sarebbe è (C-like) string UnfixXMLString(string s) e utilizza l'operatore =~ sul parametro (s) e quindi restituisce la stringa modificata, ma che cosa sta facendo?

risposta

17

=~ è il Perl binding operator. Viene generalmente utilizzato per applicare un'espressione regolare a una stringa; per esempio, per verificare se una stringa corrisponde a un modello:

if ($string =~ m/pattern/) { 

O per estrarre componenti da una stringa:

my ($first, $rest) = $string =~ m{^(\w+):(.*)$}; 

o di applicare una sostituzione:

$string =~ s/foo/bar/; 
+4

In particolare, è utilizzato per associare un operatore 'm //', 's ///' o 'y ///' ('tr ///') a uno scalare. I regex non sono coinvolti per l'ultimo. Può anche essere usato come '$ var = ~ $ re', che è praticamente lo stesso di' $ var = ~/$ re/'. – tchrist

3

= ~ Is l'operatore di collegamento Perl e può essere utilizzato per determinare se si è verificata una corrispondenza di espressioni regolari (vero o falso)

$sentence="The river flows slowly."; 
if($sentence =~ /river/) 
{ 
    print "Matched river.\n"; 
} 
else 
{ 
    print"Did not match river.\n"; 
}