我从多个教程中听说没有布尔变量。相反,我可以使用1表示true,0表示false表示。但是,我有两种方法来获取布尔值。输出是相同的..但我不知道哪种方法对于收集返回布尔值是正确的。 让我给你举个例子 我创建了一个脚本,call.pl从另一个脚本script.pl调用该函数,script.pl将返回1或0.我执行if条件来评估。 如果这是真的,它会说它甚至是奇怪的。
方法1 script.pl
sub checkevenodd {
my ($num) = @_;
chomp($num);
my $remainder = $num % 2;
if ($remainder == 0)
{
return 1;
}
else
{
return 0
}
}
1;
call.pl
require "script.pl";
my $no = 123;
if (checkevenodd($no) == 1)
{
print "it is even";
}
else
{
print "it is odd";
}
方法2 script.pl
sub checkevenodd {
my ($num) = @_;
chomp($num);
my $remainder = $num % 2;
if ($remainder == 0)
{
return 1;
}
else
{
return 0
}
}
1;
call.pl
require "script.pl";
my $no = 123;
if (checkevenodd($no))
{
print "it is even";
}
else
{
print "it is odd";
}
我使用该函数来检查它是1还是0 ...然后如果它是1,它是偶数或奇数。 那么哪种方法最适合从函数中接收布尔值?我不想创建变量。相反,我想返回1或0 ..如何得到1或0 ..这是正确的方法??
答案 0 :(得分:2)
当你写:
if (checkevenodd($no) == 1)
您没有检查布尔值。您正在检查值1.在这种情况下它将起作用(因为checkevenodd()
只返回0或1)但是,通常,您应该只检查布尔表达式的真实性,而不是它的值。写作要好得多:
if (checkevenodd($no))
其他几点。
checkevenodd
不是这个子程序的好名字。当我有子程序返回布尔值时,我总是尝试给它们一个以is_
开头的名称。如果数字是偶数,则子例程返回true,因此我将调用此子例程is_even()
。您的子程序远比它需要的复杂得多。我会把它写成:
sub is_even {
my ($num) = @_;
# For an even number, $num % 2 is zero - which is false.
# Therefore use ! to make it true.
return ! $num % 2;
}
答案 1 :(得分:1)
这样的事情怎么样?
sub even_odd {
my ($num) = @_;
my $remainder = $num % 2;
return $remainder ? 0 : 1;
}
并将其用作完整的脚本:
my $no = 123;
if (even_odd($no))
{
print "it is even";
}
else
{
print "it is odd";
}
sub even_odd {
my ($num) = @_;
my $remainder = $num % 2;
return $remainder ? 0 : 1;
}
返回:奇怪