我从多个教程中听到没有布尔变量。相反,我可以将1用于true或0用于false。但是,我有两种获得布尔值的方法。输出是相同的。但是我不知道哪种方法是正确收集返回布尔值的正确方法。让我举一个例子我制作了一个脚本,call.pl以从另一个脚本script.pl和脚本.pl调用函数。如果是真的,它将说它甚至是奇怪的。
方法1script.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";
}
方法2script.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 ..是正确的方法??
写作:
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; }
这样的事情怎么样?
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;
}
返回:它是奇数