Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是对非Perl开发人员的有效Perl培训?_Perl_Cpan_Timtowtdi - Fatal编程技术网

什么是对非Perl开发人员的有效Perl培训?

什么是对非Perl开发人员的有效Perl培训?,perl,cpan,timtowtdi,Perl,Cpan,Timtowtdi,我使用Perl的时间已经够长了,它的许多特性已经成为我的第二天性。当新程序员加入我们的团队时,他们通常几乎没有Perl方面的经验,我的任务通常是培训他们(在必要的程度上)。我想知道,当培训一个不熟悉Perl但有其他语言经验的程序员时,应该重点关注什么(这个问题是不懂语言的,但我与之共事的大多数开发人员都来自Java) 我想到了几件事: 符号的正确使用 引用/取消引用 使用列表函数,如映射, grep,排序 在帮助程序员转换到Perl时,您是否发现有什么特别有用的东西值得关注?你是强调相同点还

我使用Perl的时间已经够长了,它的许多特性已经成为我的第二天性。当新程序员加入我们的团队时,他们通常几乎没有Perl方面的经验,我的任务通常是培训他们(在必要的程度上)。我想知道,当培训一个不熟悉Perl但有其他语言经验的程序员时,应该重点关注什么(这个问题是不懂语言的,但我与之共事的大多数开发人员都来自Java)

我想到了几件事:

  • 符号的正确使用
  • 引用/取消引用
  • 使用列表函数,如映射grep排序

在帮助程序员转换到Perl时,您是否发现有什么特别有用的东西值得关注?你是强调相同点还是不同点,还是两者都强调?

我是一名java程序员,最近不得不学习Perl。我发现最难适应的部分是所有特殊的内置变量,如$\u$~$等等。在你习惯它们之前,很难知道谁在做什么

当然,还有正则表达式的使用

例如,我必须维护代码,当我第一次看到下面这行代码时,它有点让人困惑。作为一名java程序员,这看起来像胡言乱语

next unless "$_" !~ /^#/;

可能不完全是你想要的。事先道歉

除非确有必要,否则我不会指出相似之处。
Perl在自己的世界中工作。如果愿意,您可以用Java风格编写Perl,但有什么意义呢

我从Perl(以及我的Perl导师)中学到的最重要的一课是“有多种方法可以做到这一点”。因此,我认为学习Perl最好的方法是接受它对编程的态度,并在每个程序员找到自己的方式时支持他或她

您正在制作的示例、列表函数等都是随使用而自然产生的——只有掌握了Perl的“方式”,您才能理解它们的威力


只要我的两分钱。

我会选择各种报价操作符(来自perlop):

习惯通用含义插入
''q{}文字编号
”“是的
``qx{}命令是*
qw{}单词列表编号
//m{}模式匹配是*
qr{}模式是*
s{}{}{}替换是*
tr{}{}音译no(但见下文)

您可以向他们展示的最重要的内容是如何访问文档以及如何查找文档(
perldoc-perltoc
perldoc-q$关键字
perldoc-f$函数
等)

Perl附带了大量文档,包括参考和教程风格的材料。为新来者提供方便是你能为他们做的最有效的事情。

对于C++/Java/C#程序员,我在前面非常强调的两个区别是:

第一:在Perl中,几乎所有东西都有其意义,只是并不总是你想要的。好例子包括:

  • 没有符号的变量名不会停止执行-它们被解释为裸字
  • 尝试将数组存储在标量中,就可以得到长度
  • 尝试将散列存储在标量中,会得到“a/b”(使用中的存储桶与总存储桶?)
第2点:在Perl中,您可以边做边补。在其他作品中,你可以说“在散列'w'中,键'x'索引一个匿名数组,其中框'y'包含'z'”,解释器将在你运行时为你创建并调整所有变量的大小。

我认为Perl的“杀手级应用程序”是

首次浏览CPAN后的典型报价:

“你有图书馆吗?”
“必须是有史以来最好的函数名!”
“您可以用Perl编写文本吗?”

一旦程序员看到做困难的事情是多么容易,他们就会被说服


然后您可以展示它们和。

这是一个单一的细节,不是对您问题的完整回答,但对我来说,真正面向Perl的人的标志是有人取代了这个习惯用法:

for (my $i = 0; $i < @a; $i++)
{
  &do_something_with($array[$i]);
}
foreach my $a (@array)
{
  &do_something_with($a);
}

教他们将列表作为列表,而不仅仅是数组。教授令人敬畏的数据结构。教列表,哈希,哈希列表,哈希列表,哈希列表,哈希列表。与大多数传统的强类型语言相比,这就是功能的最大提升。(具有讽刺意味的是,在我今年加入的Java商店中,我们使用了大量任意深度嵌套的HashMap结构。事实上,太多了;我是主张少做一点的人!但在Perl中,这类事情是至关重要的。)

我首先要告诉他们始终使用神奇的咒语:

use strict;
use warnings;
他们还不需要知道原因

接下来,我将向他们介绍perldoc,并向他们展示使用它的基础知识(-f和-q标志、perldoc-perl和perldoc-perltoc,等等),他们需要知道当他们有问题时在哪里查找

我将讨论标量与列表上下文

我将向他们介绍基本的数据类型(标量、数组和散列),以及符号如何遵循上下文,而不是数据类型

介绍
$和
@
。理解
$\uuu
非常重要,因为它在很多地方都有使用,而且常常是含蓄的<代码>@
对于编写子例程至关重要。其他标点符号变量的使用频率要低得多,可以等待

向他们介绍正则表达式,让他们习惯正则表达式是Perl中的第一类对象

我将简要地向他们展示Perl的“对角线”语法。像
next/foo/
这样的习语一旦你开始使用它们就很好了,但是当它来自其他语言时,尤其是“正交”时,它看起来非常陌生
use strict;
use warnings;
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
use strict;
use warnings;
use diagnostics;
use autodie; #or Fatal