我该怎么做: 我想从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
答案 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)
答案 2 :(得分:0)
示例代码最简单的选择是使用三元运算符:
my $serveris = $string =~ m/^[abcdefghijklm]/
? $variable1
: $variable2;
但是,如果事情更复杂,嵌套三元运算符可能会引起一些混乱。要维持if/else
语句的结构,请使用do
块。 do
返回该块中最后一个求值语句的结果作为其值。
my $serveris = do {
if ($string =~ m/^[abcdefghijklm]/) {
$variable1;
} else {
$variable2;
}
};