• perl: alias a function

    日期:2009-10-20 | 分类:Coding

    sub foo {
    #do something
    }
    sub bar {
    goto &foo;
    }

    这样调用bar的话就会和调用foo完全一样,就连调用堆栈里面也没有调过bar的痕迹

    perl真是太神奇了,只要你想得出的都做得到

  • js字符转义备忘

    日期:2009-10-19 | 分类:Coding

    好吧,又是令人痛恨的js。现在用perl写个Tenjin模板库的wrapper,变量付进去,会需要到不同格式间的转换。

    sub txt2htmljs {
        my ($content) = @_;
        $content =~ s/"/"/gs;
        $content =~ s/\\/\\\\/gs;
        $content =~ s/'/\\'/gs;
        $content =~ s/(\r?\n)/\\n/gs;
        return $content;
    }


    sub txt2js {
        my ($content) = @_;
        $content =~ s/\\/\\\\/gs;
        $content =~ s/"/\\"/gs;
        $content =~ s/'/\\'/gs;
        $content =~ s/(\r?\n)/\\n/gs;
        return $content;
    }

    以上两个函数的区别在于,前一个是给模板里的html元素的js回调用的,比如onClick="foo('[== $STR =]')",这种。后一个是给模板里的纯的js用的,就比如<script>里面写的var bar='[== $STR =]'。

    我不是专业web开发者,以上还没充分测试过的,用不了请反馈给我

  • I hate js

    日期:2009-03-10 | 分类:Coding

    一个备忘, always use parseInt (str, radix), in case we meet something like '08'

    http://www.kenegozi.com/Blog/2008/07/12/int-dot-parse-parseint.aspx

  • awk中,man不能给予的一些东西

    日期:2008-01-29 | 分类:Linux

    字符串的index从1开始的,而数组的index从0开始,字符串不是数组

    关于command | getline var这种操作,man里面讲了等于没讲,因为man里面没有例子。后来看了info才恍然大悟,如果要读command的多行结果,应该是

    while ((command|getline ) > 0) {do something}

    while中的command不能被字符串和变量连接所替代,比如while (("ls "var ... 这样是不行的,只能先把"ls" var付给变量再执行while循环。后面>0是判断如果读到EOF就跳出循环。最后,一定要用close函数关闭管道。另外因为打开的pipe是通过command来标识,只能够close(comand)来关闭pipe, 如果在一个读pipe的循环里面进行递归操作的话程序是很可能要挂掉的,所以写递归的时候要避免。

    还要注意使用pipe的操作必须要在function内部完成。

    另外关于递归函数中的使用的所有局部变量都一定要声明在参数表中(局部变量声明方式可以看man),否则会有异常结果。

    关于数组的注意的问题 (摘自info):
    The order in which elements of the array are accessed by this statement
    is determined by the internal arrangement of the array elements within
    `awk' and cannot be controlled or changed.  This can lead to problems
    if new elements are added to ARRAY by statements in the loop body; it
    is not predictable whether the `for' loop will reach them.  Similarly,
    changing VAR inside the loop may produce strange results.  It is best
    to avoid such things.

    ----------

    ps: info真是个比man更好的东西,因为man实在太简短了,一页纸的东西只能充当忘掉语法时的提示,而且man没有索引,没有目录,不能全局搜索。要看man你除了猜测只能预知到手册页的名字是什么了。

    可惜的是info只有GNU才用,可惜的是我不用emacs

  • flac2mp3脚本

    日期:2007-10-17 | 分类:Coding

    我硬盘上flac比较多,但是当要把音乐放到palm上面去听的时候,自然想为SD卡省一些空间,于是写了这个批量转换的脚本。

    需要: flac、 lame ,支持通配符, 自动把处理文件名,转换后的文件放在当前目录下。

    #!/bin/bash
    if [ $# -lt 1 ]; then
    echo "Usage: $0 [-b bitrate] [file] ..."
    echo " $0 [file] ..."
    echo "Default mp3 bitrate is 128"
    exit
    fi

    if [ "$1" == "-b" ]; then
    BITRATE=$2
    START_ARG=3
    else
    BITRATE=128
    START_ARG=1
    fi
    COUNT=$START_ARG

    while [ $COUNT -lt $# ]
    do
    ls "$(eval "echo \${$COUNT}")"|awk -F. '{
    printf "flac -d -c \"%s\"|lame -b '$BITRATE' - \"%s.mp3\";", $0, $1
    }'
    let COUNT+=1
    done |/bin/bash

    ---------------

    ps: 如果某命令里有通配符的参数的话,shell会用该目录下面的文件名来替换掉有通配符的这一部分命令行。例如ls *,  实际上ls接到的参数不是一个*,  而是有n个代表文件名的参数。