【问题标题】:Error while using ternary operator in perl在 perl 中使用三元运算符时出错
【发布时间】:2016-08-17 01:36:43
【问题描述】:

我正在尝试使用以下格式打印数组: 1 .. 双引号每个元素 2 .. 在元素之间加逗号 由于某种原因,我下面的代码没有生成正确的格式

my @new_arr = (0 .. 5);
my $new_str = "";

for my $index ( 0 .. $#new_arr)
{
    print "$index .. $new_arr[$index]\n";
    ($index == $#new_arr) ?  $new_str.= "+\"$new_arr[$index]\"":$new_str.=     "\"$new_arr[$index]\"\,";

}
print "$new_str \n";

【问题讨论】:

  • $ perl -wE 'say join(",", map { qq{"$_"} } 0 .. 5)'

标签: perl


【解决方案1】:
$new_str = q{"} . join( q{","}, @new_arr ) . q{"};

例子:

@new_arr = (0..5);
$new_str = q{"} . join( q{","}, @new_arr ) . q{"};
print $new_str,"\n";

输出:

"0","1","2","3","4","5"

perl -MO=Deparse,-p ... 演示了您原始代码的问题:

$ perl -MO=Deparse,-p ternary.pl
(@a = (0..5));
foreach my($index) (0 .. $#a) {
    print("$index .. $new_arr[$index]\n");
    ((($index == $#a) ? ($new_str .= qq[+"$a[$index]"]) : $new_str) .= qq["$a[$index]",]);
}
print("$new_str \n");

即三元表达式中的.= 运算符没有正确分组。您可以通过适当地使用括号来挽救它:

($index == $#new_arr) ? ($new_str.= "+\"$new_arr[$index]\""):($new_str.=     "\"$new_arr[$index]\"\,");

或将$new_str .= 拉出三元表达式的每一侧

$new_str .= $index == $#new_arr ? "+\"$new_arr[$index]\"" : "\"$new_arr[$index]\"\,";

但归根结底,这对于 Perl 的内置 join 函数来说是一个很好的用例。

【讨论】:

【解决方案2】:
$ perl -wE 'say join(",", map { qq{"$_"} } 0 .. 5)'

输出:

"0","1","2","3","4","5"

最初的map 添加双引号,然后join 从新的双引号列表元素创建一个逗号分隔的字符串。我们需要在这里使用qq,因为我们想要一个包含双引号的内插字符串。

【讨论】:

    猜你喜欢
    • 2013-01-17
    • 2019-12-11
    • 2011-05-17
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2016-03-04
    相关资源
    最近更新 更多