脚本语言中的美元符号 - 为什么?

Jak*_* M. 6 javascript php python perl

有谁知道,在某些脚本语言(即PHP或Perl)中,"美元变量表示法"背后的实际原因是什么?我没有找到$variable有用的Python创建者.为什么PHP和Perl迫使我经常按shift-4?

(OK,在Perl中你可以用某种方式区分解释$scalar,@array%hash但仍可以成功地避免了那里,类型并不需要明确)

And*_*ewR 8

我不知道这是否是主要原因,但如果PHP没有带识别标记的变量,则以下情况是不可能的.

echo "Welcome back $name, we last saw you on $date";
Run Code Online (Sandbox Code Playgroud)

更新:

它还可以创建一个称为变量变量的东西.变量变量的用处虽然有争议,但我不建议任何人经常使用它们.

  • Perl从shell脚本继承了这种语法,PHP从Perl继承了它. (6认同)
  • "以下是不可能的"也许如果不是这样会更好.这是我所知道的任何语言中最难以理解的特征(Brainfuck,Befunge和Malbolge当然不计算在内).在每个变量名称之前,如果没有印记,这仍然是可能的. (2认同)

Dav*_*idO 7

Perl变量的设计目标之一是使它们在视觉上与内置,保留字,控制流字等在视觉上区分开来.对于不熟悉Perl的人来说,所有的线索都可能看起来像线路噪音.但是对于精通Perl的人来说,"sigils",正如他们所说的那样,使代码更具可读性和易懂性.正如您已经观察到的,Perl5中的sigil类型会根据所访问的基础数据而变化.$表示标量,@表示数组,%表示哈希值.

但是还有一个额外的视觉提示指的$hash{key}是哈希中的标量值.该$印记指示标,和{}括号表明我们进行索引散列(就像一个例子).在索引到数组的情况下$array[0],例如:$告诉我们我们正在访问数组中保存的标量值,方括号在括号内的索引点处显而易见.当我们看到@array[1, 2, 3],我们已经通过的方式即时视觉通知@,我们正在抓住从数组中的元素(假设列表环境)的列表(方括号还告诉我们应该从一个数组让他们).这是一个数组切片.哈希切片就是@hash{qw/ this that the other/}.所以再一次@告诉我们要寻找一个列表,花括号告诉我们我们是从哈希中获取它们.当我们看到一个@%没有后缀括号时,我们将采用整个数组或散列.

线索迅速成为第二天性.

Perl6有点不同,需要几天熟练的Perl5用户才能习惯.;)

这里有一篇很好的维基百科文章:Sigil(计算机程序设计)

除了视觉指南,这些印记也使其他事情变得更容易; 例如,解除引用和插值.虽然更复杂的运算符可以用于插值之类的东西(并且偶尔也需要消除变量结束和相邻单词字符继续的位置的歧义),但目标可能是让简单的事情变得容易,同时使困难成为可能.


yst*_*sth 6

Perl中的自然语言原则:

语言可以通过某些局部模糊性消失的部分原因是其他歧义被各种机制所抑制.英语使用数字和单词顺序,在代词中用案例系统的痕迹:"男人看着男人,他们回头看着他." 在这句话中,对于向谁做的事情是完全清楚的.同样,Perl在其名词上有数字标记; 也就是说,$dog是一个小狗,并且@dog(可能)很多.所以$,@有点像英语中的"this"和"these".