在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
有一天,我在Perl遇到了一个困扰我的问题,仅仅是因为我还没有找到答案。 这是我的问题。 请看以下示例: 多变量分配:Perl允许使用如下语法同时声明多个变量: my ($var1, $var2) = (100, 200); 这将返回以下结果: variable 1 is: 100, variable 2 is: 200 字符串分割:很容易吧? 与大多数语言一样,Perl还允许拆分字符串。 拆分字符串的语法如下所示: my $str1 = 'a sentence has many words'; foreach my $x ( @arr1 ) { 该示例的打印结果将为我们提供以下内容: word: a 三元运算符:最后,Perl还允许三元运算符。 这是一种很好的合并代码的方式,并且可以将所有其他内容保持在同一行中,尽管对于哪种样式更好,更具可读性尚存争议。 无论如何,请采用以下字符串: my $str2 = 'This string has two sentences - A dash separates them'; 现在,如果我们想根据条件语句进行拆分,则可以执行以下操作: my @arr7 ; 此代码将为我们提供以下输出: ========== array7[0]This string has two sentences 但是,通过使用三元运算符,我们可以获得更少的代码,而得到相同的输出。 如果编写如下,则上述if / else块将提供相同的输出: my ( @arr2 ) = (index($str2, '-') != -1) ? split /-/,$str2 : split /:/,$str2; 我们的输出是: arr2[0] is: This string has two sentences 现在,让我们从前面的if / else块开始,并添加两个数组。 我们将在if else块中设置每个数组的值。 我们的两个字符串如下: my $str2 = 'This string has two sentences - A dash separates them'; 我们的条件语句是: my ( @arr5 , @arr6 ); print "array 5[0] is: ", $arr5[0], "\n"; print "array 6[0] is: ", $arr6[0], "\n"; 我们的输出如下: array 5[0] is: This string has two sentences 这是我卡住的地方:现在,考虑到所有这些,您似乎应该能够将以上所有内容组合为一行三元运算符。 如前所述,我们可以在三元组中声明多个变量。 因此,似乎我们应该能够完全执行上面的代码,但是使用三元代码而不是if else块。 像这样: my ( @arr3 , @arr4 ) = (index($str2, '-') != -1) ? split /-/,$str2, split /;/, $str4 : split /:/,$str2, split /;/, $str4; 基本上,这是在三元条件语句的每个部分中设置两个数组的值的方式完全相同。 但是,如果我们打印结果: print "array 3[0] is: ", $arr3[0], "\n"; print "array 4[0] is: ", $arr4[0], "\n"; 我们得到以下输出: array 3[0] is: This string has two sentences 即使将两个评估块都放在括号中,其结果仍然相同。 我的结论是,每个拆分函数中的附加逗号都会抛出三进制条件块,而不会捕获第二组。 但是,这只是一个猜测,因为我没有在其他地方找到答案。 如果有人有任何见识,我将不胜感激。 并不是说在任何现实情况下这都是必要的。 但这让我感到烦恼,似乎它应该可以工作,但是不起作用,我也不知道为什么! From: https://hackernoon.com/ternary-trouble-in-perl-fc138b345843 |
请发表评论