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
答案 0 :(得分:1)
也许您的意思是sub
(子例程/函数的Perl关键字)。 Perl subroutines教程是一个很好的开始。
答案 1 :(得分:1)
您的函数定义无效Perl语法。
sub
,而不是function
。;
。@_
。此外,您首先从函数中return
然后进行一些计算。返回print
的结果似乎没有用 - 相反,您可以保存结果,打印并返回结果。我已将其更改为
您只粘贴了部分代码,但这会修复您的功能定义。我还改进了你的代码格式。
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
和&&
不一样,行为也不同。经验法则:除非您正在进行二进制计算并且可能确切知道您正在做什么,否则您可能最常需要and
或or
。我不太确定^
- 它是二进制 xor。也许更好地使用xor
?