具有Undef的Perl三元运算符
我遇到了让三元运算符使用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',Email => 'boemail2'},{IP=>'x.x.x.53',{IP=>'x.x.x.54',Testnet=>'sqa',Owner=>'Richard',Email => 'sqaemail'},{IP=>'x.x.x.55',{IP=>'x.x.x.56',Testnet=>'fll-pro',Owner=>'Larry',Email => 'fllemail'},{IP=>'x.x.x.57',Owner=>'',{IP=>'x.x.x.58',Testnet=>'fll-pro2',Email => 'flemail2'},]; my $len = scalar @$qr; print "Starting of array: $lenn"; 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: $ln"; } 我也有一些其他的,但不想让这一切陷入困境.一切正常,如果在我的哈希中未定义所有者,那么当它打印时,它是预期的空白点.所以打印像这样: 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已定义,但为空,即’False’ upd:有一种更丑陋的三元运算符形式.它应该只用于娱乐,因为它使代码的可读性相当低: $name = $a && $emp->{Owner} || 'Undef'; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |