如果我创建两个样式字符串,就像这样
my $style =<<'EOF';
<-- @import url("foo.css"); -->
EOF
my $style2 =<<'EOF';
<-- #thing_in_foo.css_that_I_want_to_override a {attributes;} -->
EOF
我希望将它们包含在start_html中,如下所示:
print $q->start_html({
-style => [
{-code=>$style},
{-code=>$style2}
]);
或者其他一些 长期目标是将CGI模块子类化为一堆默认值。我想让用户向对象传递一些额外的哈希引用,如下所示:
my $q = subCGI->new({-code=>$style2});
该对象将构建start_html参数,并且我想将该哈希引用放入-style数组中。我打算在那里有一些;目的是让用户在new()参数中传递任何css,使其在默认值上级联。
我希望这是有道理的。
答案 0 :(得分:3)
使用与先前使用的相同密钥对哈希的任何后续添加将始终覆盖第一个。也就是说,
my %hash = (
key => "value 1",
key => "value 2",
);
...将总是产生一个值为“value 2”的键,而不是“value 1”。
使用它来允许可选的覆盖是一种常见的技术,例如:
sub wrapper_around_something_common
{
# get optional options from the caller
my %options = @_;
some_other_function(
key_1 => 'some default',
key_2 => 'another default',
%options, # and override with any options provided by user
)
}