我想为我的同事做一个演示,它将展示Perl可以做的一些令人惊奇的事情,这些事情会让程序员和非程序员都对自己说,“你能做到这一点吗?”我真的很想转过头来,因为许多人都认为Perl是一种垂死的语言,但也很有趣和有趣。
我的一些想法是以下模块的演示:
有任何建议或意见吗?
BTW我们是一家科技公司(运营数据中心),因此我的同事的计算机知识水平很高。
答案 0 :(得分:19)
多年前,当我第一次学习如何编程时,我女朋友的堂兄向我展示了他写的Perl脚本,该脚本联系了包含所有已知卫星位置的数据库,并计算了最大物体的天桥时间,如米尔空间站。该脚本在他运行的服务器上通过cron运行,它将定期运行,然后在给定对象在夜空中可见的5分钟之前向他发送一个页面。当我们在城里走动的时候,突然指着并说“看!”,他可以引起所有人的注意,当卫星在头顶上巡航时,每个人都o and ah地说道。
当时我对这个剧本印象非常深刻,因为我不知道如何编写一个几乎复杂的程序。现在我有一个更好的想法,我仍然认为这是一个很好的演示,因为它展示了一些新颖的东西,可以在相对较短的时间内用语言完成,并且没什么汗水。所以我要说一些新颖或有趣的东西,并强调Perl的语言经济性和网络能力。
答案 1 :(得分:10)
我相信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'
很容易使其适应其他网站的废品数据。
答案 2 :(得分:8)
向他们展示Frozen Bubble。
答案 3 :(得分:6)
在向他们展示search.cpan.org(并解释CPAN的概念)之后,请向他们展示以下任何内容:
然后使用sort / map / grep组合(又名Schwarzian Transform)吹嘘他们的思想,这些组合在一行代码中比在50行C#中完成更多工作。
向他们展示threads和forks,然后将其与在Java或C#下完成相同工作所需的相同代码进行比较。
如果他们不被Perl多年来与C#刚刚介绍相同的习语所迷惑,那么我不知道该说些什么。
答案 4 :(得分:5)
屏幕抓取,与外部程序交互以及快速解析文本文件的某种组合会让人印象深刻。 squook给出的例子肯定符合要求。
另一方面,为什么不在日常工作中使用它,编写其他人都使用的非常有用的工具,并向人们解释你在Perl中创建了这些工具?这样你就可以获得有用的工作,而你工作场所的人肯定会欣赏完成工作的价值。 :)
答案 5 :(得分:5)
对我来说最酷的事情之一是使用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);
}
}
}
答案 6 :(得分:4)
我总是说同样的话,但为了向人们展示CPAN的用处,我会向他们展示将英文文本解析为其组成句子的问题。
提出这个问题的智能观众可能会说“只是完全分开”。然后边缘案例和问题将开始发生。各种其他地方都出现了句号;句子以问号和惊叹语结束,三个尾随句号......完全停止或者!要么 ?其次是空间,但不行,因为它可能会跟随EOF等等。
如果你准备了一些包含所有边缘情况的棘手文本,你只需指向一个例子,就可以击落所有他们提出的解决方案。然后你会用Lingua :: En :: Sentence解析它。
从某种意义上来说,它并不是华而不实,但它显示了一个模块的力量,这些模块是由那些经历过现在刚刚发生在你的观众身上的所有问题的人们编写的,并解决了这些问题。
答案 7 :(得分:3)
这是在perl for win32 http://www.unix.gr/FLOSSeavesDrop.exe
中完成的这是一个远程屏幕审核辅助工具。在Windows PC上运行它,然后您只需一个Web浏览器即可监控其主显示屏。将您的浏览器定位在端口42000的PC IP上
答案 8 :(得分:3)
我认为write macros to manipulate the Windows Clipboard能够令人印象深刻。它具有各种可能性,并且可以从任何可以剪切/粘贴文本的Windows应用程序中为您提供Perl的强大功能。
答案 9 :(得分:3)
使用单行显示复杂数据操作,例如解析Web服务器日志和404错误,然后使用另一个oneliner从HTML文档集合中删除损坏的链接......
我曾经为一组长期系统管理员教过Perl研讨会,当他们看到如何使用模块化和数据结构等真正的编程技巧来改进他们的shell脚本时,他们看到了最大的价值。与他们已经知道的事物保持连续性。在Windows环境中,我将演示操作大型文件结构,权限和注册表,因为每个人总是需要这样的东西,而Perl比批处理文件等更强大。
答案 10 :(得分:2)
如果你想使用Image::Magick,你可以做一个快速的脚本,可以将常规图片变成ASCII艺术。这将是一个相当快速的脚本。应用sobel operator,然后将生成的亮度转换为ASCII值。我实际上是用Python完成的:example。
答案 11 :(得分:1)
首先想到:App::Asciio(see a screencast)
第二个想法:如果没有小而紧的情况,很难演示。你可以借用别人来展示Perl的优雅,而不是发明它们。
一种选择是Microsoft Scripting Games的解决方案。 ActiveState的Jan Dubois提供了solutions with commentary,你可以使用/ adapt。 (就个人而言,我发现我的许多解决方案都占用了更少的代码,所以你可能想要编辑它们并使Perl看起来更优雅。)
另一种选择可能是Randal Schwartz's columns。那里有一些宝石。 (例如Fingering myself with Twitter)
至于应用程序,Perl::Critic非常棒。和ack一样。
答案 12 :(得分:1)
我认为这里的大多数答案都不会让任何人惊叹,特别是技术人群。他们可能对Perl可以做到这一点感到惊讶,但他们不会对你能完成任务感到惊讶。然而,即使他们对你能做到这一点并不感到惊讶,他们也可能会感到惊讶,你可以用多快的代码来完成它。
如果你正在寻找让他们惊叹的东西,你必须弄清楚他们认为在他们的工作中有什么困难,看看Perl是否能让它变得非常简单。我发现人们往往不关心语言是否可以做一些他们不感兴趣的事情。可以说,给Perl打动任何人都会给任何其他领域的人留下深刻印象:你必须了解他们他们会留下什么印象。你必须了解你的观众。
Perl实际上没有任何特殊功能可以让它做任何其他语言也可以做的事情。但是,Perl结合了许多您通常在同一编程语言中找不到的功能。
我印象深刻的大部分内容几乎与语言无关:
尽管体系结构存在差异,但仍有一个代码库在几百个不同的平台上运行。
Perl的CPAN在其他语言中仍然是无与伦比的(这真的令人难过,因为对其他语言来说同样容易做到这一点)。
测试文化确实提高了Perl编程的门槛,并且有很多工作可以解决平台依赖性,跨模块问题等问题,而原始开发人员不需要做太多工作。
答案 13 :(得分:0)
在轻浮和有趣的一面,Damian Conway进入第三次混淆的Perl比赛,SELFgol执行了4项任务
* Its a quine (when executed, prints an exact copy of itself)
* Turns other programs into quines
* Plays Conway's Game of Life
* Animates a marquee banner
所有这些都在1000个以下的字符中。非常有趣。
答案 14 :(得分:0)
如果您在IT中心,可能有许多计算机 周围...... mini computers,mainframes,个人电脑等
一个脚本如何发布并获取有关这些机器的某些信息,这些信息是您的IT人员所需要的,并以某种HTML格式提供良好的服务。
很久以前,我有15台基于TCP / IP的服务器为各种客户端做了一些事情。 我整理了一个Perl脚本,它为每个服务器提取了参数,并且 将此信息插入到新的Excel电子表格中,每个服务器一个选项卡。然后将它放在文件服务器上,每个人都可以检查它。它为支持服务器的人节省了大量时间。
环顾四周,通过减少手工苦差事,可以让生活更轻松。我认为这是你最好的选择。
答案 15 :(得分:0)
由于大多数编程语言在快速 - 可以 - 实现 - 某个级别上具有相当的可比性,或许您可以通过Perl平台的可靠性和价值来“惊叹”它们吗?以下是some interesting statistics关于Perl分布和CPAN模块的测试结果。 CPAN也是一个惊人的创作,其相关的文档,搜索,审查,注释和错误跟踪网站。 CPAN Testers绝对是锦上添花:多个平台和Perl版本的测试人员集合。
答案 16 :(得分:0)
我最喜欢的Acme模块是Acme :: Eyedrops和Acme :: Bleach。适合浅色浮雕。