我在Perl中遇到了问题。我希望有人可以帮助我。
my $bCommType = 'none';
my %commTypes = (
'none' => '0',
'public' => '1',
'custom_percentage' => '2',
'custom_permeg' => '2',
'custom_flat' => '2',
);
my %rateTypes = (
'custom_percentage' => '%',
'custom_permeg' => '$',
'custom_flat' => 'FLAT',
'none' => 'none',
);
my $commrate = $rateTypes{$bCommType} if ( $commTypes{$bCommType} == 2 );
我$commrate
的输出是undef
,有人可以帮我识别问题吗?
答案 0 :(得分:2)
您正在使用条件声明。这已被弃用了。 Perl可能会给你一个警告(你正在使用use warnings
,对吧?)。
将声明移动到自己的行中,提供默认值,并使用新行中的条件进行赋值。
my $commrate = 'default'; # it's not clear which %commTypes is the default
$commrate = $rateTypes{$bCommType} if ($commTypes{$bCommType} == 2);
您需要提供默认值或起始值,因为Perl中的新变量始终以undef
开头。
答案 1 :(得分:2)
如果$commrate
的值为2,则将$rateTypes{$bCommType}
设置为$commTypes{$bCommType}
。$bCommType
为none
,$commTypes{none}
为零,所以分配不会发生,$commrate
未定义
这是你问题的根源,但除此之外,你不应该有条件地声明变量。如果你尝试,它会做各种奇怪和未定义的事情。正如 simbabque 所说的那样,你需要单独声明变量并使得assigmnent有条件,但在这种情况下结果将是相同的,因为我上面描述的原因
答案 2 :(得分:0)
这是使用条件声明的更好方法。无论您是使用Perl,JavaScript,Java还是PHP,此方法都将起作用。在我宣布条件的地方,问号前面的陈述是条件。问号后面的值是当条件评估为真时将分配给变量的值。如果语句的计算结果为false,则列之后的值是将分配给变量的值。
use strict;
my $bCommType = 'none';
my %commTypes = (
'none' => '0',
'public' => '1',
'custom_percentage' => '2',
'custom_permeg' => '2',
'custom_flat' => '2',
);
my %rateTypes = (
'custom_percentage' => '%',
'custom_permeg' => '$',
'custom_flat' => 'FLAT',
'none' => 'none',
);
my $commrate = $commTypes{$bCommType} == 2? $rateTypes{$bCommType} : "false value";
print $commrate;