Perl调用函数出错

时间:2015-02-21 17:32:54

标签: perl function syntax-error

    function cal(sal); 
{

  if ($attendance eq $good && $rating eq $good ^ $average)

{

  return ( $calsal = $sal + 0.2 * $sal );

  print  "salary = $calsal\n";


  }

  else 

  {

  return ( print "employee is not worthy\n");

};

获取如下错误:

cant locate object method "function" via package "cal" <perhaps you forgot to load "cal">? at txt.pl line 30, <employee_cost> line 2

请有人建议。

employee_cost.txt详细信息:

name, department, attendence, rating, sal
A, HR, bad, bad, 1000
B, Sales, good, good, 3000
C, Admin,bad, average, 1500
D,Admin, bad,average, 2000
E,Contract temp, good, average, 2000
F, production, good, bad, 1500

2 个答案:

答案 0 :(得分:1)

也许您的意思是sub(子例程/函数的Perl关键字)。 Perl subroutines教程是一个很好的开始。

答案 1 :(得分:1)

您的函数定义无效Perl语法。

  1. Perl中必要的关键字是sub,而不是function
  2. 在函数名称或功能块之后没有simicolon ;
  3. 标准Perl 5不知道函数签名(函数参数的数量,类型和名称)。而是从@_
  4. 中读取变量

    此外,您首先从函数中return然后进行一些计算。返回print的结果似乎没有用 - 相反,您可以保存结果,打印并返回结果。我已将其更改为

    1. 进行计算,
    2. 打印结果然后
    3. 返回结果。
    4. 您只粘贴了部分代码,但这会修复您的功能定义。我还改进了你的代码格式。

      sub cal {
         my ($sal) = @_; # could also write: my $sal = shift @_;
      
         if ($attendance eq $good and $rating eq $good ^ $average) {
             my $calsal = $sal + 0.2 * $sal;
             print  "salary = $calsal\n";
             return $calsal;
         }
         else {
             print "employee is not worthy\n";
             return; # return no value
         }
      }
      

      PS:您在&&子句中使用二进制运算符^if。我相信你应该and而不是&&因为你正在连接条件。请注意and&&不一样,行为也不同。经验法则:除非您正在进行二进制计算并且可能确切知道您正在做什么,否则您可能最常需要andor。我不太确定^ - 它是二进制 xor。也许更好地使用xor