我想在Perl中执行此操作:
>> "foo bar baz".scan /(\w+)/
=> [["foo"], ["bar"], ["baz"]]
有什么建议吗?
答案 0 :(得分:12)
这基本上是一回事。
my @elem = "foo bar baz" =~ /(\w+)/g
您还可以设置“默认标量”变量$_
。
$_ = "foo bar baz";
my @elem = /(\w+)/g;
有关详细信息,请参阅perldoc perlre
。
如果您只想将该字符串用作数组,则可以使用qw()
。
my @elem = qw"foo bar baz";
答案 1 :(得分:3)
另外,拆分,例如,
my $x = "foo bar baz";
my @elem = split(' ', $x);
OR
my @elem = split(/\w+/, $x);
等
答案 2 :(得分:1)
他们的关键perl概念是标量与列表上下文。将表达式分配给数组强制列表上下文,就像while循环一样。
因此,String#scan的块形式的等价物是使用带有while循环的正则表达式:
while ("foo bar baz" =~ /(\w+)/) {
my $word = $1;
do_something_with($word);
}