什么是“现代Perl”?

13

我一直听说过这个“现代Perl”。它是什么?

我听说其中一个新特性是新的打开语法:

open my $FH, '<', $filename

而不是

open FH, "<$filename";

现代 Perl 还有哪些内容?


1
直面你的例子,我认为过程式 IO 不是现代 Perl -- 因此我们可以很容易地看到这个术语的差异,就像“Web 2.0”一样。 - Evan Carroll
2
现代Perl == http://www.ruby-lang.org/en/ </笑话> - whaley
1
我认为一个更具争议和有趣的问题是,“我能否在不使用Moose的情况下编写现代的面向对象的Perl代码?” - Evan Carroll
@whaley:他们在Parrot下重写了Ruby吗? - szbalint
3
这个应该改成社区维基吧? - Sinan Ünür
@Sinan - 我本来想不同意你的看法,但后来发现这个用户也提出了这个问题:http://stackoverflow.com/questions/3129801/how-is-modern-c-written - DVK
4个回答

13

引用来源

现代Perl编程,大约在2010年左右,依赖于整个Perl生态系统的智慧。现在是编写优雅、可靠、可维护、经过良好测试且可预测的代码的时候了。

另请参见该书。以及这本书中的一句话

现代Perl是有经验和高效的Perl 5程序员的松散描述。他们使用语言惯用语。他们利用CPAN。他们是易于辨认的Perlish风格,并展现出良好的品味和工艺以及对Perl的全面理解。


12
为了对deinst的概述进行具体说明,Modern Perl:
  • 使用Perl 5.10的新特性,如switch语句(given/when)和say
  • 遵循良好的Perl编程实践,如use strictuse warnings
  • 可以使用Modern::Perl CPAN模块来简化所有这些内容
  • 使用Moose编写高级OO代码

8
此外,避免使用全局变量,更倾向于使用词法范围内的变量和访问器,编写模块化和可重用的代码,使用CPAN,进行测试,测试以及更多测试! - szbalint
3
您提供的switch不是Perl 5.10的功能,而是一个已经被弃用的核心模块。您可能想到的是given/when - Ven'Tatsu
1
不要忘记使用Perl :: Critic和PerlTidy来帮助保持一致的风格。此外,使用某种版本控制软件(git、subversion等)。 - daotoad
在编写现代Perl代码时,我会避免使用given/when - Will Sheppard

2

现代 Perl 不是一个专有名词,它只是人们可能用来指称使用仅在过去 X 年中可用功能的 Perl 代码的一种说法,其中 X 因个人而异。

有关 Perl 的各种更改的信息,请参阅 perldelta 文件,例如在 http://perldoc.perl.org/index-history.html


1
(是的,书名和模块名称是专有名词,但显然不是问题的意思。) - ysth
我突然想知道现代Perl是否意味着与后现代Perl形成对比。 - Chris
由于“现代Perl”始终是相对于现在的,因此不可能有后现代Perl :) - ysth
我认为 post-modern 中的现代用法是指50年代建筑风格,这是在功能主义和极简主义之后。因此,事实上,Modern Perl 可能比 post-modern Perl 更新,也可能比现代更新。 - Chris

1
为了回答您关于在现代Perl中打开文件句柄的问题,您应该使用三参数形式而不是两参数形式!
使用open的三参数形式来指定要应用于句柄的I/O层(也称为“学科”)。它会影响读写的处理方式(有关更多详细信息,请参见http://perldoc.perl.org/functions/open.html)。例如:
open(my $fh, "<:encoding(UTF-8)", "filename")
|| die "can't open UTF-8 encoded filename: $!";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接