음역

2016-06-08 2 views
1

내가 가지고있어 같은 라인이 작동하는 방법 기본적으로 c d e-a b c 변환,하지만 난 완전하지 이해음역

print "a b c" =~ tr/a-z/c-za-b/r . "\n"; 

이다.

tr/a-z/c-za-b/r 

tr는 음역을 위해 펄에 사용되는, 나를 위해 명확하고 괜찮 :

그래서,이 부분에서 봐 가지고 있습니다.

부분에서 /a-z/ 부분 a에서 z까지 모두 소문자를 선택하고, 두 번째 부분 인 /c-za-b/은 내게 수수께끼입니다. 실험을 시도했지만 어떻게 작동하는지 알 수 없습니다. 어떤 사람이 이것이 어떻게 개종하고 있는지 설명하거나 나를 좋은 설명이나 교훈으로 연결시킬 수 있습니까?

감사

+0

http://perldoc.perl.org/perlop.html#Quote-Like-Operators'tr/SEARCHLIST'에 대해 Ctrl-F를 사용하면 관련 섹션을 찾을 수 있습니다. – chilemagic

+3

* "from"목록이 있습니다 오른쪽에는 글자가 왼쪽에 있고 * "~"* 글자 목록이 있습니다. 왼쪽 목록에서 발생하는 각각의 단일 문자는 오른쪽 목록에서 해당 일에 자역된다. –

+2

만들 @MarkSetchell 그 대답하지 코멘트 – ysth

답변

7

a-z는 26 문자열 abcdefghijklmnopqrstuvwxyz로 확장됩니다.

c-za-b

는 26 문자열 cdefghijklmnopqrstuvwxyzab로 확장됩니다.

두 스트링

1. abcdefghijklmnopqrstuvwxyz 
2. cdefghijklmnopqrstuvwxyzab 

$string =~ tr/a-z/c-za-b/가 두 번째 행에 해당하는 문자에 첫 행에서 찾을 수있는 각각의 문자 변환 주어.

비슷한 표기법은 가역 rot13 인코딩을 구현하는 데 사용됩니다 :

($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 
1

당신은 그것을 이해할 찾는 혼자가 아니에요. tr //은 현대 코드에서는 거의 사용되지 않습니다. 당신은 같은 라인이있는 경우

어쨌든, 펄 발언에 :

$x=~tr/0-9a-f/a-p/; 

을 즉 약 : 그것은 tr// 때문에 반복적으로 작동하지 않습니다 좀 더 복잡한 것보다 것

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

, 그러나 이것은 당신에게 무슨 일이 일어나고 있는지에 대한 좋은 감각을 줄 것입니다.