什么是Perl等同于C的返回和继续关键字?

前端之家收集整理的这篇文章主要介绍了什么是Perl等同于C的返回和继续关键字?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我使用此代码时,我收到此错误
sub search {
    my ($a,@a_list) = @_;
    foreach (@a_list) {
        if($_ == $a) return TRUE;
        # continue;
    }
    return FALSE;
}

Syntax error at code.pl line 26,near “) return”

>什么是正确的方式返回TRUE?
>还有,正确的方法是继续吗?

我知道我应该在Perl中更多地思考,而不是以这种方式将C代码转换为Perl。

解决方法

回报等值,继续,休息

return是相当于return的。
>接下来是等同于继续。
>最后是相当于休息。

‘if’语句后跟块

你的问题是,一个if语句总是跟着大括号内的一个块。

if ($_ == $a) { return TRUE; }
elsif (...)   { ... }
else          { ... }

对于所有这些,有时候似乎有点冗长,我同意ysth这是Perl的对象。对于一个有趣的替代方案,请参阅Go编程语言,它将括号视为不必要的,并且要求大括号。

‘if’可以用作限定词

或者您可以使用if作为语句修饰符:

return TRUE if $_ == $a;

请注意,在这种情况下,您不必在条件表达式周围使用括号,尽管添加它们并不会有任何损害。

使用’除非’

您也可以使用,除非如果反转条件:

return TRUE unless $_ != $a;

(而且,正如Phillip Potter所指出的那样,混合除非有一个否定条件使得理解更加困难;这个例子直接与问题一样,而是更好地写成如果平等的话)。

使用“下一个”和“最后”

你可以使用下一个和最后一个类似:

sub search {
    my ($a,@a_list) = @_;
    foreach (@a_list) {
        return TRUE if $_ == $a;
        last if $_ > $a;
        next if $ptom != LAST_QUARTER;
        ...
    }
    return FALSE;
}

请注意foreach循环中的修正。 (问题修改包括修复。)确保您始终使用“严格”和“使用警告”在你的脚本的顶部。专家总是用它们来确保他们没有犯错。初学者应该使用它们完全相同的原因。

真假

另外,正如其他答案中首先指出的那样,Perl没有预定义的常量TRUE和FALSE,除C或C以外(C有一个内置的true和false; C99具有true和false有条件地可用,如果#包括< stdbool.h>)。您可以为Perl提供以下定义:

use constant TRUE => 1;
use constant FALSE => 0;

不要小心了。即使不等于TRUE,一些事情也将是“真实的”;即使不等于FALSE,其他事情也将是“假的”。

讨论使用’$ a’和’$ b’

这些评论包含一个关于不使用$ a和$ b作为变量的讨论。依次,有关意见是:

>请避免使用$ a,除非它在排序块中。 – Zaid
> @Zaid:好点,$ a和$ b在排序块的上下文中是特殊的。我不知道是否有法令,他们不应该用其他方式 – 当有一个潜在的排序块时,使用它们将是恶毒的,但是在没有排序框的情况下,我没有看到任何理由对待$ a并且不同于$ z。 – 乔纳森·莱夫勒
> $ a和$ b是全局变量,因此表现与词汇不同。 – phaylon
> @phaylon:好吧,严格来说它们是“全局包”(见Perl sort)。是的,当你排序时,它们与词汇(我)的变量不同。当你没有进行排序时,如果你明确地声明它们,那么它们可以被视为词汇。 – 乔纳森·莱夫勒
> @Jonathan Leffler,他们也免除了使用严格的qw(vars);所以你可能不会注意到你从另一个范围践踏他们。 – Ven’Tatsu

指出明显的:我只使用$ a,因为问题是 – 而不是淹没原来的海报有很多细节,我主要保持的要点。例如,上一个和下一个的讨论没有提到循环标签

也就是说,建议“避免使用$ a和$ b作为变量”是声音;它们是指定的原因的特殊名称,并且使用它们留下可能或可能不被检测到的错误的可能性。

猜你在找的Perl相关文章