免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: vgra
打印 上一主题 下一主题

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

论坛徽章:
0
41 [报告]
发表于 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
42 [报告]
发表于 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
43 [报告]
发表于 2010-02-05 10:40 |只看该作者
没必要过度追求精简~~
不过Ray的code的确可以简化一些,偶稍微修改一下:最后强调一下:
没有use strict的 ...
兰花仙子 发表于 2010-02-04 20:52



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

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

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

论坛徽章:
0
45 [报告]
发表于 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
46 [报告]
发表于 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
47 [报告]
发表于 2010-02-05 11:27 |只看该作者
虽然 cobrawgl 和仙子已经给出了更短的代码,
但是我觉得该认输的时候就要认输,Ray001 的代码写的确实很不 ...
flw 发表于 2010-02-05 10:59



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

论坛徽章:
0
48 [报告]
发表于 2010-02-05 11:36 |只看该作者
虽然 cobrawgl 和仙子已经给出了更短的代码,
但是我觉得该认输的时候就要认输,Ray001 的代码写的确实很不 ...
flw 发表于 2010-02-05 10:59



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

论坛徽章:
0
49 [报告]
发表于 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
50 [报告]
发表于 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版。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP