每个优秀的Perl开发人员应该能够回答的问题

Questions every good Perl developer should be able to answer

受原始线程和即将出现的克隆的启发,这里是Perl社区的一个。

好的Perl程序员应该能够回答哪些问题?


为什么use strict有用?


我的天气预报问题是列表和数组有什么区别?.

我也倾向于要求人们尽可能多地向我展示定义范围的方法。有一个是人们几乎总是忘记的,另一个是大多数人认为提供了一个范围但没有。


两者有什么区别

1
if ($foo) { ... }

1
if (defined $foo) { ... }

你什么时候应该使用一个而不是另一个?


问题

  • 什么是样板客户?
  • Perl如何实现对象定向?
  • Perl的对象定位与其他语言有什么不同?
  • 核心Perl中的传统对象定向在很大程度上被什么所取代?
    • 为什么?
  • 包和模块之间有什么区别?
  • 5.10中实现了哪些功能?
  • 什么是施瓦兹变换?
  • 解释这些代码行和变量值之间的区别。

    1
    2
    3
    4
    my $a = (4, 5, 6);
    my @a = (4, 5, 6);
    my $b = 4, 5, 6;
    my $c = @a;
  • Perl最大的优势是什么?

  • Perl最大的弱点是什么?
  • 举出"现代Perl"运动的几个标志。
  • 绑定操作符做什么?
  • 触发器操作员做什么?
  • for和foreach有什么区别?
  • 什么使Perl难以解析?
  • 什么是原型?
  • 什么是自动加载?
  • Perl的座右铭是什么?
    • 为什么这是个问题?
  • use strict;做什么?为什么它有用?
  • 下面的代码块做什么?

    1
    print (3 + 4) * 2;

测验

  • 使用map实现grep
  • 实现并使用调度表。
  • 给定一个文本块,将该块中的一个单词替换为将该单词作为参数的函数的返回值。
  • 实现一个模块,包括与perldoc兼容的文档。
  • 锉锉锉锉
  • 画一张表来说明Perl对Truthiness的概念。


  • 什么是列表上下文和标量上下文?
  • my $x = ...my($x) = ...有什么区别?
  • my($x,undef,$z) = ...是做什么的?
  • 为什么my(@a,@b) = (@list1, @list2)可能是一个bug?
  • 用户定义的子级如何知道它是在列表或标量上下文中调用的?给出一个例子,说明同一个子元素在一个上下文或另一个上下文中返回不同值的意义。

/a(.*)b//a(.*?)b/有什么区别?


  • myour有什么区别?
  • mylocal有什么区别?
  • 对于上述情况,什么时候使用一个对另一个合适?


这个代码怎么了?

1
2
3
4
5
6
7
my @array = qw/a b c d e f g h/;

for ( @array ) {
    my $val = shift @array;
    print $val,"
"
;
}


我认为Brian D Foy的方法是一种巧妙的策略,用来测试关于语言和编程技巧的知识、理解和偏袒:你讨厌你最喜欢的语言的五件事是什么?如果他们不能说出5个名字,他们可能对语言不太在行,或者完全不擅长其他方法。

他将这一点应用于试图推动一种语言的人:我会扩展它,并说它在这里同样适用。我希望每个好的Perl程序员都能说出他们不喜欢的五件事。而且,我希望这五件事有一定的价值。


1
2
3
4
5
6
7
my $a = 1;

if($a) {
    my $a = 2;
}

print $a;

最后$A的价值是多少?


使用变量作为变量名有什么问题?

学习指南:第1部分、第2部分和第3部分。


我最喜欢的问题。缺少以下代码:

1
2
3
4
5
open(my $fh,"<","file.txt");
while (<$fh>) {
    print $_;
}
close($fh);

这个问题将打开关于Perl中错误处理的讨论。它也可以被其他语言所采用。


对于以下每个问题,您将如何使用哈希来解决它?

  • 计算集合关系,例如并集、交集、互斥。
  • 查找列表的唯一元素。
  • 编写调度表。

编写构建中等复杂数据结构的代码,例如数组散列数组。您将如何访问特定的叶?你将如何穿越整个结构?


几个月前,现代Perl的彩色作者写了一篇类似的好文章"如何识别一个好的Perl程序员",其中包含了每个好的Perl程序员都应该能够有效回答的问题列表。

下面给出了一些不错的问题:

  • What’s the difference between accessing an array element with $items[$index] and @items[$index]?

  • What’s the difference between == and eq?

  • How do you load and import symbols from a Perl 5 module?

  • What is the difference, on the caller side, between return; and return undef;?

  • What is the difference between reading a file with for and with while?

  • 有关完整的详细信息,请阅读如何识别一个好的Perl程序员。


    如何评价$foo->{bar}[$baz]($quux)


    什么是词汇结尾?闭包什么时候有用?(请不要使用计数器创建者!)


    列表上下文和标量上下文的区别是什么?如何访问每个?有没有散列上下文之类的东西?也许有点?


    如何在不使用临时变量的情况下交换两个变量的值?


    • 这一行打印的是什么?为什么:

      1
      perl -pe '}{$_ = $.' file

      answer:number of lines in the file,like to wc -l.

    • 此代码有什么问题:

      1
      2
      my $i;
      print ++$i + ++$i;

      answer:modifying a variable two in the same statement leads to undefined behavior.

    • 简单一点:if块是否运行:

      1
      2
      my @arr = undef;
      if (@arr) { ... }

      回答:是

    • 您将如何对自己构建的reverse()perl进行编码?您可以使用其他Perl函数。

      回答:很多方法。一个短的:sub my_reverse {sort {1} @_})sub>


    我也可能会深入研究regex,因为我希望每个优秀的Perl程序员都能掌握regex(但不仅仅如此)。一些可能的问题:

    • 什么是lookahead和lookback断言/修改器?
    • 如何检查regex的两个单独部分是否相同?
    • 什么是贪婪?
    • 什么是posix字符类?
    • 什么匹配?
    • c修饰符的用法是什么?
    • 如何预编译regex?


    初始化空字符串的正确方法是什么?

    1
     my $str = q{};

    1
     my $str ="";

    1
     my $str = '';