dra*_*tun 40

Perl sigils的一个有用的助记符是:

  • $日历
  • @rray
  • %灰

Matt Troutblog.fogus.me上写了一篇关于Perl sigils的评论,我觉得它很有用,所以粘贴如下:

实际上,perl sigils并不表示变量类型 - 它们表示共轭 - $是'the',@是'这些',%是'map of'左右 - 变量类型通过[]或{}表示.你可以看到这个:

my $foo = 'foo';
my @foo = ('zero', 'one', 'two');
my $second_foo = $foo[1];
my @first_and_third_foos = @foo[0,2];
my %foo = (key1 => 'value1', key2 => 'value2', key3 => 'value3');
my $key2_foo = $foo{key2};
my ($key1_foo, $key3_foo) = @foo{'key1','key3'};
Run Code Online (Sandbox Code Playgroud)

所以当浏览perl代码时会看到这个印记,告诉你你要做什么 - 而不是你正在操作的东西,几乎就是这样.

不可否认,这一点在您习惯之前确实令人困惑,但是一旦您习惯了它,它就可以成为一个非常有用的工具,可以在浏览代码时吸收信息.

当然,你仍然完全有权讨厌它,但这是一个有趣的概念,我认为你可能更喜欢讨厌实际发生的事情,而不是你认为发生的事情:)

  • 我总是说sigils不是变量名的一部分,而是说明*context*. (2认同)
  • 拉里并不总是正确的.考虑一下本地和痴迷:两个非常糟糕的名字,我们现在必须忍受. (2认同)

Caf*_*eek 23

$this 是一个标量值,它包含1个项目 apple

@that 是一个值数组,它有几个像 ("apple", "orange", "pear")

%those 是值的哈希值,它包含键值对 ("apple" => "red", "orange" => "orange", "pear" => "yellow")

有关Perl变量类型的更多信息,请参阅perlintro.

  • 旁注:$标量值通常用于指向(引用)数组和散列(有时甚至是其他标量). (10认同)
  • perldoc非常好:http://perldoc.perl.org/perldata.html(或运行`perldoc perldata`,如果你安装了文档). (4认同)
  • @Frank - 是的,那个和数组可以用作哈希.我最喜欢的是命名参数:我的($ foo,$ bar)= @ {@_} {qw/foo bar /};` (2认同)
  • 小心 - 代码`@that = ["apple","orange","pear"]`创建一个匿名数组引用并尝试将其分配给`@ that`,这会导致混乱的结果.`@that =("apple","orange","pear")`做你想要的,`@that = qw(苹果橙梨)`做得更漂亮. (2认同)

mob*_*mob 8

Perl的发明者是语言学家,他试图让Perl成为一种"自然语言".

这篇文章:

按数字,案例和单词顺序消除歧义

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


bri*_*foy 8

人们经常尝试将符号绑定到变量类型,但它们只是松散相关.这是我们在学习Perl有效Perl编程时非常努力的一个主题,因为当你理解sigils时,理解Perl要容易得多.

许多人忘记了变量和数据实际上是分开的东西.变量可以存储数据,但您不需要变量来使用数据.

$表示单个标量值(不一定是标量变量):

$scalar_var
$array[1]
$hash{key}
Run Code Online (Sandbox Code Playgroud)

所述@表示多个值.这可能是整个数组,切片或取消引用:

@array;
@array[1,2]
@hash{qw(key1 key2)}
@{ func_returning_array_ref };
Run Code Online (Sandbox Code Playgroud)

%表示对(关键字和值),这可能是一个散列变量或解除引用:

%hash
%$hash_ref
Run Code Online (Sandbox Code Playgroud)

在Perl v5.20下,%现在可以表示键/值切片或散列或数组:

%array[ @indices ];  # returns pairs of indices and elements
%hash{ @keys };      # returns pairs of key-values for those keys
Run Code Online (Sandbox Code Playgroud)

  • 标量引用很好地传递大数据而不复制它们. (2认同)