我一直在用Perl足够长的时间,很多的idiosyncracies已经成为我的第二天性。 当新的程序员加入我们的团体,他们往往很少使用Perl的经验,它通常是我的任务,以训练他们(在必要的范围内)。 我想知道什么是重点培养程序员谁是新的Perl的,但与其他语言的经验,当上(这个问题,就是要语言无关,但我曾与大多数开发商都来自Java的)。
有几件事情发生的对我说:
- 正确使用印记的
- 引用/取消引用
- 像地图 ,grep的 , 排序列表功能的使用
有没有什么特别的你已经发现它有用集中帮助程序员在过渡到Perl的呢? 你强调在同等程度的相似性或差异,或两者兼而有之?
Answer 1:
检查出的内容表为我的书。 这两种学习的Perl和中级Perl的目的是教程序员的Perl语言。 我们覆盖的Perl的80%,大多数人使用的所有时间和发展,从年复一年的教人的Perl。 每本书都被设计成一个教程,并有在每章的结尾演习。 我也写了学习Perl的学生工作簿 ,以提供额外的练习。 编程的Perl是一个很好的参考,太。
其实有你需要知道的“获取”的Perl很少的规则,和大多数人不正确的只是看代码得到这些规则。 有些事情要教谁是从其他语言即将到来的新Perlers:
- 严格和警告
- 标量与列表上下文
- 动态与词汇范围
- 的印记是不变量类型
- 列表的创建和操纵(地图,grep的,排序)
- 如何有效地使用CPAN
- 闭包和子程序数据
- 递归在Perl吸
祝好运 :)
Answer 2:
我认为,Perl中的“杀手锏”是CPAN ...
浏览CPAN的第一次后的典型语录:
“你有一个图书馆WHAT ?”
“ 根除的HTML必须是最好的函数名永远!”
“你可以总结在Perl中文字?”
一旦程序员看到的是多么容易做的难的事情,他们正在销售。
然后,你可以向他们展示参阅perldoc和骆驼 。
Answer 3:
我拥有和管理的Perl培训澳大利亚 。 我已经教Perl的约8年,计算机科学了十多年。 我不仅Perl的强烈的意见,而且对教学,和一般的介绍。 我已经写了数百篇关于Perl的文本的网页 - 我不会在这里重复 - 所以我要去给你不在教学Perl的意见; 这是元,而不是建议。
首先,如果你的时间和预算允许,可以考虑在Perl的专业培训课程,送你的工作人员。 专门课程有他们不来工作中断的优势,他们不来办公室政治,他们做出来的人谁是非常熟悉的人学习Perl的时候有困难。 请确保您有谁知道他们的东西,是Perl社区的积极成员培训师; 这意味着他们应该能够回答他们抛出的任何问题,或者直接提问,以适当的参考,他们可以了解更多。 是的,我运行一个Perl培训业务,所以我在这里大量自以为是。
如果出于某种原因你不能用一个专用的过程中去,然后得到一本书,专门设计用于教人们如何在Perl编程,并通过走。 这很容易错过的东西,或尝试和错误的顺序介绍的东西,或者(但愿)教坏习惯,而所有这些都可以使您的生活困难。 通常情况下,人们写书目的是教的Perl是谁拥有成功的Perl的培训业务相同的人。 如果你想购买一本书,我建议的最新版本学习的Perl。 如果你想下载一本书,我建议你抓住从编程Perl的课程笔记Perl的训练澳大利亚网站 。
这两本书都有练习,这使我想到我的最后一块元的意见。 确保任何人谁是学习perl 做练习 。 这很容易在学习任何新技能, 想你知道发生了什么事情,但发现勇于实践时,它的难度比它的外观。 这是特别Perl,其中像“背景”的编程概念可以适用,这是在其他语言罕见的情况。 一般练习被特别设计成教一定的技巧,或突出显示特定陷阱; 学习期间搞清楚这些东西比盘算出来的一个项目的最后期限前夕容易得多。
Answer 4:
我会告诉他们一直使用的神奇咒语开始:
use strict;
use warnings;
他们并不需要知道为什么(还)。
接下来,我会向他们介绍的perldoc,并告诉他们使用它,他们需要知道去哪里找,当他们有问题的基本知识(该-f和-q标志的perldoc Perl和的perldoc perltoc等)。
我想谈谈与标量清单范围内。
我会向他们介绍基本数据类型(标量,数组和哈希)和印记如何遵循环境中,而不是数据类型!
引进$_
和@_
。 它的关键是要理解$_
,因为它在很多地方使用,往往含蓄。 @_
是写作子程序是必不可少的。 其他标点符号变量通常远远低于使用,可以等待。
他们介绍给正则表达式,并让他们使用正则表达式是在Perl第一类对象的想法。
我想简要地向他们展示Perl的“对角”语法。 像成语next unless /foo/
一旦你使用它们,但是从其他语言,尤其是“正交”的人到来时显得非常陌生的是美妙的。
你不需要谈论引用的时候了。 让那等到他们准备这样做需要的数据结构的东西。 像功能map
和grep
可以等待了。
建立在基本面坚实的基础。 让他们采取小步了一会儿,然后拌入更先进的特性和习惯用法。
Answer 5:
你可以告诉他们,最重要的是如何访问文档,以及如何找到它( perldoc perltoc
, perldoc -q $keyword
, perldoc -f $function
等)。
Perl附带丰富的文档,包括参考和指导式的材料。 使这对新人访问是你能为他们做的最有效的事情。
Answer 6:
另一个令人惊奇的方面是上下文。 该功能甚至变量的行为不同,这取决于它们在列表或标(或无效)上下文是否要引用的事实,一直是Perl的学员一个重要的细节。
我通常坚持“更高级别”的内置函数(地图,grep的,拼接,分割)。 由于TMTOWTDI的,很多程序员只记得Perl的更为熟悉的方面(如C风格的循环,SUBSTR和索引),并使用专用的。
他们熟悉的语言之后, 中级Perl和高级Perl编程可以让他们更深入地了解Perl的世界
Answer 7:
也许不正是你所期待的。 道歉提前。
我不会指向相似之处,除非确实有必要。
Perl的工作在自己的世界。 如果你喜欢,但有什么意义,你可以用Java编程风格的Perl?
我从Perl的(和我的Perl导师)学到的最重要的教训是“有一个以上的方法做它”。 所以,我认为学习Perl是拥抱它的态度来规划,相互支持程序员的最好方式,因为他或她发现他或她的方式。
您所做的例子,列表等多种功能,是东西,利用自然来 - 你只能理解他们的权力一旦你的Perl的“办法的事情”。
只是我的两分钱。
Answer 8:
坦率地说,我只是给他们的骆驼。 它是这样的可读性和娱乐性的书,他们会启动并运行在没有时间。 我仍然笑对“Perl的认为真理是不言自明”,它必须为十年,因为我第一次读到它。
Answer 9:
我只能补充,有人从较少的表现语言来可能不明白哈希表达式或散列和数组切片表现。 好像每一种语言都有一个PCRE库这些天。
噢,并添加到圣莫里茨的想法,我辅导我的同事在这一点。
另外,我包括在数据::自卸车,标量::的Util,列表::的Util和类似的一些非常有用的模块的一些指令。
为什么不为此事,看看达米安的Perl的最佳实践 ,并抢到了几个更强大的建议。
Answer 10:
我是一个Java程序员谁最近不得不拿起Perl的。 我发现最难的部分习惯都建在象$ _ $〜$”等变量的所有特殊。 直到你习惯了他们很难跟踪哪些人做什么。
而且,当然,使用正则表达式。
例如,我有维护的代码,当我看到下面的线为第一次,这是一个有点混乱。 作为Java程序员,它看起来像乱码。
next unless "$_" !~ /^#/;
Answer 11:
我会去的各种引用(从perlop中)运算符:
Customary Generic Meaning Interpolates
'' q{} Literal no
"" qq{} Literal yes
`` qx{} Command yes*
qw{} Word list no
// m{} Pattern match yes*
qr{} Pattern yes*
s{}{} Substitution yes*
tr{}{} Transliteration no (but see below)
<<EOF here-doc yes*
* unless the delimiter is ''.
该列表可以是压倒性的(尤其是当你在交替的分隔符添加),但非常有用的。 阅读时的代码,因为很少(如果有的话!)语言已经在品种,Perl有报价的它也有帮助。
Answer 12:
这是一个细节,不是一个完整的回答你的问题,但对我来说,谁是真正成为面向Perl的人的标志是谁的人取代了这个成语:
for (my $i = 0; $i < @a; $i++)
{
&do_something_with($array[$i]);
}
这个习惯用法:
foreach my $a (@array)
{
&do_something_with($a);
}
教他们列为清单,不仅为数组。 教真棒数据结构。 教列表,哈希,哈希列表,列表的散列,散列的散列。 这就是权力的最大的一步进来了最传统的强类型语言。 (具有讽刺意味的在Java店我参加今年,我们吊索吨左右arbitarily深嵌套HashMap的结构太多,其实;我是一个做的是有点少争论,但在Perl,这样的事情!是至关重要的。)
Answer 13:
只是开玩笑,但是不管你做什么,秀之类的东西这样了! ;)
use integer;@A=split//,<>;sub R{for$i(0..80){next if$A[$i];my%t=map{$_/9
==$i/9||$_%9==$i%9||$_/27==$i/27&&$_%9/3==$i%9/3?$A[$_]:0=>1}0..80;R($A[
$i]=$_)for grep{!$t{$_}}1..9;return$A[$i]=0}die@A}R
Answer 14:
因为其他人说:
use strict;
use warnings;
也许
use diagnostics;
Java程序员:
use autodie; #or Fatal
English.pm
穆斯/鼠标
Perl的::评论家
perltidy
Answer 15:
我只是受雇于这个确切的情况。 我是一个C ++和Java开发人员和从未接触过的Perl,直到我现在的工作。 那花了一些时间的事情,才能使用得人的特质Perl的语法选择[$ _],$ =这个除非......,和只见树木不见(含/ ^#+ \ d /元素的任何东西)的森林。 其他的事情只是编程的房子我在[混淆OO语句,$自我,并把1工作的结果; 在模块文件结束。
现在,我已经在这里一段时间,我看到的Perl给了我,即使在我的非正常工作项目的风格元素。 你接近的任务,尤其是数据按摩,不同,感觉就像在我的工具箱一个真正坚实的工具。
所有这一切是说,有人递给我的约35000行代码库,骆驼书,并告诉我不能使用CPAN。 这是一个生产力六个月。 ^^
Answer 16:
Perl的编程 (由合着#22483 -良好的工作兰德尔,我已经有我的分十年附近)是一个伟大的介绍到Perl的。 与正则表达式开始,切片和切块数组,关联数组等加上原因和在Perl和函数引用报告的怎么样了。
我不知道它是多么的在它的第三版改变,但我会立足于它的课程,并把它作为教科书。 它相当简洁,重点突出。 加上那么你当然,你的文档匹配。
Answer 17:
根据我在工作我建议你用Perl的文件(这里已经覆盖)开始,花一些时间来展示学生如何在命令行上测试代码的经验。 这真是令人惊讶的用户如何快速回暖的语言时,他们可以尝试在飞行的东西并进行更正,直到他们得到它的权利。
Answer 18:
对于C ++ / Java的/ C#程序员两个区别我强调强烈的前期是:
1号:在Perl中几乎任何事物都有一个意思,只是不是你想要什么永远。 很好的例子包括:
- 无印记变量名不停止执行 - 它们被解释为裸字
- 尝试存储在一个标量的数组,你会得到的长度
- 尝试存储哈希在一个标量,你会得到“A / B”(在使用VS总水桶桶?)
2号:在Perl中,你可以弥补你走。 在其他的作品,你可以说“在散‘W’关键‘X’指标的匿名数组,其中框‘Y’持有‘Z’”,并解释将创建和大小都为你的变量,当您去。
Answer 19:
好。 当然,你需要在某一时刻使用严格。 并确定要在某一时刻使用库。 但是,严格的只是基本的启动的文件,魔术Perl和每一种语言都有图书馆。 我不认为这些是起步时的学习非常重要的事情。
当您在Perl的开始,但是已经知道其他语言,你需要知道的疯狂idiosyncracies,比如$ a和$ b是特殊的增值经销商,使用-1能指数等
现在回想起来,我真的很喜欢我怎么学会的Perl:通过Perl的打高尔夫球。
通过使用一种语言,以这样极端的,你强迫自己找出这一切的疯狂位,你真的需要了解不同的结构。 特别是如果你是一个组的朋友/同事这样做/ ...这个作品真的很好。
(当然,这不应该是唯一的培训;),但我真的相信它工作得很好,在一些点)
文章来源: What constitutes effective Perl training for non-Perl developers? [closed]