pws*_*seo 2 perl functional-programming map transliteration
编辑:TR ///不支持变量插值,所以我去了s/\Q$_\E//g;,而不是
或者,更有可能的是,我没有做正确的事......
我有以下代码:
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
sub strip_invalid {
my ($str, @chars) = @_;
map { $str =~ tr/$_//; } @chars;
return $str;
}
my @invalid = qw( a e i o u );
print strip_invalid("This is the super sample with vowels.\n", @invalid);
Run Code Online (Sandbox Code Playgroud)
我只想传递一个字符串strip_invalid()并通过一个tr///删除字符...我哪里出错了?(顺便说一句,使用正则表达式,它的工作原理).@invalidmap
Perl的tr功能不支持变量.
请注意,因为转换表是在编译时构建的,所以SEARCHLIST和REPLACEMENTLIST都不会进行双引号插值.这意味着如果要使用变量,则必须使用eval():
eval "tr/$oldlist/$newlist/";
Run Code Online (Sandbox Code Playgroud)