dra*_*tun 40
Perl sigils的一个有用的助记符是:
Matt Trout在blog.fogus.me上写了一篇关于Perl sigils的评论,我觉得它很有用,所以粘贴如下:
实际上,perl sigils并不表示变量类型 - 它们表示共轭 - $是'the',@是'这些',%是'map of'左右 - 变量类型通过[]或{}表示.你可以看到这个:
Run Code Online (Sandbox Code Playgroud)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'};所以当浏览perl代码时会看到这个印记,告诉你你要做什么 - 而不是你正在操作的东西,几乎就是这样.
不可否认,这一点在您习惯之前确实令人困惑,但是一旦您习惯了它,它就可以成为一个非常有用的工具,可以在浏览代码时吸收信息.
当然,你仍然完全有权讨厌它,但这是一个有趣的概念,我认为你可能更喜欢讨厌实际发生的事情,而不是你认为发生的事情:)
Caf*_*eek 23
$this 是一个标量值,它包含1个项目 apple
@that 是一个值数组,它有几个像 ("apple", "orange", "pear")
%those 是值的哈希值,它包含键值对 ("apple" => "red", "orange" => "orange", "pear" => "yellow")
有关Perl变量类型的更多信息,请参阅perlintro.
人们经常尝试将符号绑定到变量类型,但它们只是松散相关.这是我们在学习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)