免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: vgra

大家写过读过的perl项目最多有多少行代码 [复制链接]

论坛徽章:
0
发表于 2010-02-05 10:13 |显示全部楼层
my $sth = $dbh->prepare("SELECT amt_typ FROM p_loan_typ_gl_dtl WHERE func_id=? AND amt_typ=?";

放到while外


这个的确,疏忽了~

论坛徽章:
0
发表于 2010-02-05 10:23 |显示全部楼层
  1. use IO::File;
  2. use DBI;
  3. my $dbh = DBI->connect(...);
  4. for (map { (split)[1] } IO::File->new('domains.txt')->getlines) {
  5.         print "..." unless $dbh->do(...);
  6. }
复制代码
没有测试,不知道能不能用

论坛徽章:
0
发表于 2010-02-05 10:40 |显示全部楼层
没必要过度追求精简~~
不过Ray的code的确可以简化一些,偶稍微修改一下:最后强调一下:
没有use strict的 ...
兰花仙子 发表于 2010-02-04 20:52



    仙子妹妹你把我的next去掉了。我需要跳过不满足匹配的行啊。比如注释和空行等。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2010-02-05 10:59 |显示全部楼层
虽然 cobrawgl 和仙子已经给出了更短的代码,
但是我觉得该认输的时候就要认输,Ray001 的代码写的确实很不错
如果能加上 use strict 就更好了。
至于那个 next,确实写的有点不好,
应该用 next unless /................../; 这种结构更合理一些。(不习惯 unless 可以换成 if not)

如果只是追求代码短的话,cobrawgl 的方案应该很不错。
另外 Class::DBI 比 DBI 更抽象,是不是用它可以更短一些,没用过不太清楚。

论坛徽章:
0
发表于 2010-02-05 11:05 |显示全部楼层
回复 43# Ray001


    加上

  1. use IO::File;
  2. use DBI;
  3. my $dbh = DBI->connect(...);
  4. while(my $line = ($fh ||= IO::File->new('domains.txt'))->getline) {
  5.     $dbh->do ........ if($line =~ (/(^LN..)(.*),([A-Z]0[0-9][A-Z]?)=/));
  6. }

复制代码

论坛徽章:
0
发表于 2010-02-05 11:23 |显示全部楼层
#!/usr/bin/perl

## create a MARC::Record object.
use MARC::Record;
my $record = MARC::Record->new();

## add the leader to the record. optional.
$record->leader('00903pam   2200265 a 4500');

## create an author field.
my $author = MARC::Field->new('100',1,'',a => 'Logan, Robert K.',d => '1939-');
## create a title field.
my $title = MARC::Field->new('245','1','4',a => 'The alphabet effect /',c => 'Robert K. Logan.');
$record->append_fields($author, $title);
## open a filehandle to write to 'record.dat'.
open(OUTPUT, '> record.dat') or die $!;
print OUTPUT $record->as_usmarc();
close(OUTPUT);
像这样的Perl程序很难把代码变短吧?

论坛徽章:
0
发表于 2010-02-05 11:27 |显示全部楼层
虽然 cobrawgl 和仙子已经给出了更短的代码,
但是我觉得该认输的时候就要认输,Ray001 的代码写的确实很不 ...
flw 发表于 2010-02-05 10:59



    我是来学习的。还不大熟悉unless之类的perl方言,这贴里,已经从诸位高手回复中学到不少啊。

论坛徽章:
0
发表于 2010-02-05 11:36 |显示全部楼层
虽然 cobrawgl 和仙子已经给出了更短的代码,
但是我觉得该认输的时候就要认输,Ray001 的代码写的确实很不 ...
flw 发表于 2010-02-05 10:59



    ORM 在使用的时候要先做一些设置,所以对这个短程序来说,只会增加代码

论坛徽章:
0
发表于 2010-02-05 11:43 |显示全部楼层
#!/usr/bin/perl

## create a MARC::Record object.
use MARC::Record;
my $record = MARC::Record->n ...
zhumao 发表于 2010-02-05 11:23
  1. use IO::File;
  2. use MARC::Record;
  3. IO::File->new('> record.dat')->print( MARC::Record->new()->leader('00903pam   2200265 a 4500')->append_fields(MARC::Field->new('100',1,'',a => 'Logan, Robert K.',d => '1939-'), MARC::Field->new('245','1','4',a => 'The alphabet effect /',c => 'Robert K. Logan.'))->as_usmarc());
复制代码
想缩短应该是没问题的,关键是没有多大意义啊

论坛徽章:
0
发表于 2010-02-05 11:49 |显示全部楼层
本帖最后由 Ray001 于 2010-02-05 15:01 编辑
  1. #!/usr/bin/perl -w
  2. # SCRIPT: chk_cfg.pl
  3. # AUTHOR: Ray001
  4. # DATE: 2010/01/19
  5. # REV: 1.11
  6. # For Development
  7. #
  8. # PURPOSE:
  9. # 检查ycloansaccreg.prp与p_loan_typ_gl_dtl是否匹配

  10. use strict;
  11. use DBI;
  12. my $user     = "CREDIT2";    # 数据库用户名
  13. my $password = "PASS";       # 数据库用户密码
  14. my $sid      = "CMIS";       # ORACLE_SID实例名

  15. # 连接到数据库
  16. my $dbh = DBI->connect( "DBI:Oracle:$sid", $user, $password )
  17.   || die "cannot connect to Oracle:$DBI::errstr\n";

  18. # prepare查询数据库表的SQL
  19. my $sth = $dbh->prepare(
  20.     "SELECT amt_typ FROM p_loan_typ_gl_dtl WHERE func_id=? AND amt_typ=?" );

  21. # 如果打开配置文件失败, 则报错退出
  22. open CFG_FILE, "</oradata/cmis/cfg/ycloansaccreg.prp"  or  die "Can't open CFG_FILE! ($!) ";


  23. while (<CFG_FILE>) {

  24.     # 跳过不匹配的行, $1匹配交易码, $3匹配金额类型
  25.     next unless /(^LN..)(.*),([A-Z]0[0-9][A-Z]?)=/;

  26.     # 以$1 $3的值为条件, 查询数据库表
  27.     $sth->execute( $1, $3 );

  28.     # 如果在数据库中没有找到记录, 打印提示信息
  29.     print "$1 $3 not found in p_loan_typ_gl_dtl\n"
  30.       unless $sth->fetchrow_array();


  31. }

  32. $sth->finish();
  33. $dbh->disconnect();
复制代码
结合仙子、hitsubunnu、flw的建议,隆重推出1.11版。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP