作者charleshu (Analog Engineer)
看板Perl
标题Re: [请益] replace 可以替换指定位置的字元吗?
时间Thu Apr 15 13:26:49 2010
※ 引述《CindyLinz (尹儿)》之铭言:
: 阅读以下内容可能对心理及生理造成深远及不可恢复之影响,
: 建议你先做好心灵改革,事前请记得要戴上护眼罩,
: 事後亦要用大量清水洗眼,否则有可能......一概不负责!
: (防雷页, 现在想离开还得及..)
: 有三点邪恶版:
: $a = '4321';
: $_ = 23 for( substr($a, 1, 2) );
: 这个的结果是 4231
for( substr($a, 1, 2) ) 这行把 $_ 设定为 $a 里第1个字(从0开始算)开始2
个字的别名(Alias). 所以设定为23就改成4231了.
: 有四点邪恶版:
: $a = '4321';
: for( substr($a, 1, 2) ) {
: $a = '47531';
: $_ -= 73;
: }
: 这个的结果仍然是 4231
一样.for( substr($a, 1, 2) ) 这行把 $_ 设定为 $a 里第1个字(从0开始算)
开始2个字的别名(Alias). 把$a改成47531并不会改变这个别名.
所以此时$_为'75'
把它减73後就变成2了.
$a就1变成 '4' '2' '31' => '4231' 了.
: 有五点邪恶版:
: $a = '4321';
: for( substr($a, 1, 2) ) {
: $_ += 9999;
: $a = '46789031';
: $_ -= 67888;
: }
: 这个的结果依旧是 4231
原理同上, 自己推演一下就知道.
这些把戏蛮有趣的, 在 effective perl 这本书里还有很多.
对Hacker来说,有些惯用法蛮常被使用的.
有些可以省下很多打字时间, 但对看不懂而要维护程式的人来说就是梦靥了.
但我个人认为, Perl 本质上是一个非常好的语言, 程式好写, 速度快, 但近年来
退流行可能也是因为这些可怕的把戏, 毕竟对新人来说, 太多有字天书会造成维
护上的麻烦, 更可能菜鸟改一改产生奇怪的问题.....
要不然 perl 不用编译, 又有资源回收功能, 而且在 Script 里面应该是第一快
的, 怎麽会退流行这个快.
像 CGI 程式早年都是 perl 写的, PHP 有的功能 perl都有, 而且执行得快的多
, PHP 会後来居上, 应该是程式码维护性上的关系.
建议写 perl 的人, 看看 Perl Best Practices, 返璞归真一下, 尽量提昇程式
码的可维护性, 毕竟你建立的系统总不希望只有你才能维护, 假如你有更大的舞
台可以发挥, 但找人来维护你建立的系统总是会有问题, 那你只好永远被绑在那
里了.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.67.195.213