Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl中将多个字符串映射为一个字符串_Perl - Fatal编程技术网

在perl中将多个字符串映射为一个字符串

在perl中将多个字符串映射为一个字符串,perl,Perl,我想做一些像 $val = "value1" my %test = ("value1" => "yes", "value2" => "yes", "value3" => "yes"); print $test{$val}; 因此,如果$val等于value1、value2或value3,则显示是,否则显示否 不确定我是否以正确/有效的方式进行。我是perl新手您必须测试哈希中是否存在具有此类键的值: if (defined $test{$val}) { print

我想做一些像

$val = "value1"
my %test = ("value1" => "yes", "value2" => "yes", "value3" => "yes");
print  $test{$val};
因此,如果$val等于value1、value2或value3,则显示是,否则显示否


不确定我是否以正确/有效的方式进行。我是perl新手

您必须测试哈希中是否存在具有此类键的值:

if (defined $test{$val}) {
    print "$test{$val}\n";  # or you might use: print "yes\n"; depending on what you're doing
}
else {
    print "no\n";
}
print exists $tests{$val} ? $tests{$val} : "no";

通常,在检查其存在性后,您必须通过defined检查其定义性,但在您的特定情况下,这是不必要的,因为%test哈希似乎是常量,并且仅由不包含undef的常量组成。

您必须测试哈希中是否存在具有此类键的值:

print exists $tests{$val} ? $tests{$val} : "no";

通常,在检查其存在性之后,您必须通过defined检查其定义性,但在您的特定情况下,这是不必要的,因为%test哈希似乎是常量,并且仅由不包含unde的常量组成。

这里的答案有些复杂

如果散列中的有效值不能为零或空字符串,或者在perl中计算为false的任何其他值,则可以执行以下操作:

say $test{$val} ? $test{$val} : "no";

如果$test{$val}不存在、未定义、为空或为零,则此表达式将为false

这里的答案有些复杂

如果散列中的有效值不能为零或空字符串,或者在perl中计算为false的任何其他值,则可以执行以下操作:

say $test{$val} ? $test{$val} : "no";

如果$test{$val}不存在、未定义、为空或为零,则此表达式将为false

当只有两个选项时,哈希是否是最好的数据结构?以下是三种可能的替代子程序,它们同样满足要求:

sub test_ternary {
    $_[0] eq 'value1' ? 'yes' :
    $_[0] eq 'value2' ? 'yes' :
    $_[0] eq 'value3' ? 'yes' : 'no'  ;
}

sub test_regex { $_[0] =~ /value[123]/ ? 'yes' : 'no' }

use feature 'switch';
sub test_switch {
    given ( $_[0] ) {

        return 'yes' when /value[123]/;

        default { return 'no'; }
    }
}

当只有两个选项时,哈希是否是最好的数据结构?以下是三种可能的替代子程序,它们同样满足要求:

sub test_ternary {
    $_[0] eq 'value1' ? 'yes' :
    $_[0] eq 'value2' ? 'yes' :
    $_[0] eq 'value3' ? 'yes' : 'no'  ;
}

sub test_regex { $_[0] =~ /value[123]/ ? 'yes' : 'no' }

use feature 'switch';
sub test_switch {
    given ( $_[0] ) {

        return 'yes' when /value[123]/;

        default { return 'no'; }
    }
}

实际上,您应该测试键是否存在,然后测试值是否已定义,然后测试它是否等于yes。是的,perl。@mkb:假设散列是静态的,并且只由常量组成,那么检查一个值是否未定义是不必要的。@mkb您只需要检查是否存在并定义了该键的有效值是否为0或。我只是开玩笑;我真的很喜欢perl。真的,您应该测试键是否存在,然后测试值是否定义,然后测试它是否等于yes。是的,perl。@mkb:假设散列是静态的,并且只由常量组成,那么检查一个值是否未定义是不必要的。@mkb您只需要检查是否存在并定义了该键的有效值是否为0或。我只是开玩笑;我喜欢perl,真的。你不必检查这样的值是否存在。您只需检查是否要使用该特定值,而不必检查是否存在该值。你只需要检查一下你是否想使用这个特定的值;别忘了智能匹配:print$value~{value1,value2,value3]?是的:noIt很容易对这三个备选方案进行基准测试和微优化;别忘了智能匹配:print$value~{value1,value2,value3]?是的:nosay$test{$val}|如果您确定%test中的有效值始终为真,请说$test{$val}| |如果您确定%test中的有效值始终为真,则选择“否”