Perl的tr ///没有做我想要的

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

Mar*_*ers 7

Perl的tr功能不支持变量.

请注意,因为转换表是在编译时构建的,所以SEARCHLIST和REPLACEMENTLIST都不会进行双引号插值.这意味着如果要使用变量,则必须使用eval():

eval "tr/$oldlist/$newlist/";
Run Code Online (Sandbox Code Playgroud)

(资源)