Perl特殊变量有什么好的做法?

Jus*_*tin 4 perl

首先,有没有人有一个Perl特殊变量的综合列表?

其次,使用它们是否更容易完成任务?我总是不设置$/同时读取文件,并$|自动刷新缓冲区,但我不确定是否有其他人.

第三,应该使用Perl特殊变量,或者在编码中更明确.就个人而言,我是使用特殊变量来操纵代码行为方式的粉丝,但我听到其他人认为它只是混淆了事情.

Pow*_*ord 19

它们都记录在perlvar中.

请注意,长名称仅在您use English qw( -no_match_vars );第一次使用时才可用.


Cha*_*ens 7

永远记住要local对标点符号变量进行更改.一些标点符号变量很有用,不应使用其他变量.例如,$[永远不应该使用它(它改变数组的基本索引,因此local $[ = 1;将导致1引用列表或数组中的第一项).其他人喜欢这样$".您必须平衡不必手动连接的有用性.例如,哪些更容易理解?

local $" = " :: ";               #"
my $s = "@a / @b / @c\n";
Run Code Online (Sandbox Code Playgroud)

my $sep = " :: ";
my $s = join(" / ", join($sep, @a), join($sep, @a), join($sep, @a)) . "\n";
Run Code Online (Sandbox Code Playgroud)

要么

my $s = join(" / ", map { join " :: ", @$_ }, \(@a, @b, @c)) . "\n";
Run Code Online (Sandbox Code Playgroud)


DVK*_*DVK 5

1)至于我经常使用的那些:

  • $!是IO错误处理的典型

  • 当调用设计错误的库(比如数据库的)时,$ @用于eval错误处理,这些库的编码器不够考虑到除了"die"之外的正确错误处理代码

  • $ _对于map/grep块,虽然我100%同意上面的海报,将它用于常规代码并不是一个好习惯.

  • $ | 用于冲洗缓冲液

2)至于使用标点符号与英文名称,我会选择Marc Bollinger上面的回复,尽管同样的反驳也适用于任何人认为使用英文名称没有任何好处.

"如果你使用Perl,你显然不会选择它来获得新手可读性"

马克,我发现并不总是(或者说几乎从不)真实.再说,我的Perl的经历,99%的生产编写Perl代码的大公司,其中90%完全成熟的应用程序,而不是10行黑客的脚本,所以我分析可能不会在其他领域的应用.像Marc那样错误的原因是:

  • 仅仅因为我是一个Perl非新手(温和地说),一年前聘请的一些noob分析师 - 或外包的"天才" - 可能不是.你可能不想让它们比现在更容易混淆."如果代码难以编写,那么应该很难阅读"在任何语言的专业开发人员的良好态度列表中都不是很高.

  • 当我凌晨2点起床,半睡半醒并解决生产问题时,我真的不想依靠我几乎失明的眼睛来区分$!和$ |.特别是在前面提到的"天才"编写的代码中,他们可能不知道使用哪一个并将其切换.

  • 当我读通过一个人谁是未完成代码咳嗽 "改制" 的咳嗽了一年前的公司,我宁愿集中精力奇怪的逻辑比的标点符号汤可读性的复杂性.