Perl “未定义”中的变量;如果;条件
我在Perl中遇到了一个问题。我希望有人能帮助我Perl “未定义”中的变量;如果;条件,perl,Perl,我在Perl中遇到了一个问题。我希望有人能帮助我 my $bCommType = 'none'; my %commTypes = ( 'none' => '0', 'public' => '1', 'custom_percentage' => '2', 'custom_permeg' => '2', 'custom_flat' => '2', ); my
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
中的输出是unde
,有人能帮我确定问题吗?您使用的是条件声明。这是不赞成的。Perl可能会给您一个警告(您正在使用使用警告,对吗?)
将声明移到自己的行中,提供默认值,并在新行中使用条件进行赋值
my $commrate = 'default'; # it's not clear which %commTypes is the default
$commrate = $rateTypes{$bCommType} if ($commTypes{$bCommType} == 2);
您需要提供一个默认值或起始值,因为Perl中的新变量总是以undef
开头,因为您使用的是条件声明。这是不赞成的。Perl可能会给您一个警告(您正在使用使用警告,对吗?)
将声明移到自己的行中,提供默认值,并在新行中使用条件进行赋值
my $commrate = 'default'; # it's not clear which %commTypes is the default
$commrate = $rateTypes{$bCommType} if ($commTypes{$bCommType} == 2);
您需要提供默认值或起始值,因为Perl中的新变量总是以undef
开头,如果$commTypes{$bCommType}
的值为2,则将$commrate
设置为$rateTypes{$bCommType}
。但是$bCommType
为none
且$commTypes{none}
为零,因此不会发生赋值,并且$commrate
未定义
这是问题的根源,但除此之外,不应该有条件地声明变量。如果你尝试的话,它会做各种奇怪的和未定义的事情。正如simbabque所说,您需要单独声明变量并使assigment成为有条件的,但是在这种情况下,如果$commTypes{$bCommType}
的值为2,则结果将与我上面描述的原因相同您将$commrate
设置为$rateTypes{$bCommType}
。但是$bCommType
为none
且$commTypes{none}
为零,因此不会发生赋值,并且$commrate
未定义
这是问题的根源,但除此之外,不应该有条件地声明变量。如果你尝试的话,它会做各种奇怪的和未定义的事情。正如simbabque所说,您需要单独声明变量并使assigment成为有条件的,但是在这种情况下,结果将是相同的,因为我在上面描述了这是使用有条件声明的更好方法。无论您使用的是Perl、JavaScript、Java还是PHP,此方法都可以使用。在我声明条件的地方,问号前的陈述就是条件。问号后面的值是当条件计算为true时将分配给变量的值。如果语句的计算结果为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;
这是使用条件声明的更好方法。无论您使用的是Perl、JavaScript、Java还是PHP,此方法都可以使用。在我声明条件的地方,问号前的陈述就是条件。问号后面的值是当条件计算为true时将分配给变量的值。如果语句的计算结果为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;
你的问题是什么?你忘了问一个。您希望我们识别什么?my$commrate=$rateTypes{$bCommType}如果($commTypes{$bCommType}==2);我的变量中有一个未定义的值。:)你还没有问过一个问题。你只是在陈述事实,你的问题是什么?你忘了问一个。您希望我们识别什么?my$commrate=$rateTypes{$bCommType}如果($commTypes{$bCommType}==2);我的变量中有一个未定义的值。:)你还没有问过一个问题。你只是在陈述事实。谢谢,我会试试的。那么,我如何将条件输出传递给commrate变量?@jonnegrite对不起,我忘了赋值。更新。重要的部分是:1)在有条件地分配某个变量之前,需要声明该变量;2)需要分配某个变量,这样它就不会以undef
.my%commTypes开头=('none'=>'0'、'public'=>'1'、'custom_permeg'=>'2'、'custom_flat'=>'2',)这是commType@JonjonNegrite这是一个不同类型的列表。哪一个是默认类型?我认为您真正想要做的是$commrate=$rateType{$rateTypes{$bCommType};
。将$commrate
设置为$bCommType
中类型号后面的速率。顺便说一句,您的变量名不是很好。在Perl中,我们通常不使用驼峰大小写。请尝试为您的变量选择非常详细的名称,以便很容易理解它们的作用。谢谢,我将尝试一下。然后,如何传递条件输出ut到commrate变量?@jonnegrite抱歉,我忘记了赋值。已更新。重要的部分是1)在有条件地赋值之前需要声明变量,2)需要赋值,这样它就不会以undef
开头。my%commTypes=('none'=>'0'、'public'=>'1'、'custom_permeg'=>'2'、'custom_flat'=>'2',)这是commType@JonjonNegrite这是一个不同类型的列表。哪一个是默认类型?我认为您真正想要做的是$commrate=$rateType{$rateTypes{$bCommType};
。将$commrate
设置为$bCommType
中类型号后面的速率。顺便说一句,您的变量名不是很好。在Perl中通常不使用驼峰大小写。尝试为您的变量选择非常详细的名称,以便很容易理解它们的作用。