使用此代码时出现此错误
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"
return TRUE
的正确方法是什么? ? continue
的正确方法是什么? ? 我知道我应该更多地考虑 Perl 术语而不是尝试以这种方式将 C 代码转换为 Perl。
最佳答案
return、continue、break 的等价物
return
相当于返回。 next
相当于继续。 last
相当于break。 “if”语句后跟块
您的问题是
if
语句后面总是跟着一个大括号内的块。if ($_ == $a) { return TRUE; }
elsif (...) { ... }
else { ... }
尽管有时看起来有点冗长,但我同意 ysth这是 Perl 做对的事情。有关有趣的替代方案,请参阅 Go将括号视为不必要的编程语言并强制使用大括号。
'if' 可以用作限定符
或者您可以使用
if
作为语句修饰符:return TRUE if $_ == $a;
请注意,在这种情况下,您不必在条件表达式周围使用括号,尽管添加它们没有坏处。
使用“除非”
您也可以使用
unless
而不是 if
反转条件:return TRUE unless $_ != $a;
(而且,正如 Phillip Potter 所指出的,将
unless
与否定条件混合会使理解更困难;该示例直接与问题相同,但最好写成 if
并具有相等性。)使用“下一个”和“上一个”
您可以使用
next
和 last
相似地:sub search {
my ($a, @a_list) = @_;
foreach (@a_list) {
return TRUE if $_ == $a;
last if $_ > $a;
next if $ptom != LAST_QUARTER;
...
}
return FALSE;
}
注意
foreach
中的修正环形。 (问题已修正以包含修正。)确保您始终拥有“use strict;
” ' 和 ' use warnings;
' 在脚本的顶部。专家总是使用它们来确保他们没有犯错误。初学者应该出于完全相同的原因使用它们。真假
此外,正如其他答案中首先指出的那样,Perl 没有预定义的常量 TRUE 和 FALSE,与 C 或 C++ 一样(C++ 具有内置的
true
和 false
;C99 具有 true
和false
如果您 #include <stdbool.h>
有条件地可用)。您可以将 Perl 的定义提供为:use constant TRUE => 1;
use constant FALSE => 0;
不过要小心。有些事情即使不等于 TRUE 也会是“真的”;即使不等于 FALSE,其他事情也会是“假”。
关于'$a'和'$b'的使用的讨论
评论包含关于不使用
$a
的讨论和 $b
作为变量。相关评论依次为:指出明显的:我只使用了
$a
因为这个问题确实存在 - 而不是用大量细节淹没原始海报,我主要保留了要点。比如last
的讨论和 next
没有提到循环标签。也就是说,建议“避免使用
$a
和 $b
作为变量”是合理的;由于所指出的原因,它们是特殊名称,使用它们可能会出现错误,这些错误可能会或可能不会被检测到。
关于perl - C 中 return 和 continue 关键字的 Perl 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3575979/