我有 index.pl 和 subs.pl 。当我运行程序时,用户插入出生日期,然后将其传递给 subs.pl 中的getage()
子程序,该子程序有许多子程序。
getage()
比隐式调用另一个名为validate()
的子例程,它验证用户输入的日期。
当我运行 index.pl 并且用户输入日期03-04-2005
时,会出现以下错误:
不能修改subs.pl第85行的非左值子程序调用,<>第1行
在 subs.pl 的第85行,我有:
list(my $val,my @value) = validate($dob);
validate()
会返回一条消息以及date($dob)
发送的getage()
。
来自validate()的一些代码:
sub validate {
my $dob = shift;
my $error;
my @test;
@test = split("-",$dob);
if (!@test) {
$error = "date separator should be - ";
return ($error,@test);
}
...
答案 0 :(得分:4)
解决方案似乎是:
my ($val, @value) = validate($dob);
基于我对该代码的意图的直观理解 - 但我不能确定,直到你提供更多的上下文(validate()
返回什么,list()
是什么意思?)
如果你想将list()作为强制$ val和@value加入列表的方法,你只需要将它们括在括号中:($val, @value)
来做那个
答案 1 :(得分:1)
左值是您可以修改的变量。 (一个可以在作业的左侧,因此名称)。在大多数情况下,sub返回的值是而不是您可以修改的值。
在您的示例中,您正在尝试这样做:将validate($dob)
的返回值分配给list($val, @value)
的不可修改的返回值。
答案 2 :(得分:0)
在行
list(my $val,my @value) = validate($dob);
删除'list'并且工作正常
即
(my $val,my @value) = validate($dob);
感谢 Kayra 和其他回答
的人