Perl返回if语句变量

时间:2018-07-30 09:28:19

标签: perl if-statement

我该怎么做: 我想从if语句返回IP服务器,如果要在变量上签名。有可能的?

#!/usr/bin/env perl
#

use warnings;
use strict;

my $variable1 = "10.12.1.1";
my $variable2 = "10.12.1.2";

my $string = $ARGV[0];

my $serveris=>(if ($string =~ m/^[abcdefghijklm]/) {
            print " $variable1 \n"
} else {
            print " $variable2 \n"
})


print $serveris

3 个答案:

答案 0 :(得分:4)

执行此操作的两种方法是使用三元运算符?:,或将赋值移动到if的主体中:

use warnings;
use strict;

my $variable1 = "10.12.1.1";
my $variable2 = "10.12.1.2";

my $string = "x";

my $serveris =
    $string =~ m/^[abcdefghijklm]/
    ? $variable1 : $variable2;
# -- OR --
my $serveris;
if ($string =~ m/^[abcdefghijklm]/) {
    $serveris = $variable1;
} else {
    $serveris = $variable2;
}

print " $serveris \n"

答案 1 :(得分:3)

您可以使用lambda函数。

#!/usr/bin/env perl

use warnings;
use strict;

my $variable1 = "10.12.1.1";
my $variable2 = "10.12.1.2";

my $string = $ARGV[0];

my $serveris = sub {
    my ( $string ) = @_;
    if ($string =~ m/^[abcdefghijklm]/) {
            return " $variable1 \n"
    } else {
            return " $variable2 \n"
    }

};

print $serveris->($string)

参考:How to run an anonymous function in Perl?

答案 2 :(得分:0)

示例代码最简单的选择是使用三元运算符:

my $serveris = $string =~ m/^[abcdefghijklm]/
             ? $variable1
             : $variable2;

但是,如果事情更复杂,嵌套三元运算符可能会引起一些混乱。要维持if/else语句的结构,请使用do块。 do返回该块中最后一个求值语句的结果作为其值。

my $serveris = do {
    if ($string =~ m/^[abcdefghijklm]/) {
        $variable1;
    } else {
        $variable2;
    }
};