{ my %pwdrots; sub pwdrot { my $pwd = shift; my $degree = (@_ > 0) ? ((shift) % 94) : 47; if ($degree == 0) { return $pwd; } if (length($str) == 0) { return $pwd; } unless ($pwdrots{$degree}) { my $rangstr = "\\" . sprintf("%03lo",$degree+33) . "-\\176\\041-\\" . sprintf("%03lo",$degree+32); $pwdrots{$degree} = eval "sub { $_[0] =~ tr[\041-\176][$rangstr] }" } $pwdrots{$degree}->($pwd); return $pwd; } }