gpt4 book ai didi

带有 Undef 的 Perl 三元运算符

转载 作者:行者123 更新时间:2023-12-01 07:51:24 32 4
gpt4 key购买 nike

我在使用 undef 使三元运算符工作时遇到问题。
我的原始代码有效:

my $qr = [
{IP=>'x.x.x.51',Testnet=>'bos-portal-legacy',Owner=>'Amund', Email => 'bosemail'},
{IP=>'x.x.x.52',Testnet=>'bos-portal-2',Owner=>'Amund', Email => 'boemail2'},
{IP=>'x.x.x.53',Testnet=>'bos-portal-legacy',Owner=>'Amund', Email => 'bosemail'},
{IP=>'x.x.x.54',Testnet=>'sqa',Owner=>'Richard', Email => 'sqaemail'},
{IP=>'x.x.x.55',Testnet=>'sqa',Owner=>'Richard', Email => 'sqaemail'},
{IP=>'x.x.x.56',Testnet=>'fll-pro',Owner=>'Larry', Email => 'fllemail'},
{IP=>'x.x.x.57',Testnet=>'fll-pro', Owner=>'', Email => 'fllemail'},
{IP=>'x.x.x.58',Testnet=>'fll-pro2', Owner=>'', Email => 'flemail2'},
];
my $len = scalar @$qr;
print "Starting of array: $len\n";
my $l = $len;
my $a = @$qr[0]->{Owner};
func ($a);
my @ip;
my %test;
my $name;
my $manager;
my $ip_ref;
my $test_ref;
sub func{
foreach my $emp (@$qr) {
if ($l > 1 && $emp->{Owner} eq $a) {
$name = $emp->{Owner}; #to use with email as $a will change as cycle thru
$manager = $emp->{Manager};
push (@ip, $emp->{IP}); #capture all IPs related to owner $name
$test{$emp->{Testnet}} = $emp->{Email}; #capture unique testnets only related to owner $name
$l--; #to cycle thru array until reach last row
print "Finished line: $l\n";
}

我也有一些 elseif,但不想让这一切陷入困境。一切正常,如果我的哈希中的 Owner 未定义,那么当它打印出来时,它就像预期的那样是一个空白点。所以它打印如下:
Starting of array: 8
Finished line: 7
Finished line: 6
Finished line: 5
Amund
x.x.x.51, x.x.x.52, x.x.x.53
bos-portal-2
bos-portal-legacy
Finished with Amund
Moving on to Richard: 4
Finished line: 3
Richard
x.x.x.54, x.x.x.55
sqa
Finished with Richard
Moving on to Larry: 2
Larry
x.x.x.56
fll-pro
Finished with Larry
Moving on to : 1
#Blank Spot want to have $name printed as 'Undef' instead
x.x.x.57, x.x.x.58
fll-pro
fll-pro2

我现在想让 $name 是 $emp->{Owner} 除非所有者未定义然后而不是空白点它会说'Undef'。所以我想将代码中 $name = $emp->{Owner} 的所有部分更改为三元运算。

我已经尝试了 () 与 undef 的许多不同用途,因为这就是错误所指出的。一些类似的帖子谈到了我尝试过的定义或用法,以及其他帖子声称使用了定义,但如果我这样做了,那么所有名称都将变为“Undef”,而不仅仅是空白名称。其中一些什么都不做,我仍然得到空白。其他人会在 $a 现在未初始化的情况下给出错误。
$a = undef ? $name = 'Undefined' : $name = $emp->{Owner};
($a = undef) ? $name = 'Undefined' : $name = $emp->{Owner};
$a = undef($a) ? $name = 'Undefined' : $name = $emp->{Owner};
$name = undef($a) ? 'Undefined' : $emp->{Owner};
$name = $emp->{Owner} // 'Undefined';
defined($a) ? $name = $emp->{Owner} : $name = 'Undef';
$name = defined($a) ? $emp->{Owner} : 'Undef';

任何帮助将不胜感激。谢谢你。

最佳答案

Owner=>''

空不是未定义的,所以
$name = defined($a) ? $emp->{Owner} : 'Undef';

将永远返回 $emp->{Owner}内容,即使它是空的。然而
$name = $a ? $emp->{Owner} : 'Undef';

如果 $a 将替换为“Undef”为空且 $emp->{Owner}如果没有,因为 $a已定义,但为空,即“假”

更新:三元运算符有一种更丑陋的形式。它应该仅用于娱乐,因为它使代码的可读性大大降低:
$name =  $a && $emp->{Owner} || 'Undef';

关于带有 Undef 的 Perl 三元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48770407/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com