Re: [問題] 判斷與取代

作者: AntaresStar   2014-07-01 22:04:29
剛剛稍早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:00
map {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
樓上不介意的話,可以看看小弟的筆記 http://goo.gl/JBkKQW
作者: CindyLinz (Cindy Wang)   2014-07-02 17:20:00
// 是看左邊有沒有 defined() 有的話用左邊, 不然用右邊
作者: cutekid (可愛小孩子)   2014-07-03 08:05:00
推 a 大筆記及 C 大 解說。謝謝二位 :)
作者: AntaresStar   2014-07-03 16:43:00
括號0真的很微妙 我早先試是用0 x 17就不行
作者: CindyLinz (Cindy Wang)   2014-07-04 23:40:00
(0) 是 list, 0 是 scalar 呀~ x 配 list 是 repeat 它0 x 17 的話是 scalar, 那是把 0 這個字接 N 次的字串

Links booklink

Contact Us: admin [ a t ] ucptt.com