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