gpt4 book ai didi

perl - 如何使用 Perl 的三元条件运算符构造单词的复数形式?

转载 作者:行者123 更新时间:2023-12-02 07:04:08 25 4
gpt4 key购买 nike

我在制作涉及链式三元条件运算符的语句时遇到了一些麻烦。

显然我可以用标准方式编写它们,但了解它们为何无法正常工作会很有用。

我想做的伪代码:

if $feature ends with 's', make $group = upper case $feature

if $feature ends with 'y', remove the y & replace with 'ies' before making $group = upper case $feature

if $feature ends with anything else, add an 's' and make $group = upper case $feature.

我尝试过使用 c 风格的 ifs:

substr($feature,-1) eq 'y' ? $group = uc(chop($feature)).'IES'
: substr($feature,-1) ne 's' ? $group = uc($feature).'S'
: $group = uc($feature);

substr($feature,-1) ne 's' ? substr($feature,-1) eq 'y' ? $group = uc(chop($feature)).'IES'
: $group = uc($feature).'S'
: $group = uc($feature);

发生的情况是,如果我在 $feature 中有一个以 en 结尾的字符串,它找不到 $group = uc( $feature).'S'.我尝试改变它并使用 eq 's' 但随后它在已经以 s 结尾的字符串上添加了一个额外的 S

感谢任何帮助!

编辑:

感谢 dan1111,这是有效的:

$group = substr($feature,-1) ne 's' ? substr($feature,-1) eq 'y' ? uc(chop($feature)).'IES'
: uc($feature).'S'
: uc($feature);

最佳答案

Perl 的一个怪癖是您实际上可以分配给三元运算符:

condition ? $a : $b = 2;

根据条件是否为真,这会将 2 分配给 $a$b

同样,在您的代码中,uc($feature) 被分配给条件的不同部分,具体取决于什么是真的。

因此,如果 substr($feature,-1) ne 's' 在您的代码中为真,Perl 会执行如下操作:

($group = uc($feature).'S') = uc($feature);

uc($feature) 分配给 $group

我认为 Perl 的这个特性很愚蠢,而且有点令人遗憾。尽管如此,您真的不应该使用三元运算符来控制流程。仅将其用于简单检查:

print $result == 1 ? 'yes' : 'no';

您当然不应该将多个三元运算符组合在一起,因为这很容易混淆。这有什么问题吗?

if (substr($feature,-1) eq 'y')
{
$group = uc(chop($feature)).'IES';
}
elsif (substr($feature,-1) ne 's')
{
$group = uc($feature).'S';
}
else
{
$group = uc($feature);
}

关于perl - 如何使用 Perl 的三元条件运算符构造单词的复数形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15270007/

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