来自perlootut:
my $cage = File::MP3->new(
path => 'mp3s/My-Body-Is-a-Cage.mp3',
content => $mp3_data,
last_mod_time => 1304974868,
title => 'My Body Is a Cage',
);
我不明白这里发生了什么。它看起来是自动生成,如果是这样,那么new会传递类名和对新哈希的引用吗?
答案 0 :(得分:5)
不涉及自动更新。使用=>
operator:
=>
运算符是逗号的同义词,不同之处在于,如果它以字母或下划线开头并且仅由字母,数字和下划线组成,则会使其左侧的单词被解释为字符串。
虽然在声明哈希值时经常使用=>
,但它本身并不会创建哈希值。
您发布的代码等同于
my $cage = File::MP3->new(
'path', 'mp3s/My-Body-Is-a-Cage.mp3',
'content', $mp3_data,
'last_mod_time', 1304974868,
'title', 'My Body Is a Cage',
);
这只是将八个项目的列表传递给new
方法。
答案 1 :(得分:1)
=>也被称为胖逗号,它的行为就像一个逗号 - 除非:... / / p>
在这种情况下,胖逗号将引用左侧的裸字。
使用胖逗号是因为:
有些人发现输入胖逗号比在左边的裸字周围键入引号更容易
胖子逗号表示lhs和rhs之间的关系。然而,这种关系只是视觉上的 - 它取决于确定关系应该是什么的功能。
虽然=>通常在声明哈希时使用它,它不会创建一个 哈希本身。
即便:
use strict;
use warnings;
use 5.016;
use Data::Dumper;
my %href = (
'a', 10,
'b', 20,
'c', 30,
);
say $href{'a'};
say Dumper(\%href);
--output:--
10
$VAR1 = {
'c' => 30,
'a' => 10,
'b' => 20
};
perl ain&#tt ruby。