从perl中的函数中获取返回布尔值



我从多个教程中听到没有布尔变量。相反,我可以将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;
}

返回:它是奇数

最新更新