剛剛稍早po的不對 重po一次
%replace_list可以這樣生 (我改叫%h 短一點)
@h{'a' .. 'z'} = @h{'A' .. 'Z'} = (1 .. 9, map {0} 1 .. 17);
然後replace_abc_123可以這樣寫
$output = join "", map {exists $h{$_} ? $h{$_} : $_} split //, $string;
※ 引述《Neisseria (Neisseria)》之銘言:
: 提供某一種解法,參考看看...
: 假設一個雜湊 %replace_list,裡面放的是字母和數字的對應
: 即 a=1 b=2 c=3 ...
: 寫一個函數來替換字母,在轉換前,先將字母轉小寫
: sub replace_abc_123 {
: my $string = shift;
: my $output = "";
: for my $e (split //, $string) {
: if ($e =~ /[[:alpha:]]/) {
: $output .= $replace_list{lc $e};
: }
: else {
: $output .= $e
: }
: }
: return $output;
: }
: 然後用常規表示式將要替換的地方抓出來
: 用剛寫好的函數來替換掉即可
: 完整的例子可看連結 http://pastebin.com/Cf9Pk1hV
: 參考看看囉
: ※ 引述《sosojopoor (KeiDanX)》之銘言:
: : 各位板上前輩大家好
: : 小弟我剛接觸perl有些問題想請教
: : 主要是判斷&取代的問題
: :
作者:
CindyLinz (Cindy Wang)
2014-07-02 00:58:00map {0} 1 .. 17 的部分可以寫作 (0) x 17exists $h{$_} ? $h{$_} : $_ 剛好可以寫作 $h{$_}//$_因為 %h 裡面有放的東西都不是 undef然後 join "" .. split //, $string 可以改作:$output = $string =~ s/[a-zA-Z]/$h{$&}/gr;
作者:
cutekid (可愛小孩子)
2014-07-02 08:23:00想請教: $h{$_}//$_ 是什麼意思呢 :)
作者:
abliou (愚者)
2014-07-02 14:14:00作者:
CindyLinz (Cindy Wang)
2014-07-02 17:20:00// 是看左邊有沒有 defined() 有的話用左邊, 不然用右邊
作者:
cutekid (可愛小孩子)
2014-07-03 08:05:00推 a 大筆記及 C 大 解說。謝謝二位 :)
作者:
CindyLinz (Cindy Wang)
2014-07-04 23:40:00(0) 是 list, 0 是 scalar 呀~ x 配 list 是 repeat 它0 x 17 的話是 scalar, 那是把 0 這個字接 N 次的字串