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 “变量”中的变量赋值:&引用;if语句_Perl - Fatal编程技术网

Perl “变量”中的变量赋值:&引用;if语句

Perl “变量”中的变量赋值:&引用;if语句,perl,Perl,我想在一个月内重新分配“$homologue”:声明并避免使用标志来实现这一点,即直接执行。输出为“1”,而不是AGFTVASTGHAVFEW--SAC。谢谢你的帮助 #!/usr/local/bin/perl use warnings; use strict; use feature qw(say switch); my $homologue; my $homologue_gap = "AGFTVASTGHAVFEW--SAC"; my $flag = 0; $homologue_gap =

我想在一个月内重新分配“$homologue”:声明并避免使用标志来实现这一点,即直接执行。输出为“1”,而不是AGFTVASTGHAVFEW--SAC。谢谢你的帮助

#!/usr/local/bin/perl
use warnings;
use strict;
use feature qw(say switch);
my $homologue;
my $homologue_gap = "AGFTVASTGHAVFEW--SAC";
my $flag = 0;

$homologue_gap =~ m/-/ ? $homologue = $homologue_gap : $flag = 1; 
say $homologue;
__DATA__
**Output** 
1
**Output sought** 
AGFTVASTGHAVFEW--SAC

背景,我正在提取序列中的同源寡肽,并考虑可能存在的任何索引(“-”字符)。

您需要至少在
$flag=1
-
的优先级高于
=

$ perl -MO=Deparse,-p -e '$a ? $b=1 : $c=2'
(($a ? ($b = 1) : $c) = 2);

$ perl -MO=Deparse,-p -e '$a ? $b=1 : ($c=2)'
(($a ? ($b = 1) : ($c = 2));

您可以使用
?:
操作符稍微聪明一点

($homologue_gap =~ m/-/ ? $homologue : $flag) = ($homologue_gap =~ m/-/ ? $homologue_gap : 1);

你有优先权问题

$homologue_gap =~ m/-/ ? $homologue = $homologue_gap : $flag = 1;
意味着

但是你想要

$homologue_gap =~ m/-/ ? ( $homologue = $homologue_gap ) : ( $flag  = 1 );
这不是条件运算符的适当用法。如果不使用它返回的值,那么使用
If
语句更好(更清晰)

if ($homologue_gap =~ m/-/) { $homologue = $homologue_gap } else { $flag = 1 }

也就是说,这种模式很少使用。我怀疑,如果我们能够访问周围的代码,就可以设计出更清晰的东西。

这个?:被称为三元运算符或条件运算符。请参阅文档:使用
?:
返回一个值(因为它是一个运算符)。如果在无效上下文中有
?:
,只需使用
If
/
else
;更清楚。谢谢,我已经在一个if/else语句中使用了这段代码。我更喜欢避免嵌套的if/else语句,因为}else{..后跟}else{语法。谢谢:-)。这是一个直接剪切粘贴的解决方案,是的,你肯定比我聪明一点。这太可怕了!!!读取/调试/维护非常困难,因为你将属于一起的部分隔开(ABCABC而不是ABBCC).谢谢。当我不太可能在最后期限前完成时,我会调查德帕尔斯,大卫·克罗斯在不同的背景下提出了这一点。非常感谢。现在我有时间来看看这是最整洁的解决方案。在最后期限的夹缝中,我只是没有发现它。德帕尔斯很酷。谢谢,我现在明白了。再次声明在一个小时内完成If else语句和我希望避免太多嵌套。@Micheal G.,这没有任何意义;不管你采取哪种方法,它都是相同的嵌套。我重复一遍,我怀疑你有一些组织不良的代码要处理,重新组织整个代码而不是只看这一行会使它更可读。是的,但这是一个错误大的“管道”和其他内容变得很难阅读,特别是在对大量数据进行调试和beta测试时。如果是单个“如果其他”,我喜欢将其区分开来,并帮助我保持头脑清醒数据流。
?:
的大管道要糟糕很多倍。人们普遍认为,
?:
只在最琐碎的情况下才清晰可见。由于您启动了调试,因此可能根本不可能单步执行
?:
,并且在其中跟踪路径既困难又容易出错实际上,我不是指程序的目的,而是指围绕它的实际代码。(“紧接着一个单词或一段文字前后并阐明其含义的书面或口头部分”)
if ($homologue_gap =~ m/-/) { $homologue = $homologue_gap } else { $flag = 1 }