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

在perl中从函数获取返回布尔值,perl,Perl,我从多个教程中听说没有布尔变量。相反,我可以用1表示真,用0表示假。但是,我有两种方法来获取布尔值。输出是相同的。。但我不知道哪种方法是收集返回布尔值的正确方法。 让我给你举个例子 我制作了一个脚本call.pl来从另一个脚本script.pl调用函数,script.pl将返回1或0。我执行if条件以进行计算。 如果它是真的,它会说它是真的,否则它就是奇怪的 方法1 script.pl sub checkevenodd { my ($num) = @_; chomp($num

我从多个教程中听说没有布尔变量。相反,我可以用1表示真,用0表示假。但是,我有两种方法来获取布尔值。输出是相同的。。但我不知道哪种方法是收集返回布尔值的正确方法。 让我给你举个例子 我制作了一个脚本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;
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";
}
require "script.pl";
my $no = 123;
if (checkevenodd($no))
{
    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;
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";
}
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。在这种情况下,它将起作用(因为
checkenOdd()
只返回0或1),但一般来说,您应该只检查布尔表达式的真值,而不是它的值。最好写下:

if (checkevenodd($no))
还有几点

  • checkenOdd
    不是此子例程的好名称。当我有返回布尔值的子例程时,我总是尝试给它们一个以
    is\uu
    开头的名称。如果数字为偶数,则您的子例程将返回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;
      
      }
      

      返回值:奇数

      0和1分别被视为false和true。因此,您可以简单地使用缩写形式:
      if(checkevenodd($no)){…}
      。我认为这种隐式形式也更正确,因为您实际上是在检查条件是否为真,而不是比较整数。0为假,但1不完全为真,它只是一个可能的真值。一切都是真实的,而不是虚假的。例如,2也是真的。@ceving,0也只是许多假值中的一个。将子例程放在不同的文件中完全是在转移注意力。我不明白为什么perl中没有布尔变量,而其他编程中却有布尔变量