有谁知道,在某些脚本语言(即PHP或Perl)中,“美元变量表示法”背后的实际原因是什么? Python创建者没有发现$variable
有用,我也没有。为什么PHP和Perl迫使我经常按shift-4?
(好的,在Perl中,您可以通过区分$scalar
,@array
和%hash
来解释它,但仍然可以在那里成功避免,类型不需要明确)< / p>
答案 0 :(得分:8)
我不知道这是否是主要原因,但如果PHP没有带识别标记的变量,则无法进行以下操作。
echo "Welcome back $name, we last saw you on $date";
更新
它还可以创建一个名为variable variable的东西。变量变量的用处虽然有争议,但我不建议任何人经常使用它们。
答案 1 :(得分:7)
Perl变量的设计目标之一是使它们在视觉上与内置词,保留词,控制流词等区别开来。对于不熟悉Perl的人来说,所有的线索都可能看起来像线路噪音。但是对于精通Perl的人来说,“sigils”,正如他们所说的那样,使代码更具可读性和易懂性。正如您已经观察到的,Perl5中的sigil类型会根据所访问的基础数据而变化。 $表示标量,@表示数组,%表示哈希值。
但是还有一个额外的视觉提示,$hash{key}
指的是散列中保存的标量值。 $
sigil表示标量,{}
括号表示我们正在索引为哈希(仅作为示例)。在索引到数组的情况下,$array[0]
,例如:$
告诉我们我们正在访问数组中保存的标量值,通过方括号显而易见,在索引点内括号。当我们看到@array[1, 2, 3]
时,我们通过@
立即获得视觉通知,我们从数组中获取元素列表(假设列表上下文)(方括号仍然告诉我们'从数组中获取它们)。这是一个数组切片。哈希切片为@hash{qw/ this that the other/}
。所以@
再一次告诉我们要查找一个列表,花括号告诉我们我们是从哈希中获取它们的。当我们看到@
或%
没有后缀括号时,我们将采用整个数组或散列。
暗示很快成为第二天性。
Perl6有点不同,需要几天熟练的Perl5用户才能习惯。 ;)
这里有一篇关于这个主题的好维基百科文章:Sigil (Computer Programming)
除了视觉指南外,这些印记也使其他事情变得更容易;例如,解除引用和插值。虽然更复杂的运算符可以用于插值之类的东西(并且偶尔也需要消除变量结束和相邻单词字符继续存在的歧义),但目标可能是让简单的事情变得容易,同时使一切事情变得可能。
答案 2 :(得分:6)
Natural Language Principles in Perl:
语言可以通过某些局部歧义消失的部分原因是其他歧义被各种机制所抑制。英语使用数字和单词顺序,在代词中用案例系统的痕迹:“男人看着男人,他们回头看着他。”在这句话中,对于向谁做的事情是完全清楚的。同样,Perl在其名词上有数字标记;也就是说,
$dog
是一个狗,@dog
(可能)很多。因此$
和@
有点像“this”和英语中的“this”。
答案 3 :(得分:2)
他们在解析时使用它,以便可以很容易地将变量与其他东西区分开来。