对Peteris Krumins的采访

Peteris Krumins是一位Perl作者、初创企业创始人以及全能型黑客。他还经营着流行的博客CatOnMat。
您非常忙碌;经营catonmat、Browserling并出版书籍。您的秘诀是什么?我只是疯狂地工作。这几乎就是我做的所有事情!我是一个列表人;我在catonmat上最近的一篇帖子就是关于我是如何工作的:我使用Google日历来跟踪最重要的任务;采访、付款、重要事件,这类事情。然后我还使用待办事项列表,实际上是为我的每个项目创建了几个待办事项列表 - Browserling、Testling、书籍、博客帖子、阅读清单,等等。这里是示例。
我们谈论这个是因为您以编写Perl的一行脚本而闻名。您是如何涉足这个领域的?当时有个家伙,叫Eric Pement,他在一个名为“awk1line.txt”的文件中收集了数百个Awk的一行脚本,并在大约10年前在UseNet上发布了它。所以我找到了他的文件,它非常有趣。我浏览了他所有的脚本,并学习了Awk。然后我发现他也为Sed(《sed1line.txt》)做了同样的事情,我浏览了它并学习了Sed。这激发了我为Perl创建自己的文件,perl1line.txt,一切从这里开始。
我听说您的帖子“Perl One Liners Explained”有大约50万次点击量?这是一个由八篇单独帖子组成的系列文章。现在所有帖子加起来大约有80万。
哇!这对您来说是个异常值吗?它让您觉得对这个话题的兴趣很大吗?那时候我早就写了perl1line.txt。我按照Eric Pement在文件中使用的结构写了八篇博客帖子;例如,他有一个名为“如何在Awk中实现行间距”的部分,所以我写了一篇名为“如何使用Perl一行脚本实现行间距”的帖子,等等。
您的Perl One Liners书籍最初是自出版的,然后被No Starch Press选中。这是怎么发生的?这太神奇了。我收到了来自No Starch Press的Bill的一封电子邮件,他问我是否想要将我的自出版书籍变成一本真正的书。我说“是的!”然后我们就把它出版了。这里是结果 - Perl One Liners书籍。
新的No Starch Press版本增加了30多页的内容,No Starch Press在这方面帮了您什么忙?是的,我们拿出了原始文本,主要通过添加更多示例来改进它。我们对大多数一行脚本都添加了示例。我们还添加了一个关于在Windows上运行Perl的章节。
我想问您关于这个的。这似乎是一个在其他地方没有得到充分探讨的主题?这太难写了。我必须测试所有的一行脚本在PowerShell和命令行(cmd.exe)上是否工作,找到所有的解决方案,处理特殊符号,这非常具有挑战性。
这是否是No Starch Press鼓励的章节? 并非如此。我也在使用Windows,它是我的主要工作站,尽管我也有一些Linux服务器,我通过ssh进入它们。有时我需要在Windows上运行Perl单行脚本,所以我认为很多读者会对如何在Windows上运行这些单行脚本感兴趣。我们花了大约一个月的时间来写这个章节,因此它使书推迟了大约一个半月。这非常具有挑战性,写作也很困难,但这对许多Windows用户应该有很大帮助,因为它可能是Windows上运行Perl命令行的最佳指南。
我认为很多读者会对如何在Windows上运行这些单行脚本感兴趣
你会在Windows上使用Unix工具而不是PowerShell吗? 嗯,我使用Windows XP,没有PowerShell。我使用Cygwin,但有时我不想要使用它时,我直接运行win-bash中的bash.exe。我的设置是将Linux服务器通过Samba挂载为虚拟驱动器。所以如果我要进行严肃的编辑,我会把文件扔到共享驱动器上,然后ssh到我的Linux服务器,这样我就不必在Windows上使用那么多Linux工具。
你的书中充满了有趣的命令行快捷键和隐藏功能。你有没有最喜欢的Perl单行脚本或代码技巧? 我喜欢那些像谜题一样的单行脚本——你不能只通过看它们来理解它们。你必须尝试它们,看看它们做什么。例如,一个正则表达式像“/[ -~]/”很有趣,它匹配从空格到波浪号的每个可打印ASCII字符。
另一个我喜欢的单行脚本是没有代码的:“perl -00pe0”,用于段落抓取。
你是怎么发现这个的?我认为它甚至没有在perlrun中记录。 我不知道我是怎么想出这个的。我记得在#perl freenode IRC频道上的某次经历。我在写书的时候经常在那里向人们寻求建议。可能是有人告诉我,或者我自己发现了它,但这是很有趣的。
你还写了关于Sed和Awk的内容。如果你知道Perl单行脚本,你需要学习Sed或Awk吗? 不需要。但有时当你编写Perl单行脚本时,等价的Awk/Sed单行脚本可能会更短。例如,在Awk中引用一行上的第五个单词是“$5”,但在Perl中是“$F[4]”,此外你还需要打开自动分割并使用一大堆其他命令行参数。
你使用什么文本编辑器/IDE来编写Perl代码? 我使用Vim。我有一大堆自定义和快捷键。在我的网站上有一系列文章,名为“你应该知道的Vim插件”,涵盖了这些内容。我最喜欢的插件之一是“surround.vim”——如果你有一个单引号字符串,并想将其改为双引号,你输入:cs’”它就会改变。你可以更改括号和许多其他围绕的内容。另一个我喜欢的插件是“matchit.vim”,它扩展了Vim中shift + F5 (%)括号匹配到匹配HTML标签和if/then/else语句以及其他结构。我的一些其他最爱包括“snipmate.vim”用于代码片段,“ragtag.vim”用于处理HTML标签,以及“nerd_tree.vim”用于在Vim中浏览文件。
关于配色方案,你有没有最喜欢的? 我并不关心配色方案——Vim会着色代码,但我不改变它。我也不关心编程字体。字体只需是等宽的就可以了。
您之前也写过关于EMACS的文章。为什么您坚持使用Vim而不是其他工具呢? 我曾经在这家公司工作过,我以为第一天就会使用EMACS(作为学习的方式)并看看效果如何。几周后我回到了Vim。我必须学习很多新的快捷键组合,这对我的生产力造成了伤害。
当我用C和C++编程时,我使用Visual Studio。使用Visual Studio最好的地方是,如果忘记了某个命令或方法,我可以使用IntelliSense快速查找。
除了单行脚本,您是否开发Perl应用程序或模块? Perl是我编写快速工具的首选编程语言,例如:从YouTube上传/下载视频,或解析HTML页面。我在这方面非常快,而且有那么多模块可以帮忙——在其他语言中我无法如此高效。
您是否使用过像Perl::Critic这样的Perl代码分析工具? 我使用过Perl::Critic,但我不喜欢有人批评我的代码!(即使它是来自Damian Conway的Perl最佳实践书籍!)我只是写合理的代码并应用大多数最佳实践。其他人通常对我的代码没有问题。
我使用过Perl::Critic,但我不喜欢有人批评我的代码
您真的是一个多语言者,除了Perl之外,您的GitHub页面还托管了C++、JavaScript、Python、OCaml、PHP等语言的项目!您是否希望Perl具有这些语言中的哪些特性? 从其他语言中提取特性并将其放入Perl中很困难,因为它已经非常具有表达性并且支持许多不同的编程范式。我经常被问到这个问题,但我没有好的答案!我现在用Perl非常高效,而我确实可以指出我希望在其他语言中看到的Perl特性。
关于Perl版本,您是否保持更新? 是的,我现在使用Perl 5.18,这都归功于Perlbrew。我记得几年前在知道Perlbrew之前,管理几个不同的Perl版本是非常痛苦的事情,我总是有系统Perl和可能的一个本地版本。管理包也是一个痛苦的过程。一旦我发现Perlbrew,我就安装了从5.6开始的每个Perl版本。一个酷的特性是“perlbrew exec”,我用它来测试我的单行脚本针对每个Perl版本的工作情况。
我使用Perl 5.18,这都归功于Perlbrew。
您最喜欢的Perl模块和工具有哪些? 我非常喜欢Try::Tiny,它提供了更好的异常处理,File::Slurp可以快速处理文件,WWW::Mechanize和HTML::TreeBuilder可以用于网络抓取。
谈到工具,我还喜欢Damian Conway的rxrx(这里有一个在YAPC上的演示)。这是一个交互式正则表达式调试器。我还使用的是ack,这是一个比grep更好的版本!
最后一个问题——您的个人资料图片里您在做什么?在吸烟吗? 哈哈,不是的!我实际上在拿着一块透明胶带。那天我在用空瓶子制作筏子,所以我把它们粘在一起。结果证明那是一个非常好的筏子,它成功了。
这篇文章最初发布在PerlTricks.com。
标签
反馈
这篇文章有什么问题吗?请帮助我们通过在 GitHub 上打开一个问题或拉取请求。