Je veux faire en Perl:Existe-t-il un équivalent Perl pour String.scan trouvé dans Ruby?
>> "foo bar baz".scan /(\w+)/
=> [["foo"], ["bar"], ["baz"]]
Toutes les suggestions?
Je veux faire en Perl:Existe-t-il un équivalent Perl pour String.scan trouvé dans Ruby?
>> "foo bar baz".scan /(\w+)/
=> [["foo"], ["bar"], ["baz"]]
Toutes les suggestions?
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";
À 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
Je sais, je veux développer cette partie de la réponse pour montrer où cela serait utile. –
En outre, fendu, par exemple,
my $x = "foo bar baz";
my @elem = split(' ', $x);
OU
my @elem = split(/\w+/, $x);
etc.
Je pense que vous voulez dire "' split/(\ w +)/'..." –
'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. –
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
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);
}
Ceci est destiné à accueillir une expression régulière générale, séparés par d'autres caractères arbitraires. – klochner