首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何设置默认值?

如何设置默认值?
EN

Stack Overflow用户
提问于 2011-03-17 14:24:46
回答 5查看 260关注 0票数 1

假设我有一个像这样的哈希

代码语言:javascript
复制
my %profile = (
    building            => $p->{account}->{building},
    email               => $p->{account}->{email},
    phone               => $p->{account}->{phone},
    );

当未定义变量时,$p中的变量可以具有各种值。我至少见过undef ~ ''

如果-1具有这些奇怪的默认值之一,如何将$profile{building}的值分配给例如$p->{account}->{building}

有什么聪明的Perl方法可以做到这一点吗?

Update:任何值都可以接受任何奇怪的默认值undef ~ ''

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-17 14:41:47

我要增加一个函数:

代码语言:javascript
复制
my %profile = (
    building            => scrub($p->{account}->{building}),
    email               => scrub($p->{account}->{email}),
    phone               => scrub($p->{account}->{phone}),
    );

并在函数中实现默认过滤逻辑。

或者,更好的是,将逻辑预先应用于$p,以便您知道$p有合理的值。

票数 6
EN

Stack Overflow用户

发布于 2011-03-17 14:52:37

因此,如果我正确地理解了您,您将有一堆虚假的东西被用作“使用默认值”的标志。我不确定您是要将所有这些转换为-1,还是要将特定值转换为字段。我将假设多个值,只是为了让事情变得更棘手。

代码语言:javascript
复制
# Make a hash of the wanted values
my %default_values = (
    building => -1,
    email    => 'N/A',
    phone    => 'unlisted',
);

# Make a hash of the values to replace.
# Skip undef, we have to check that separately
my %bogus_values = map {$_ => undef} ('', '~', 0);

# Copy the goodies into your final structure
my  %profile = map { 
    my $val = $p->{account}{$_};
    $val = $default_values{$_}
        if( not defined $val 
            or exists $bogus_values{$_}
        );
    $_ => $val;
} keys %default_values;


# Or copy them another way
my %profile = %default_values;
$profile{$_} = $p->{account}{$_}
    for grep {
        defined $p->{account}{$_}
        and not exists $bogus_values{$_}
    } keys %default_values;
票数 4
EN

Stack Overflow用户

发布于 2011-03-17 14:33:09

从Perl5.10开始,您可以使用智能匹配

代码语言:javascript
复制
my @vals = (undef, '~', "");
$profile{building} = $p->{account}{building} ~~ @vals ? -1 : $p->{account}{building};
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5340363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档