請注意,與tr///
,您只能使用文字字符,而不是變量。所以,tr/a-z/$i-Z/
不起作用,你必須使用tr/a-z/A-Z/
。在perldoc perlop中,您可以閱讀更多關於tr///
的信息,並且還可以找到有關插值或缺少的說明。
要將字符串轉換爲大寫字母,儘管還有其他方法。您可以使用uc
函數或正則表達式轉義序列\U
(大寫)和\L
(小寫)。例如: -
my $str = 'a';
my $uppercase = uc $str;
正則表達式:
my $str = 'abcdef';
$str =~ s/([a-z]+)/\U$1/; # $str is now 'ABCDEF'
tchrist指出[a-z]
應被寫入\p{CWU}
,其中將包括被影響的情況下,所有的字符。
更新:
如果你想創建某種動態編碼功能,我建議一個子程序,它需要的參數,並手動來回移動的字符。
sub foo {
my ($str, $num) = @_; # num is how many characters to shift the alphabet
my @in = 'A' .. 'Z';
my @out = @in[$num .. $#in, 0 .. $num-1];
my %out = map { $in[$_] => $out[$_] } 0 .. $#in;
$str =~ s#(.)# $out{$1} // $1 #eg; # if key does not exist, use org
return $str;
}
請注意,它是區分大小寫的,但您可以添加小寫字母以解決該問題。
來源
2012-05-02 23:51:20
TLP
每個'eval'之後最好測試'$ @',不是? – tchrist
是的,可能是一個好主意。 – happydave