当前位置:  开发笔记 > 编程语言 > 正文

如何用Perl的功能给人们留下深刻的印象?

如何解决《如何用Perl的功能给人们留下深刻的印象?》经验,为你挑选了6个好方法。

我想为我的同事做一个演示,它将展示Perl可以做的一些令人惊奇的事情,这些事情会让程序员和非程序员都对自己说,"你能做到这一点吗?" 我真的很想转过头来,因为很多人都认为Perl是一种垂死的语言,但也很有趣和有趣.

我的一些想法是以下模块的演示:

Spreadsheet :: WriteExcel和Spreadsheet :: ParseExcel

WWW ::机械化

图片:: Magick

有什么建议或意见吗?

顺便说一句,我们是一家科技公司(运营数据中心),因此我的同事的计算机知识水平很高.



1> Nik Reiman..:

多年前,当我第一次学习如何编程时,我女朋友的堂兄向我展示了他写的Perl脚本,该脚本联系了一个包含所有已知卫星位置的数据库,并计算了最大物体的天桥时间,如空间站米尔.脚本在他运行的服务器上通过cron运行,它将定期运行,然后在给定对象在夜空中可见的前5分钟向他发送一个页面.当我们在城里走动时,他突然指着并说"看!",他可以引起所有人的注意,当卫星在头顶上巡航时,每个人都o and ah ah地说道.

当时我对这个剧本印象非常深刻,因为我不知道如何编写一个几乎复杂的程序.现在我有一个更好的想法,我仍然认为这是一个很好的演示,因为它展示了一些新颖的东西,可以在相对较短的时间内用语言完成,并且没什么汗水.所以我要说一些新颖或有趣的东西,并强调Perl的语言经济性和网络能力.



2> mirod..:

我相信CPAN本身就相当令人印象深刻.安装新模块的易用性是相当不错的,因为是事实,他们在那里.

然后组合模块来做很酷的事情:从几乎任何经过的数据生成RSS(或Atom),使用GraphViz ::*生成漂亮的图片(tm).

您还可以查看一些大型框架类型模块的教程,例如Catalyst或POE,它们有一些非常漂亮的东西,你可以用很少的代码做.

如果当地的文化不是太紧张,那么一些Acme ::*模块(例如Acme :: Bleach)非常聪明,肯定会让你大笑.

最后,使用XML :: Twig当然是一个单行程,它可以为您提供美元和欧元之间的当前汇率:

perl -MXML::Twig -l -e'print XML::Twig->parse( "http://www.x-rates.com")->first_elt(q{a[@href="/d/USD/EUR/graph120.html"]})->text' 

它很容易适应来自其他网站的废料数据.



3> 小智..:

向他们展示冰冻泡泡.



4> JDrago..:

向他们展示search.cpan.org(并解释CPAN的概念)后,向他们展示以下任何一项:

驼鹿

DBIx ::类

催化剂

内嵌的Java ::

内联中:C

Inline :: WSC(Windows上的Perl的JavaScript/VBScript)

成像仪

Kamaitachi(使用Moose和Danga :: Socket编写的Perl中的Flash媒体服务器)

然后用一个sort/map/grep组合(又名Schwarzian变换)来打击他们的思想,它在一行代码中比在50行C#中完成更多的工作.

向它们展示线程和分支,然后将它与在Java或C#下完成相同工作所需的相同代码进行比较.

如果他们不被Perl多年来与C#刚才引入的习语相提并论,那么我不知道该说些什么.



5> James Thomps..:

屏幕抓取,与外部程序交互以及快速解析文本文件的某种组合会让人印象深刻.squook给出的例子肯定符合要求.

另一方面,为什么不在日常工作中使用它,编写其他人使用的非常有用的工具,并向人们解释你在Perl中制作工具?这样你就可以获得有用的工作,而你工作场所的人肯定会欣赏完成工作的价值.:)



6> J.J...:

对我来说最酷的事情之一是使用Perl进行代码生成.特别是当它来到其他语言.我编写了几个小脚本来生成C++类和Java代码.

回来的时候我是一个Perl新手.我写了这段代码,它基于我们的数据库生成了模式文件.大约2个小时后,我发现我不需要为DBIx :: Class执行此操作.这不是很好的Perl代码(不要用它来投票给我.这只是一个例子),但它准确地为我生成了200个模式文件.

my @db = `mysql -u XXXXX -pXXXXX --skip-column-names -e "show databases;"`;

foreach my $db_name (@db) {
    chomp($db_name);
    my @tables = `mysql -u XXXXX -pXXXXX --skip-column-names -e "use $db_name; show tables;"`;
     $_ =~ s/\n// foreach(@tables);

    unless ( -e "$db_name.pm") {
        open(DBFILE, '>', "$db_name.pm");
        print DBFILE "package mysql::schemes::$db_name;\n";
        print DBFILE "use base qw/DBIx::Class::Schema/;\n\n";
        print DBFILE '__PACKAGE__->load_classes(qw/' . join(' ', @tables) . "/);\n\n";
        print DBFILE "1;";
        close(DBFILE);
    }
    mkdir $db_name unless ( -d $db_name or -e $db_name );
    foreach my $table_name (@tables) {
           my @columns = `mysql -u XXXX -pXXXX --skip-column-names -e "USE $db_name; desc \\\`$table_name\\\`;"`;
           $_ =~ s/\n$// foreach(@columns);

           my (@names, $primary_key);
           foreach (@columns) {
                my ($name, $type, $null, $key, $default) = split(/\t/, $_);
                chomp($default);
                push(@names, $name);
                $primary_key = $name if($key ne '');
            }

            unless ( -e "$db_name/$table_name.pm" ) {
                open(TBFILE, '>', "$db_name/$table_name.pm");
                print TBFILE "package mysql::schemes::" . $db_name . "::" . $table_name . ";\n";
                print TBFILE "use base qw/DBIx::Class/;\n\n";
                print TBFILE "__PACKAGE__->load_components(qw/PK::Auto Core/);\n";
                print TBFILE "__PACKAGE__->table('$table_name');\n";
                print TBFILE "__PACKAGE__->add_columns(qw/" . join(' ', @names) . "/;\n";
                print TBFILE "__PACKAGE__->set_primary_key('$primary_key');\n\n" unless($primary_key eq '');
                print TBFILE "1;";
                close(TBFILE);
            }
    }
}

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有