一千萬個為什麽

搜索

為什麽Perl抱怨“無法修改非左值子程序調用”?


我有 index.plsubs.pl 。當我運行程序時,用戶插入出生日期,然後將其傳遞給 subs.pl 中的 getage()子程序,該子程序有許多子程序。 getage()比隱式調用另一個名為 validate()的子程序,該子程序驗證用戶輸入的日期。

當我運行 index.pl 並且用戶輸入日期為 03-04-2005 時,會出現以下錯誤:

can't modify non-lvalue subroutine call at subs.pl line 85, <> line 1

subs.pl 的第85行,我有:

list(my $val,my @value) = validate($dob);

validate() returns a message and the date($dob) which is sent from getage().

validate()中的一些代碼:

sub validate {
    my $dob = shift;
    my $error;
    my @test;
    @test = split("-",$dob);
    if ([email protected]) {
        $error = "date separator should be - ";
        return ($error,@test);
    }
    ...

最佳答案

解決方案似乎是:

my ($val, @value) = validate($dob);

基於我對該代碼的意圖的直觀理解 - 但我不能確定,直到你提供更多的上下文( validate()返回什麽, list()是什麽意思?)

如果你想將list()作為強制$ val和@value到列表中的一種方法,你只需要將它們括在括號中:($ val,@ value)來做到這一點

轉載註明原文: 為什麽Perl抱怨“無法修改非左值子程序調用”?

猜你喜歡