我知道这是一个非常简单的问题,但我真的没有谷歌搜索它。 =(
我有这样的事情:
$a =~ s/(\w*)/--word was here--/g;
我想在日志文件中添加更换的单词。
aa 123 bb 234 cc
→--word was here-- 123 --word was here-- 234 --word was here--
这没关系,但我想记住aa
,bb
和cc
并写入日志文件。我该怎么办?
实际上我有一个链接删除脚本,但我需要记住删除了哪些链接。我试图为你简化我的任务但是让它更难理解 - 抱歉。
答案 0 :(得分:4)
您可以使用e
修饰符来评估右侧作为表达式:
$a =~ s/(\w*)/log_it($1), ""/ge;
答案 1 :(得分:0)
以下将所有捕获的单词存储到数组中:
use strict;
use warnings;
use Data::Dumper;
my $s = 'cat dog';
my @words;
while ($s =~ s/(\w+)//) {
push @words, $1;
}
print Dumper(\@words);
__END__
$VAR1 = [
'cat',
'dog'
];
更新:现在您已添加输入和输出数据,看起来您想要排除数字。在这种情况下,您可以使用[a-zA-Z]
代替[\w]
。
答案 2 :(得分:0)
您可以循环而不是/g;
:
my $string = "xxx ; yyy ; zzz";
my @replaced;
while ($string =~ s/(\w+)//) { push @replaced, $1 };
print join(",",@replaced);
# OUTPUT: xxx,yyy,zzz
请注意\w
是WORD字符,而不是字母字符,因此它也会匹配数字0-9。
如果您只想匹配字母,请使用[[:alpha:]]
类