2009-08-08 5 views

Répondre

12

Cela fait essentiellement la même chose.

my @elem = "foo bar baz" =~ /(\w+)/g 

Vous pouvez également définir la variable "scalaire par défaut" $_. Pour plus d'informations, voir .


Si vous voulez seulement utiliser cette chaîne comme un tableau, vous pouvez utiliser qw().

my @elem = qw"foo bar baz"; 

Voir perldoc perlop ​ ​(Quote and Quote-like Operators).

+7

À mon humble avis, l'affectation explicite à '$ _' simplement pour utiliser l'un des idiomes implicite *' $ _' de Perl's * manque maladroitement le point de ce raccourci idiomatique. – pilcrow

+1

Je sais, je veux développer cette partie de la réponse pour montrer où cela serait utile. –

3

En outre, fendu, par exemple,

my $x = "foo bar baz"; 
my @elem = split(' ', $x); 

OU

my @elem = split(/\w+/, $x); 

etc.

+0

Je pense que vous voulez dire "' split/(\ w +)/'..." –

+3

'split '', $ x' n'est pas satisfaisant s'il y a des caractères' \ W' (autres que '\ s') dans la chaîne . 'split/(\ w +) /, $ x' vous donnera' ('', 'foo', '', 'bar', '', 'baz') 'rendant ceci un exercice inutile. –

+1

Sinan a raison, j'ai regardé en utilisant split et ce n'est pas juste pour cela. Je veux juste un tableau d'éléments correspondant à la regex. – klochner

1

Ils concept clé perl est scalaire vs contexte de liste. L'affectation d'une expression à un tableau force le contexte de la liste, tout comme une boucle while.

Ainsi, l'équivalent de la forme de bloc de chaîne # balayage est d'utiliser l'expression rationnelle avec une boucle while:

while ("foo bar baz" =~ /(\w+)/) { 
    my $word = $1; 
    do_something_with($word); 
} 
Questions connexes