Ruby中是否存在与String.scan等效的Perl?

时间:2009-08-08 00:21:35

标签: regex perl

我想在Perl中执行此操作:

>> "foo bar baz".scan /(\w+)/
=> [["foo"], ["bar"], ["baz"]]

有什么建议吗?

3 个答案:

答案 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";

请参阅perldoc perlop ​ ​( Quote and Quote-like Operators )

答案 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);
}