Perl现在究竟还有多少人在用、在学呢?



QUOTE:
原帖由 flw 于 2008-7-27 16:27 发表

关于这句话,我这里有个注解:

同行是冤家,害死一个算一个!

国富论?
我在学呢,呵呵
没法统计啊
上周3我很有准备用PERL写个脚本来“切字符串”的,不过后来用了60行的bash shell代替,原因是PERL手册中没教我“遍历文件内容”


bash shell代码如下:
#!/bin/bash

#Find all tablename in VIEWS files
views=$(cat $1 | awk -F " " '
{
        print $3;
}
');

for table_name in `echo $views`
do
        echo "-----------------$table_name";
        table_columns_sql=$(sed -e :a -e 'N;s/\r\n//;ta' $2 | sed -e 's/go/\n/ig' | grep -i "create table $table_name " | awk -F "\\\)lock allpages" '{print $1}' | awk -F ",\t\tCONSTRAINT" '{print $1}' | sed -e "s/create\ table\ $table_name\ (//ig");
        table_pk=$(echo $table_columns_sql | awk -F " " '{print $1}');

        #===== View ======
        table_columns_type=$(echo $table_columns_sql | sed -e 's/ , /,\n/ig' | sed -e 's/null//ig' | sed -e 's/not//ig' | sed -e '/^$/d');
        echo "CREATE OR REPLACE view $table_name as
select * from dblink('dbname=xxxx user=xxxx password=xxxx',
'select * from $table_name')
  as t1(
        $table_columns_type
);";


        #===== View insert ======
        table_columns=$(echo $table_columns_type | sed -e 's/ , /,\n/ig' | awk -F " " '{
                if(NR>1){
                        printf("|| \047,\047 || case when NEW.%s is not null then \047\047\047\047 || NEW.%s || \047\047\047\047 else \047\047\047\047\047\047 end\n\t",$1,$1)
                };
}');
        echo "CREATE OR REPLACE RULE "$table_name"_i AS
    ON INSERT TO $table_name DO INSTEAD
SELECT dblink_exec('dbname=xxxx user=xxxx password=xxxx'::text,
'INSERT INTO $table_name VALUES ('
        || case when NEW.$table_pk is not null then '''' || NEW.$table_pk || '''' else '''''' end
        $table_columns|| ');'
);
";

        #===== View update ======
        table_columns=$(echo $table_columns_type | sed -e 's/ , /,\n/ig' | awk -F " " '{
                if(NR>1){
                        printf("|| \047chrcssm=\047 || case when NEW.%s is not null then \047\047\047\047 || NEW.%s || \047\047\047,\047 ELSE \047%s,\047  end\n\t",$1,$1,$1)
                };
}');
        echo "CREATE OR REPLACE RULE "$table_name"_u AS
    ON UPDATE TO $table_name DO INSTEAD
SELECT dblink_exec('dbname=xxxx user=xxxx password=xxxx'::text,
'UPDATE $table_name SET '
        $table_columns|| ' WHERE $table_pk=''' || OLD.$table_pk || ''';'
);
";

        #===== View delete ======
        echo "CREATE OR REPLACE RULE "$table_name"_d AS
    ON DELETE TO $table_name DO INSTEAD
SELECT dblink_exec('dbname=xxxx user=xxxx password=xxxx'::text,
'DELETE FROM $table_name WHERE $table_pk=''' || OLD.$table_pk || ''';'
);
";
done
处理文本用bash+awk+sed更爽


QUOTE:
原帖由 scottsiu 于 2008-7-30 11:14 发表
上周3我很有准备用PERL写个脚本来“切字符串”的,不过后来用了60行的bash shell代替,原因是PERL手册中没教我“遍历文件内容”

不是没教 而是你没学

兄弟你悠着点 切个字符串  写60行  别累坏了

有时间建议你看看 perl语言入门 你会有意外的收获的
这bash写的太丑陋了,真的建议兄弟静下心来学习perl的文本处理
这代码写的  
估计写完后两种情况:要么很high, 很有成就感。 要么很累。
关于切字符串,用awk还不如用perl快。
辛苦你了啊。
此人疯了,鉴定完毕……