Perl 音译

Perl 音译,perl,Perl,我得到了这样一句话: print "a b c" =~ tr/a-z/c-za-b/r . "\n"; 基本上是把一个bc转换成cde,但我不完全理解它是如何工作的 那么,让我们看看这一部分: tr/a-z/c-za-b/r tr在perl中用于音译,这对我来说很清楚 在部分/a-z/中,我们选择了从a到z的所有小写字母,第二部分/c-za-b/对我来说是个谜,我尝试过实验,但无法弄清楚这是如何工作的。有人能解释一下这是如何转换的,或者把我和一些好的解释或手册联系起来吗 谢谢a-z扩展为2

我得到了这样一句话:

print "a b c" =~ tr/a-z/c-za-b/r . "\n";
基本上是把一个bc转换成cde,但我不完全理解它是如何工作的

那么,让我们看看这一部分:

tr/a-z/c-za-b/r 
tr在perl中用于音译,这对我来说很清楚

在部分/a-z/中,我们选择了从a到z的所有小写字母,第二部分/c-za-b/对我来说是个谜,我尝试过实验,但无法弄清楚这是如何工作的。有人能解释一下这是如何转换的,或者把我和一些好的解释或手册联系起来吗

谢谢

a-z扩展为26个字符的字符串abcdefghijklmnopqrstuvwxyz

c-za-b扩展为26个字符的字符串cdefghijklmnopqrstuvxyzab

考虑到两个条件

1. abcdefghijklmnopqrstuvwxyz
2. cdefghijklmnopqrstuvwxyzab
$string=~tr/a-z/c-za-b/将第一行中可以找到的每个字符转换为第二行中的相应字符

类似的符号用于实现可逆编码:

($encoded = $original) =~ tr/a-zA-Z/n-za-mN-ZA-M/;
($encoded2 = $encoded) =~ tr/a-zA-Z/n-za-mN-ZA-M/; # now $encoded2 eq $original
a-z扩展为26个字符的字符串abcdefghijklmnopqrstuvwxyz

c-za-b扩展为26个字符的字符串cdefghijklmnopqrstuvxyzab

考虑到两个条件

1. abcdefghijklmnopqrstuvwxyz
2. cdefghijklmnopqrstuvwxyzab
$string=~tr/a-z/c-za-b/将第一行中可以找到的每个字符转换为第二行中的相应字符

类似的符号用于实现可逆编码:

($encoded = $original) =~ tr/a-zA-Z/n-za-mN-ZA-M/;
($encoded2 = $encoded) =~ tr/a-zA-Z/n-za-mN-ZA-M/; # now $encoded2 eq $original

你并不是唯一一个觉得它不可理解的人。tr//在现代代码中很少使用

无论如何,在Perl语言中,如果您有这样一行代码:

$x=~tr/0-9a-f/a-p/;
大概是:

my @in = (0 .. 9, "a" .. "f");
my @out = ("a" .. "p");
for my $i (0 .. $#in) {
    $x =~ s/$in[$i]/$out[$i]/g;
}

它比这要复杂一点,因为tr//不是迭代工作的,但这会让你对正在发生的事情有一个很好的了解。

你并不是唯一一个发现它不可理解的人。tr//在现代代码中很少使用

无论如何,在Perl语言中,如果您有这样一行代码:

$x=~tr/0-9a-f/a-p/;
大概是:

my @in = (0 .. 9, "a" .. "f");
my @out = ("a" .. "p");
for my $i (0 .. $#in) {
    $x =~ s/$in[$i]/$out[$i]/g;
}

它比这要复杂一点,因为tr//不是迭代工作的,但这应该会让您对正在发生的事情有一个很好的了解。

对tr/SEARCHLIST执行ctrl-f操作,您会发现相关部分左侧有一个从字母列表,右侧有一个到字母列表。左侧列表中出现的每个字母都被翻译成右侧列表中相应的字母。@MarkSetchell使答案不是注释对tr/SEARCHLIST执行ctrl-f,您将找到相关部分左侧有一个from字母列表,右侧有一个to字母列表。左侧列表中出现的每个字母都会被翻译成右侧列表中相应的字母。@MarkSetchell将其作为答案而不是注释