2015-02-07 41 views
1

因此,我試圖自學perl作爲一種新語言。我發現學習一門新語言的最好方法就是爲自己設定一個項目。這個項目是一個文本遊戲。我今天晚上纔剛剛開始。我需要從用戶那裏獲得輸入,然後將其寫入文件。由於我會一遍又一遍地做這個,所以我認爲最好是將代碼放在子程序中,如下所示。第12行不能使用未定義的值作爲符號引用

唯一的問題是,總是收到以下錯誤: 不能使用未定義的值作爲在book1.pl線的符號引用12,<>線2

任何幫助,將不勝感激:)

#!/usr/bin/perl 

use 5.010; 
use strict; 
use warnings; 

my $filename = 'save.txt'; 
sub open_save{ 
    open(my $fh, '>', $filename) or die "Could not open file '$filename' $!"; 
} 
sub close_save{ 
    close my $fh; 
} 
print "Welcome to the 40K universe\nWhat is your first name?"; 
my $first_name = <>; 
print"What is your surname?"; 
my $surname = <>; 
my $name = $first_name . $surname; 
open_save(); 
print "$name"; 
close_save(); 
+0

'my'聲明_local_變量。 – Mat 2015-02-07 22:01:05

+0

感謝您的信息:) – 2015-02-07 22:10:26

+0

在'open_save'中,您打開一個文件句柄,但將其範圍限定在該子例程中。所以它立即關閉,變量無效。 – Sobrique 2015-02-07 23:46:30

回答

3

my創建並返回一個新變量。你將這個新變量傳遞給close,這相當合理地抱怨它不是文件句柄。

#!/usr/bin/perl 

use 5.010; 
use strict; 
use warnings; 

sub open_save { 
    my ($filename) = @_; 
    open(my $fh, '>', $filename) 
     or die "Can't open file '$filename': $!\n"; 
    return $fh; 
} 

sub close_save { 
    my ($fh) = @_; 
    close $fh; 
} 

{ 
    my $filename = 'save.txt'; 
    ... 
    my $fh = open_save($filename); 
    print $fh "$name\n"; 
    close_save($fh); 
} 
相關問題